如何检查两条折线是否接近平行?它们不必完全平行,但应该相似,因为它们朝同一方向移动
@编辑
我想我需要更多地解释一下一切背后的想法。作为输入,我得到许多多段线。我想要做的是将非常平行的折线分组在一起(通常方向相似)。结果将是相似的多段线组。
多段线是什么样子的。它们通常直接向上或向左或向右移动。它们不必以相同的 y 值开始。折线的点通常不在同一高度,这意味着具有不同的 y 值。由于多段线通常在某个间隔内平行,然后开始不同,我想找到间隔边界并定义该间隔内平行的多段线的部分。当然间隔不能太小
我现在将说明一个示例以及我想要得到的结果。从 4 条折线开始,P1 到 P4 显示为蓝色。对于人类来说,很明显,线 P1-P3 是相当平行的,直到红线 b1。因此,这应该是第一组平行折线 G1。红线 b1 之后是平行的折线 P1 和 P4。因此他们组建了G2组。折线 P3 不与其他任何物体平行,因此单独存在于组 G3 中。 希望插图有帮助
应声明为平行的两条折线示例:
.
应声明为不平行的两条折线示例
@编辑2 将 douglas peuker 算法应用于输入折线后,我得到了这个结果。现在我想将平行多段线分组在一起。如何找到我想要比较的相应线段? 另外,如图“如何比较线段”所示,折线 1 和 2 只能在区间 [b1,b2] 中分组在一起。我如何找到这个区间? 这实际上意味着我需要找到要比较的部分。如果我比较它们,如果它们不平行,我将其分类为不平行。如果它们平行我还需要找到它们平行的区间,对吧?这是因为一条多段线可以在另一条多段线之前开始和结束。
最佳答案
首先拒绝任何交叉点。
然后对直线进行线性回归。建立“大致平行”的阈值。现在选择一条多段线,并取距最佳拟合线最远的点(如果是端点,则选择下一个点)。现在在“最佳拟合”点处分割另一条折线(基本上是带有一点倾斜的距离,以允许较小的局部偏差,并在可能的情况下在角点上进行切割)。
重复此操作,直到所有线段都不是折线,并应用相当大的距离和方向阈值。
关于math - 将平行(相似)多段线分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40929237/