簡體   English   中英

找到相鄰多邊形的輪廓

[英]find the outline of adjacent polygons

我正在尋找一種方法來找到兩個相鄰多邊形的輪廓。

多邊形由多邊形中出現的點列表定義。 在我的用例中,沒有重疊的多邊形,多邊形之間沒有間隙,並且沒有帶有“洞”的多邊形。

我想計算兩個多邊形的輪廓,沒有任何“洞”。 這些圖片顯示了預期的結果。

在此輸入圖像描述

我知道有很多用於剪裁多邊形的庫,但是對於它們中的大多數而言,性能不是很好,因為它們適用於任何類型的多邊形(具有孔,重疊多邊形等)。 在我的用例中,算法必須實時處理許多多邊形(> 20.000)。 我怎樣才能最有效地計算輪廓?

特定

沒有重疊的多邊形,多邊形之間沒有間隙,也沒有帶“洞”的多邊形

以下算法應該可以解決問題。

  1. 丟棄重復的線段。

  2. 計算剩下的自然組合嵌入作為雙重連接邊列表 每個區段產生兩個節點(半邊,彼此反轉,其中一個端點是頭部(分別是尾部),另一個端部是尾部(分別是頭部)),每個半邊連接以逆時針方向使用相同的頭到下一半邊緣。

  3. 提取面部。 組合嵌入中的是最小的非空半邊集,使得對於每個半邊e,與e的下一半邊的反轉在集合中。 該組面是半邊的分區。 請參閱下面的ASCII藝術圖。

     U----V----W | | | | | | Z----Y----X 

    無限面是{U->Z, Z->Y, Y->X, X->W, W->V, V->U} W->V的下一半邊是U->V W->V的下半邊的反轉是V->U 其他面是{U->V, V->Y, Y->Z, Z->U}{V->W, W->X, X->Y, Y->V}

  4. 通過對有符號的逆時針角度求和並測試符號,僅保留無限面。 {U->V, V->Y, Y->Z, Z->U}這樣的有限面具有負和

     /_UVY - 180 + /_VYZ - 180 + /_YZU - 180 + /_ZUV - 180 = 4 * (90 - 180) = -360. 

    無限的面孔有正面的總和

     /_UZY - 180 + /_ZYX - 180 + /_YXW - 180 + /_XWV - 180 + /_WVU - 180 + /_VUZ - 180 = 4 * (270 - 180) + 2 * (180 - 180) = 360. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM