2017-03-24 35 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

@对不起,无法从手机发布图片。你明白我的意思吗? –