我有一个“线”数组,每条线由 2 个点定义。我只处理这些点之间的线段。我需要搜索可以彼此延续(相对于某个角度)并位于同一条线上(有一定偏移)的线
我的意思是我有大约 3 行内容
我解决了一些数学问题(我的问题是公式化),并了解到有些线可以称为相对一条线(具有一定的角度 K 和偏移量 J)
当然,我所说的数学公式是指某种数学公式,例如
最佳答案
- 根据角度(范围为 0 到 Pi)对所有线段进行排序,并构建角度到线段的排序图。
- 确定某个角度差阈值,低于该阈值的两个线段可被视为平行。迭代您的 map ,对于每个映射,考虑角度两侧的相邻映射(需要环绕),这些映射被视为平行。
- 在每组几乎平行的线段中,查看它们是否是彼此的“延续”。
如果 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/