给出几个对角线的所有多边形面

时间:2017-04-05 12:43:05

标签: algorithm graph geometry graph-theory polygons

我们有一个多边形,从最底部(points)开始以逆时针方向的顶点列表给出。给出了相同多边形的一些对角线(它们都没有相交),作为一组点(diagonals)。

我们必须找到切割多边形的所有面(作为每个面的顶点列表)。

实施例: An example polygon and 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

然而,第二个解决方案似乎不起作用。

1 个答案:

答案 0 :(得分:2)

  1. 从整个多边形开始。

  2. 取第一个对角线并将多边形分成两部分。一个将具有直到对角线的第一个点的点,然后是包括对角线的第二个点之后的所有点。另一个将有对角线的第一个点,所有点都到达(包括)对角线的第二个点。

  3. 选择下一个对角线,决定哪个多边形将被划分(它只能是一个,因为对角线不会交叉)并按步骤2中的描述进行划分。

  4. 重复3.直到处理完所有对角线。