我面臨的問題是通過在初始多邊形中添加對角線(它們本身並不相交),將簡單多邊形(即沒有孔的多邊形)有效地分解爲較小的簡單多邊形。 在其它方面,這裏是函數的Java的簽名,我想有效地實現(線性時間或的n * log(n))的:通過添加對角線來分解簡單多邊形
public static List<SimplePolygon> addDiagonals(SimplePolygon polygon, List<Edge> diagonals);
其中多邊形是由表示初期多邊形雙連接邊列表和對角線是邊的列表,其中邊只由開始和結束節點組成。該函數必須返回多邊形中添加對角線所產生的子多邊形列表。這裏是一個圖像顯示我想要的東西:
起始多邊形是在左上角,和另外5人是通過添加對角線產生的子多邊形。 我很難找到如何有效地實現這種分解,因爲它很容易重複節點事件對角線,但如果大量的對角線是從同一個節點出去,我總是要檢查與節點相鄰的頂點是否重複如果是這種情況,那麼我將對角線添加到副本(假設原始屬於另一個子多邊形),那麼我必須再次檢查這個重複節點是否也沒有重複(如果已經有一個對角線與此節點相鄰)等。 您有關於如何有效地進行這種分解的想法嗎?對不起,如果解釋不夠清楚。 謝謝!
你顯示的細分看起來是任意的。你能否澄清爲什麼你選擇的對角線特別好?通常人們想分解成凸多邊形,你會認爲這是一個好的解決方案嗎?另外,您能否爲我們提供您的示例的初始數據? – 2015-04-03 13:01:55
@CodieCodeMonkey它是分解成y單調片:)初始數據只是以CCW順序給出的多邊形點的(x,y)座標,從隨機節點開始。 – Jo8192 2015-04-05 10:27:26
@ Jo8192這似乎問:給定對角線,分割多邊形。找到/計算對角線的算法是否也能夠分割多邊形?我猜測它會在遍歷多邊形時計算對角線... – 2017-05-10 01:06:35