【发布时间】:2017-04-05 12:43:04
【问题描述】:
我们有一个多边形,以从最底部开始的逆时针方向的顶点列表形式给出 (points)。给出了同一多边形的一些对角线(它们都不相交),作为一组点(diagonals)。
我们必须找到多边形被切割成的所有面(作为每个面的顶点列表)。
输出将包括以下面孔:
face1 = [(-68,-36), (-53,-40), (-39,44)]
face2 = [(-53,-40), (-21,37), (-12, 6), (-5,49)]
...
您可能已经注意到,对角线将多边形相对于 x 轴切割成monotone polygons。如果无论如何这可能会有所帮助。
我已经解决这个问题几个小时了。我似乎找不到任何与它相关的问题。任何帮助将不胜感激,谢谢。
编辑:问题可以简化为在图中找到所有简单的循环(即无弦循环)。我发现了这些类似的问题:
Finding polygons within an undirected Graph
Find all chordless cycles in an undirected graph
但是,第二个中公认的解决方案似乎不起作用。
【问题讨论】:
-
@PM2Ring ,在这里计算所有周期无济于事,因为一张脸可能是许多周期的一部分。多边形本身就是一个循环。
-
公平点。我想你可以找到所有周期,然后将它们减少到基本周期。但是,您没有有一个无向图,您有一个有向图,这使任务变得容易得多。
-
将其作为有向图仍然存在问题。取最左边的对角线
(-53,-40) -> (-68,-36)。我的方向是从右到左。现在,这条对角线将成为最下面的面的一部分,但face1将不再是一个循环(多边形是逆时针的)
标签: algorithm graph geometry graph-theory polygons