我如何知道多边形的内部是否位于顶点的右侧或左侧?

时间:2015-11-07 07:39:49

标签: algorithm math geometry computational-geometry

我试图使单调成为多边形,这样我就可以对它进行三角测量,但是我对常规顶点有一个问题(一个顶点上面有一个邻居,下面有一个邻居: enter image description here

处理规则顶点的算法令我感到困惑,因为我不知道多边形是否位于右侧或左侧: enter image description here

该算法在“计算几何算法和应用程序第三版”一书中

2 个答案:

答案 0 :(得分:1)

首先计算整个多边形的有符号aera。 aera的符号将告诉您多边形顶点的缠绕顺序是顺时针还是逆时针。

你只需要这样做一次,这是一个便宜的操作。

然后,要确定您是否有左或右规则顶点,您只需要查看上一个和下一个顶点的索引。有升序或降序。

现在,一张小桌子会告诉你左边还是右边:

Counter-Clockwise Polygon:
--------------------------
Ascending order: Regular vertex is on the left of the polygon
Descending order: Regular vertex is on the right of the polygon


Clockwise Polygon:
--------------------------
Ascending order: Regular vertex is on the right of the polygon
Descending order: Regular vertex is on the left of the polygon

因此无需进行任何昂贵的光线交叉点或多边形点测试。

几年前我已经实现了这个算法,并且在开始时分析多边形的缠绕顺序是非常有帮助的 - 如果是逆时针的话 - 在进行任何进一步处理之前反转缠绕顺序。 / p>

这消除了很多控制流取决于缠绕顺序的情况。您最终会以更清晰,更容易的方式遵循代码。

答案 1 :(得分:0)

从常规点到右边制作光线。找出它是否与边相交并获得这些交叉点的​​数量。如果是奇数,则多边形位于右侧。

此方法接近多边形点算法{example, discussing non-trivial cases}

或许,在书籍算法中,您可以通过其他方式获得此信息。例如,您可能知道步行顺序是顺时针或逆时针。