[英]find the outline of adjacent polygons
我正在尋找一種方法來找到兩個相鄰多邊形的輪廓。
多邊形由多邊形中出現的點列表定義。 在我的用例中,沒有重疊的多邊形,多邊形之間沒有間隙,並且沒有帶有“洞”的多邊形。
我想計算兩個多邊形的輪廓,沒有任何“洞”。 這些圖片顯示了預期的結果。
我知道有很多用於剪裁多邊形的庫,但是對於它們中的大多數而言,性能不是很好,因為它們適用於任何類型的多邊形(具有孔,重疊多邊形等)。 在我的用例中,算法必須實時處理許多多邊形(> 20.000)。 我怎樣才能最有效地計算輪廓?
特定
沒有重疊的多邊形,多邊形之間沒有間隙,也沒有帶“洞”的多邊形
以下算法應該可以解決問題。
丟棄重復的線段。
計算剩下的自然組合嵌入作為雙重連接邊列表 。 每個區段產生兩個節點(半邊,彼此反轉,其中一個端點是頭部(分別是尾部),另一個端部是尾部(分別是頭部)),每個半邊連接以逆時針方向使用相同的頭到下一半邊緣。
提取面部。 組合嵌入中的面是最小的非空半邊集,使得對於每個半邊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}
。
通過對有符號的逆時針角度求和並測試符號,僅保留無限面。 像{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.