想象一下,我有兩個點陣列。其中之一是一個開放的多邊形,看起來像這樣。我可以使用什麼算法來區分封閉和開放的柵格多邊形?
X
ES是黑點和點( '') - 白色的。
第二點陣列包含一個封閉的多邊形:
我需要一種算法,它允許我來確定給定點陣列是封閉的多邊形或開放一個的名稱。我需要這些信息來確定我是否可以填充填充它(我不能填充第一個例子,但是我可以填充第二個填充)。
調用的算法是什麼,它允許我區分兩種類型的多邊形?
更新1(10.10.2015 10:05 MSK):我需要區分封閉多邊形和開放多邊形,以防止洪水填充錯誤。
洪水填寫錯誤,是我申請當洪水填充到一個開放的多邊形像
.....
..XXX
.X..X
X...X
,並用完全充滿電網結束了:
XXXXX
XXXXX
XXXXX
XXXXX
我最初的想法是
- 取多邊形,
- 檢查,如果它是開放的或c如果關閉,則應用填充。現在
,我能做到這一點是不同的:
- 洪水填滿多邊形。
- 如果整個網格都被填充,那麼它是一個開放的網格,否則(洪水填充之後網格中至少有一個點是白色的),它是一個封閉的網格。
如果有辦法避免做洪水填充來決定,不管多邊形是打開還是關閉,請告訴我。
我稱之爲「洪水填充算法」。也就是說,如果你從一個隨機角落開始填充填充並檢查每個像素,那麼如果你找到一個未填充的像素,它就處於封閉形狀的內部,否則它是一個開放的形狀。 – usr2564301
有幾種方法可以做到這一點,但我不記得任何名稱,我沒有我的副本「岡薩雷斯和伍茲數字圖像處理」方便。一個簡單的方法是應用填充,然後檢查角落:如果有任何不是邊框或未填充的,那麼多邊形是開放的,您需要恢復填充。另一種方法是挑選周邊的任何相交點,然後通過檢查相鄰的NSEW像素來尋找更多線(您似乎不需要高於1的城市街區距離,或者換句話說,沒有NE/SW邊界)。繼續跟蹤,直到你到達先前的座標或不符合要求。賓果 – dandavis
@Jongware看我的更新1.如果有辦法做到這一點沒有洪水灌裝,請告訴我。 –