C# 在周长上查找点以表示边界/形状

C# 在周长上查找点以表示边界/形状,c#,unity3d,C#,Unity3d,我有一个简单的二维网格,格式为myGrid[x,y] 我试图找到一种方法来找到一个网格选择周围的周长,这样我就有了一个选择的形状 这是我的意思的一个例子: 这里的想法是在一个列表中找到所有相关的“角”,也就是周界图像中的红色点,这样我就可以从中创建一个2D网格。但我不知道最简单的方法。我想知道是否有一个简单的逻辑来做到这一点?假设你的形状是完整和坚实的,这里有一些想法。 首先,您当然可以通过最小/最大坐标限制搜索区域: 然后,我将通过以下标准在网格单元中循环找到所有的外角和内角: 外角至少

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

我试图找到一种方法来找到一个网格选择周围的周长,这样我就有了一个选择的形状

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


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

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

然后,我将通过以下标准在网格单元中循环找到所有的外角和内角:

  • 外角至少有两个空对角相邻单元
  • 内角只有一个相邻单元

然后,您可以在两层循环中迭代找到的角点,以找到形状周围的边界管线:

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

这里有一个替代解决方案:

  • 根据上述条件查找第一个角单元格
  • 沿着形状一侧移动,直到到达下一个拐角。使用简单侧单元格有两个相邻的空单元格和两个相邻的非空单元格这一事实
  • 重复#2,直到到达#1处的拐角处

  • 所以你有关于灰色细胞的信息,对吗?我是说你知道这些细胞的坐标。我说得对吗?是的,我有它们的
    位置
    区域
    它们属于这些瓷砖的灰色区域,瓷砖可以与其他区域颜色相邻。黑色是数组中未定义的平铺,基本为空。内角有轻微问题,内角点是其右侧灰色平铺的平铺位置。这意味着它有2个空单元格,但情况并非总是如此。图像示例显示了我的意思:左角表示每个磁贴,因此有些角实际上是空磁贴的一部分,而空磁贴不是分区的一部分(或者可能是另一个分区的一部分),这让人感到困惑。如果这有意义的话,代码将找到与内角成直角的单元格,而不是您标记的单元格。因为内角的标准是“周围只有一个空(或另一个形状)手机”。@Sir抱歉,无法从手机上传图像。你明白我的意思吗?我想你混淆了视角旋转45度的问题。我可能应该把相机旋转到更正面的位置。假设一个角点有两条对角线,它们不是区域的一部分:实际的角点位置有点令人困惑,代码在所有涉及的逻辑方面都变得超长。