2017-04-05 90 views
2

我們有一個多邊形,從最底部開始以逆時針方向從頂點列表給出(points)。給出了相同多邊形的一些對角線(它們中沒有一個相交),作爲一組點(diagonals)。查找所有給定幾條對角線的多邊形

我們必須找到多邊形切入的所有面(作爲每個面的頂點列表)。

實施例: An example polygon and diagonals

輸出將包括以下的面:

face1 = [(-68,-36), (-53,-40), (-39,44)] 
face2 = [(-53,-40), (-21,37), (-12, 6), (-5,49)] 
... 

正如你可能已經注意到,對角線切割多邊形成monotone polygons相對於x軸。如果這可能有幫助。

我已經在這個問題上好幾個小時了。我似乎無法找到與之相關的任何問題。任何幫助將不勝感激,謝謝。

編輯:問題可以簡化爲查找圖中的所有簡單循環(即無弦循環)。我發現這些類似的問題:

Finding polygons within an undirected Graph

Find all chordless cycles in an undirected graph

然而,在第二個接受的解決方案似乎並沒有工作。

+0

這有幫助嗎? http://stackoverflow.com/a/16558622/4014959 –

+0

@ PM2Ring,計算所有周期在這裏沒有幫助,因爲一個面可以是許多週期的一部分。多邊形本身就是一個循環。 – Rahul

+0

公平點。我想你可以找到所有的週期,然後減少到基本週期。然而,你並沒有一個無向圖,你有一個直接的圖,這使得任務變得更容易。 –

回答

2
  1. 從整個多邊形開始。

  2. 取第一個對角線並將多邊形分成兩部分。一個將有點直到對角線的第一個點,然後是包括對角線的第二個點之後的所有點。另一個將具有對角線的第一點,並且所有點都達到(包括)對角線的第二點。

  3. 拍攝下斜,決定哪些多邊形將得到分(它只能是一個,因爲對角線不交叉),並把它在第2步

  4. 重複3等中記載,直到所有的對角線被處理。

+0

謝謝!這很有效,很容易實現。很好地利用對角線將每張臉切成兩塊的事實。 – Rahul

+0

@Rahul這個事實是[「Jordan Curve Theorem」](https://en.wikipedia.org/wiki/Jordan_curve_theorem) – MT0