首页 文章

如何在给定的点和边集中找到多边形?

提问于
浏览
2

请考虑以下问题:

给定平面中的N个点和连接它们的M个线段,找到内部不包含任何其他多边形的所有多边形(凸面或凹面) .

例如:
Example

Build 了5个多边形:

1 - 2 - 5 - 6

2 - 3 - 5

3 - 4 - 5

7 - 8 - 9

10 - 13 - 20 - 12 - 11

如何识别这些多边形以及相应的顶点和边缘?什么是最快的解决方案?

1 回答

  • 1

    构建图表,其中段结束为顶点,段为边,然后使用DFS查找循环 .

    请注意,相同的边可能属于多个周期(多边形),如 2-5 ,并且可能有许多变体来选择周期 . 要排除歧义,您可以构建fundamental set of cycles

    编辑 . 正如韦斯顿在评论中所注意到的,结果多边形可能包含其他多边形 . 所以更多几何方法的草图:

    构建图的邻接列表 .
    按极角对列表中的边缘进行排序 .
    选择最底部的顶点A.
    如果它的度数为0,则删除顶点,如果为1,则删除顶点和边缘 .
    否则从该顶点获得具有最小角度的边E.

    走到顶点对B.
    从B中选择最左边的F.
    沿着F边缘移动到C.
    如果死胡同,删除F和顶点C并返回B.

    使用左手规则重复移动,直到遇到顶点A或死角顶点 .
    在步行过程中,从2度顶点移除边缘或将其标记为已使用 .

相关问题