我试图使单调成为多边形,这样我就可以对它进行三角测量,但是我对常规顶点有一个问题(一个顶点上面有一个邻居,下面有一个邻居:
处理规则顶点的算法令我感到困惑,因为我不知道多边形是否位于右侧或左侧:
该算法在“计算几何算法和应用程序第三版”一书中
答案 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}
或许,在书籍算法中,您可以通过其他方式获得此信息。例如,您可能知道步行顺序是顺时针或逆时针。