【问题标题】:How do i know if the interior of a polygon lies to the right or to the left of a vertex?我如何知道多边形的内部是位于顶点的右侧还是左侧?
【发布时间】:2015-11-07 07:39:49
【问题描述】:

我正在尝试制作单调的多边形,以便对其进行三角剖分,但我遇到了常规顶点的问题(一个顶点,其上方有一个邻居,下方有一个邻居:

处理规则顶点的算法让我感到困惑,因为我不知道多边形是在右边还是左边:

算法在《计算几何算法与应用第三版》一书中

【问题讨论】:

  • “正则顶点”是多边形的最左边还是最右边的顶点?
  • 好的,我在你的问题中插入了图片链接。
  • 你解决了吗?我也遇到了同样的问题

标签: algorithm math geometry computational-geometry


【解决方案1】:

首先计算整个多边形的有符号面积。 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

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

我几年前就实现了该算法,它在开始时分析多边形的缠绕顺序非常有帮助 - 如果逆时针 - 在进行任何进一步处理之前反转缠绕顺序。

这消除了很多控制流依赖于缠绕顺序的情况。通过这种方式,您最终会得到更清晰、更易于遵循的代码。

【讨论】:

  • 听起来比多边形中的点容易,但我不明白。升序/降序是什么意思?您是在谈论索引顺序吗?
  • @HansBlanco 是的,确切地说是索引。如果您顺时针绘制一个多边形并观察索引,您会发现找到左侧和右侧是多么容易。请确保您将处理环绕式案例。
  • 对不起,我还是不明白。例如,在图像中,多边形是逆时针的。 v2 是右正则顶点,前一个和下一个顶点的索引是 1 和 3。v10 是一个左正则顶点,前一个和下一个顶点的索引是 9 和 11。这如何帮助了解顶点的类型?
  • @HansBlanco 忘了提及:从上到下计数,相邻顶点的顺序告诉您常规顶点在哪一侧。无论如何,您应该对顶点进行字典排序,因此查找它很便宜。
  • @HansBlanco 很好。请注意,您不对顶点坐标进行任何计算,因此解也是数值稳定的。
【解决方案2】:

从常规点向右射出一条射线。查找它是否与边相交并获取这些相交的数量。如果是奇数,则多边形位于右侧。

这种方法接近于Point in polygon算法{example, discussing non-trivial cases}

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

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2012-02-04
    相关资源
    最近更新 更多