Math 将平行(类似)多段线编组在一起
如何检查两条多段线是否接近平行?它们不必非常平行,但应该是相似的,因为它们朝着同一个方向前进 @编辑 我想我需要再解释一下这一切背后的想法。作为输入,我得到许多多边形线。我要做的是将平行的多段线组合在一起(通常方向类似)。结果将是一组类似的多边形线 多边形线条看起来如何。它们通常是直线向上或向左或向右移动。不必从相同的y值开始。多段线的点通常不在同一高度,这意味着具有不同的y值。由于多段线通常在某个间隔内平行,然后开始不同,我希望找到间隔边界,并在此间隔内定义多段线平行的部分。当然,间隔不应该太小 现在我将举例说明我希望得到的结果。从4条多段线开始,P1到P4以蓝色显示。对于人类来说,很明显,线P1-P3在红线b1之前是非常平行的。因此,这应该是第一组G1平行多段线。红线b1之后是平行多段线P1和P4。因此,他们建立了G2组。多线P3与其他任何东西都不平行,因此在G3组中是单独的。 希望这个例子能有所帮助 应声明为平行的两条多边形线示例: 应声明为不平行的两条多边形线的示例 @编辑2 将douglas peuker算法应用于输入多段线后,我得到了这个结果。现在我要将平行多段线分组在一起。如何找到要比较的对应行分段? 如图“如何比较线段”所示,多段线1和2只应在间隔[b1,b2]中分组在一起。我如何找到这个间隔? 这实际上意味着我需要找到要比较的片段。如果我比较它们,如果它们不平行,我将它们归类为不平行。如果它们是平行的,我仍然需要找到它们平行的间隔,对吗?这是因为一条多段线可以从另一条多段线开始和结束。Math 将平行(类似)多段线编组在一起,math,polyline,Math,Polyline,如何检查两条多段线是否接近平行?它们不必非常平行,但应该是相似的,因为它们朝着同一个方向前进 @编辑 我想我需要再解释一下这一切背后的想法。作为输入,我得到许多多边形线。我要做的是将平行的多段线组合在一起(通常方向类似)。结果将是一组类似的多边形线 多边形线条看起来如何。它们通常是直线向上或向左或向右移动。不必从相同的y值开始。多段线的点通常不在同一高度,这意味着具有不同的y值。由于多段线通常在某个间隔内平行,然后开始不同,我希望找到间隔边界,并在此间隔内定义多段线平行的部分。当然,间隔不应该太
首先拒绝任何交叉口 然后对直线进行线性回归。为“大致平行”设定阈值。现在选择一条多段线,并从最佳拟合线中选取最远的点(如果是端点,则选择下一点)。现在,在“最佳拟合”点拆分另一条多段线(基本上是带一点坡度的距离,以允许较小的局部偏差,并尽可能在角点上剪切)
重复此操作,直到所有线段都不是多段线,并应用相当大的距离和方向阈值 对于多段线A上的每个顶点,找到多段线B上最近的点,并输出这两点之间的距离。(改为使用最近的顶点可能效果很好。) 对B和A做同样的处理
现在对找到的距离进行线性回归。你应该得到一条水平线,大约。定义此检查的阈值。在您的示例中,您知道每对线段共享y轴坐标,因此这些是索引, 此外,根据您的示例,这些线是连续的 每个端点处两条直线之间的距离(y坐标)是已知的。因此:
for y in 0:n
delta_x[y] = abs(blue_x[y] - red_x[y])
然后,如果你从它们中减去最小的delta_x[y]
您将有一条非负曲线,即该曲线下的面积
将与你的线的平行度成正比
面积越小,平行度越高,面积越大,平行度越低,
完全平行,没有区域
但是只有您可以选择阈值。如果在双空间中查看问题,您可以做什么。您可能遇到了用于图像处理的。这将线映射到点,点集称为对偶空间 其基本思想是,您可以通过一对数字(m,c)对直线y=mx+c进行参数化。可以对每条多段线中的每条线段执行此操作。这些为每个段提供了一组点。这些点应形成以(m1,c1)和(m2,c2)为中心的两个簇。如果直线平行,那么m1=m2 这需要某种形式的聚类算法,可能是k-means,所以您可能需要一些计算机视觉工具包。要对线进行参数化,您可能不希望使用(m,c),因为这些线不适用于垂直线。有些算法使用直线的角度和与点的距离 对此的改进是尝试将线段拟合到多段线的部分。您可以先定义直线段的长度,然后查找长度约为该长度的多段线子集。
然后用这些子集做一些直线拟合,比如线性回归。使用这些装配线,您可以使用双参数来比较装配线
如果我们考虑对偶空间中的线和点,就有一种关系
normal space <---> dual space
line <---> point
point <---> line
正规空间对偶空间
线点
点线
所以每一条线对应一个点,每一个点对应一条线
如果我们将多段线映射到双空间,我们可能会得到如下结果
这不是一个精确的图表。每条线段成为一个点,每个点成为一条线。你会发现,双空间有点像是环绕着拟合线的双空间。“它们不必非常平行,但应该是相似的,因为它们在同一个方向上。那么,在同一方向上但相互相交的线段呢?它们总是总的方向吗(从下到上或其他)可被视为单值函数X(y)?是的,它始终是单值函数。如图2所示