algorithm - 如何用数学方法表述这样的问题? (续行搜索)

标签 algorithm math geometry formula

我有一个“线”数组,每条线由 2 个点定义。我只处理这些点之间的线段。我需要搜索可以彼此延续(相对于某个角度)并位于同一条线上(有一定偏移)的线

我的意思是我有大约 3 行内容

alt text

我解决了一些数学问题(我的问题是公式化),并了解到有些线可以称为相对一条线(具有一定的角度 K 和偏移量 J)

alt text

当然,我所说的数学公式是指某种数学公式,例如

alt text

最佳答案

  1. 根据角度(范围为 0 到 Pi)对所有线段进行排序,并构建角度到线段的排序图。
  2. 确定某个角度差阈值,低于该阈值的两个线段可被视为平行。迭代您的 map ,对于每个映射,考虑角度两侧的相邻映射(需要环绕),这些映射被视为平行。
  3. 在每组几乎平行的线段中,查看它们是否是彼此的“延续”。

如果 4 个点的所有可能配对大致平行,则两条线段 (A,B) 和 (C,D) 大致共线。您可以使用与上面相同的测试。

伪代码:

Angle(A,B)
    return Atan((B.y-A.y) / (B.x-A.x)) // use atan2 if possible, but needs wrapping

NearlyParallel(angle1, angle2)
    delta = Abs(angle1-angle2)
    return (delta < threshold) or (delta > Pi-threshold)

Collinear(A,B, C,D)
    // Assume NearlyParallel(Angle(A,B), Angle(C,D)) == true
    return NearlyParallel(Angle(A,C), Angle(B,D)) and NearlyParallel(Angle(A,D), Angle(B,C))

关于algorithm - 如何用数学方法表述这样的问题? (续行搜索),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3769885/

相关文章:

objective-c - 画一个圆代表剩余时间

algorithm - 划分自相交多边形(C代码)

c# - 判断三角形是否正对

python - 找出数字组合中的最高总和

c++ - TSP 的动态方法

c++ - 有 C++ MinMax Heap 实现吗?

c++ - xcode 上的 atan2f 精度

c - C中最多3个硬币的快速硬币找零算法

javascript - 使用 atan2() 返回的 Angular 围绕另一个点旋转一个点

math - 实现光线拾取