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

时间:2016-12-20 15:07:00

标签: math geometry computer-science computational-geometry

考虑以下问题:

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

例如: Example

成立了5个多边形:

1 - 2 - 5 - 6

2 - 3 - 5

3 - 4 - 5

7 - 8 - 9

10 - 13 - 20 - 12 - 11

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

1 个答案:

答案 0 :(得分:1)

构建图表,其中段结尾为顶点,段为边,然后使用DFS查找周期。

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

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

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

步行以配对顶点B.
从B中选择最左边的边缘。
沿F边移动到C.
如果是死胡同,则删除F和顶点C并返回B.

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