Math 如何在给定的点和边集合中查找多边形?

Math 如何在给定的点和边集合中查找多边形?,math,geometry,computer-science,computational-geometry,Math,Geometry,Computer Science,Computational Geometry,考虑以下问题: 给定平面中的N个点和连接它们的M条线段,查找所有内部不包含任何其他多边形的多边形(凸面或凹面) 例如: 共有5个多边形: 1-2-5-6 2-3-5 3-4-5 7-8-9 10-13-20-12-11 如何识别这些多边形以及相应的顶点和边?最快的解决方案是什么?使用线段端点作为顶点,线段作为边构建图形,然后使用查找循环 请注意,相同的边可能属于多个循环(多边形),就像您的2-5一样,并且可能有许多变体可用于选择循环。要排除歧义,可以构建 编辑。正如韦斯顿在评论中所注意到的,生

考虑以下问题:

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

例如:

共有5个多边形:

1-2-5-6

2-3-5

3-4-5

7-8-9

10-13-20-12-11


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

使用线段端点作为顶点,线段作为边构建图形,然后使用查找循环

请注意,相同的边可能属于多个循环(多边形),就像您的
2-5
一样,并且可能有许多变体可用于选择循环。要排除歧义,可以构建

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

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

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

使用左手尺重复移动,直到遇到顶点A或死端顶点。

在漫游过程中,删除从2度顶点引出的边或将它们标记为已使用。

我知道它已被接受,所以OP对此很满意。但我还是有点不清楚,你能解释一下它是如何排除包含其他多边形的吗?@weston Graph方法无法帮助从几何角度选择最佳多边形集,而无需额外(可能是复杂的)努力。对于我的任务来说,利用类似的方法(用任何多边形覆盖点)并不重要。你能不能进一步澄清一下算法,或者甚至帮我们编写一个伪代码?因为我在互联网上似乎也找不到其他类似的算法。例如,最底部的顶点,是指角度最小的顶点,还是指y坐标最低的顶点?最左边的顶点也是x坐标最低的顶点?另一件我遗漏的事情是,“度”实际上是指顶点的度(即边的数量),而不是以度为单位的极角。删除边意味着将其从两个相邻柱状图中删除?那么顶点B由A+E或左手法则(即增加的极角)结束?那么最左边的边F是什么意思?最左边的那个?然后算法总是选择下一个左顶点,然后总是应用这个“度移除规则”?或者只删除2度或更大的边?谢谢你Advance@MeFisto94最底部顶点为12(最小Y)。20-13之后最左边的边缘是13-10(CCW订单上的最后一条)。是,从调整列表中删除边。算法遍历“最内部”多边形