math - 将平行(相似)多段线分组在一起

标签 math polyline

如何检查两条折线是否接近平行?它们不必完全平行,但应该相似,因为它们朝同一方向移动

@编辑

我想我需要更多地解释一下一切背后的想法。作为输入,我得到许多多段线。我想要做的是将非常平行的折线分组在一起(通常方向相似)。结果将是相似的多段线组。

多段线是什么样子的。它们通常直接向上或向左或向右移动。它们不必以相同的 y 值开始。折线的点通常不在同一高度,这意味着具有不同的 y 值。由于多段线通常在某个间隔内平行,然后开始不同,我想找到间隔边界并定义该间隔内平行的多段线的部分。当然间隔不能太小

我现在将说明一个示例以及我想要得到的结果。从 4 条折线开始,P1 到 P4 显示为蓝色。对于人类来说,很明显,线 P1-P3 是相当平行的,直到红线 b1。因此,这应该是第一组平行折线 G1。红线 b1 之后是平行的折线 P1 和 P4。因此他们组建了G2组。折线 P3 不与其他任何物体平行,因此单独存在于组 G3 中。 希望插图有帮助 General Picture

应声明为平行的两条折线示例:

Example of two poly-lines that should be declared as parallel .

应声明为平行的两条折线示例

Example of two poly-lines that should be declared as NOT parallel

@编辑2 将 douglas peuker 算法应用于输入折线后,我得到了这个结果。现在我想将平行多段线分组在一起。如何找到我想要比较的相应线段? 另外,如图“如何比较线段”所示,折线 1 和 2 只能在区间 [b1,b2] 中分组在一起。我如何找到这个区间? 这实际上意味着我需要找到要比较的部分。如果我比较它们,如果它们不平行,我将其分类为不平行。如果它们平行我还需要找到它们平行的区间,对吧?这是因为一条多段线可以在另一条多段线之前开始和结束。 How to compare the segments

最佳答案

首先拒绝任何交叉点。

然后对直线进行线性回归。建立“大致平行”的阈值。现在选择一条多段线,并取距最佳拟合线最远的点(如果是端点,则选择下一个点)。现在在“最佳拟合”点处分割另一条折线(基本上是带有一点倾斜的距离,以允许较小的局部偏差,并在可能的情况下在角点上进行切割)。

重复此操作,直到所有线段都不是折线,并应用相当大的距离和方向阈值。

关于math - 将平行(相似)多段线分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40929237/

相关文章:

python - Python 中的自适应 ODE 算法

ios - 快速计算多段线上的距离

android - Polyline Android 中没有 GeoDesic

google-maps-api-3 - 如何转换为谷歌编码的折线算法格式?

java - 在Java中计算曲线下的精确面积

c++ - 在软件光栅器中实现 z 缓冲区

matlab - 在 matlab 中四舍五入到最接近的 0.5

algorithm - 如何使用埃拉托色尼筛法得到第 n 个素数?

3D 空间中的 JavaFX 2D 形状

html - 我可以通过CSS指定折线的点吗