2008-12-22 66 views
6

Avast在那裏的程序員!矩形多邊形上的布爾操作

我有以下問題:

我有兩個矩形重疊的像顯示在下面的圖片。

alt text

我想弄清楚由點ABCDEF的多邊形。

備用聖誕節描述:紅色的餅乾切割了一些黑色的餅乾。我想計算黑色的餅乾。

每個矩形是具有4個2d頂點的數據結構。

什麼是實現這一目標的最佳算法?

+0

多邊形是否始終如圖所示軸對齊? – 2008-12-22 15:03:52

回答

5

這是一般的2D多邊形裁剪的一種特殊情況。 Weiler-Atherton算法是一個很好的開始。 Wikipedia has a summarylinks to the original paper。該算法似乎與您描述的數據結構非常吻合。

請注意,很有可能你會得到一個帶有洞的矩形(如果紅色的是完全在黑色的裏面)或者甚至是兩個矩形(例如,如果紅色比黑色更高,更瘦)。如果你確定在黑色矩形內只有一個紅色矩形的一個角落,那麼解決方案應該更簡單。

+0

紅色的矩形可以在黑色的任何地方。但是,如果它重疊,我完全忽略黑色矩形,因爲它具有較低的優先級。 – Nailer 2008-12-22 15:20:31

+0

似乎只是我真正需要的東西。 – Nailer 2008-12-22 15:23:53

+0

http://en.wikipedia.org/wiki/Sutherland-Hodgman_clipping_algorithm似乎更好解釋。使用CGAL的 – Nailer 2008-12-22 15:49:15

2

座標有多精確?如果矩形非常小,最簡單的方法可能是將它們繪製在畫布上,先是黑色矩形,然後是紅色。畫布上剩餘的黑色像素是剩餘的多邊形。

另一種方法是將座標網格劃分爲基於矩形所有邊的一組矩形(不包括無限長矩形,如果有兩個原始矩形,則最多可生成9個矩形)。然後,只需測試這些矩形中每個矩形的代表點,以獲得特定多邊形中的成員資格,以確定哪些矩形位於哪個矩形中,哪些矩形位於外面。