找到离开顶点的最左边的线

时间:2013-05-14 10:37:45

标签: algorithm geometry computational-geometry

作为更大算法的一部分,我正在遍历一组互连的线段。在通过线段到达任何顶点时,我需要找到从该点离开的最左边的线段。

作为一个例子,假设我从顶点A开始并沿着线段AB到达顶点B,我现在需要选择最左边的线段BC,BD,BE ...来到达下一个顶点。 / p>

我可以通过获取每对退出段的签名区域来实现此目的。如果三角形BDC的有符号区域为正,则BDC是逆时针方向的,因此BC落在BD的左侧。然后,我可以将BC与BE进行比较,并与其他段一起进行,以找到最左边的出口。但这仅适用于角度CBD急剧的情况。我将不得不添加一个特殊情况来处理钝的CBD。

enter image description here

必须有一种更简单的方法来做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

将线段视为矢量。你想选择最左边的BC,BD,BE,......为此,计算BA(反方向为AB)与其他有向段BC,BD,BE,...之间的逆时针角度。

您想要的片段是CCW角度最大的片段。

要计算矢量BX的CCW角度,请使用atan2()计算BA和BX的方向角ax。然后你的CCW角是(2π+ x-a)mod2π。 (即归一化为区间[0,2π])。