找到周长上的点以表示边界/形状

时间:2017-03-24 05:27:28

标签: c# unity3d

我有一个简单的2D网格,格式为myGrid[x,y]

我正试图找到一种方法来找到一系列网格周围的边界,这样我就有了一个选择的形状。

这是我的意思的一个例子:

enter image description here

这里的想法是找到所有相关的角落"也就是将周边图像中的红点分成一个列表,这样我就可以从中创建一个2D网格。但我不知道最简单的方法。我想知道是否有一个简单的逻辑来做到这一点?

1 个答案:

答案 0 :(得分:2)

假设你的形状是完整而坚实的,这里有一些想法 首先,您当然可以通过最小/最大坐标限制搜索区域: enter image description here

然后我会通过以下标准循环遍历网格单元来找到所有外角和内角:

  • 外角至少有两个零对角相邻单元格。
  • 内角只有一个相邻的单元格。

enter image description here

然后你可以在2级循环中迭代找到的角,找到围绕形状的边界路线: enter image description here

这不是最有效的算法,但实现起来非常简单。

以下是另一种解决方案:

  1. 按上述标准查找第一个角落单元格。
  2. 沿着形状一侧移动,直到到达下一个角落。使用简单侧单元具有两个相邻的空单元和两个相邻的非空单元的事实。
  3. 重复#2,直至到达#1处的角落。