2017-03-24 39 views
1

我與myGrid[x,y]查找在周長上的點來表示邊界/形狀

我試圖找到一種方法來找到解決選擇網格,所以我再有周邊格式的簡單的2D網格一個選擇的形狀。

這是我的意思的例子:

enter image description here

這裏的想法是要找到所有相關的「角落」又名在周邊圖像中的紅色點到列表,所以我可以然後從中創建一個2D網格。但我不知道最簡單的方法來做到這一點。我想知道是否有一個簡單的邏輯來做到這一點?

+0

所以..你有關於灰色細胞的信息,對吧?我的意思是你知道這些細胞的座標。我對麼? –

+0

是的,我有他們的「位置」和「區域」,它們屬於這些瓷磚的灰色區域,瓷磚可以與其他區域的顏色相鄰。黑色是未定義的數組中基本上爲空的。 – Sir

回答

2

假設你的形狀是完整而堅實的,這裏有一些想法。
首先,你當然可以限制由最小的搜索區域/最大座標: enter image description here

然後,我通過網格單元具有下列規定 - 循環查找所有的外角和內角:

  • 外角有至少兩個零對角線相鄰的單元格。
  • 內角只有一個相鄰單元。

enter image description here

然後,你可以通過發現角落迭代在2水平環發現周圍形狀的邊界路線: enter image description here

這不是最有效的算法,但它是很容易實現。

這裏的一個替代解決方案:

  1. 查找上述條件的第一個角單元。
  2. 沿着形狀邊移動,直到到達下一個角落。使用簡單的單元格有兩個相鄰的空單元格和兩個相鄰的非空單元格的事實。
  3. 重複#2,直到到達#1的角落。
+0

內角的輕微問題,內角點是灰瓦的正確位置。這意味着它有2個空單元,但當然並不總是這樣。圖片示例顯示了我的意思: http://i.imgur.com/3mlxWqB.jpg 左上角表示每個圖塊,因此有些角落實際上是零圖塊的一部分,這不是一部分該區域(或者它可能是另一個區域的一部分)。如果這有道理? – Sir

+0

代碼將找到右側內角的單元格,而不是您標記的單元格。由於內角標準是「它周圍只有一個零(或另一個形狀)單元」。 –

+0

@對不起,無法從手機發布圖片。你明白我的意思嗎? –