【问题标题】:Algorithm for find polygons on a 2d grid在二维网格上查找多边形的算法
【发布时间】:2014-07-17 10:52:55
【问题描述】:

我的数学不是很好,所以我很难找到一个算法来做到这一点:

  • 我有一个这样的网格:(8x8)GRID 8x8

我正在尝试找到一种算法来帮助我找到红色多边形,之后,该多边形内的所有单元格都将变为红色。

此时我正在使用 C#,并且我有一个带有网格颜色图的多维数组,所以我必须对其进行处理;但我不知道我能做什么。

private Color[,] mapColor;
mapColor= new Color[8, 8];

提前致谢

【问题讨论】:

  • "找到红色多边形,然后这个多边形内的所有单元格都将是红色的。"目前还不清楚你到底在问什么。你说的是什么细胞?什么是“多边形”?你是指正方形多边形还是三角形?
  • 对不起,我需要找一个正方形多边形。正如您从图像中看到的那样,这些单元格是 64 个,并且所有这些单元格都有一种颜色。所以操作有两个:从所有连接的单元格中找到正方形多边形(在本例中为红色)。现在更清楚了吗?对不起我的英语不好
  • 我找到了一个例子! youtube.com/watch?v=O7GM7N0dlGs
  • 不是真的 tbh :) 那么“单元格”是指与“方形多边形”相同的意思吗?您想找到所有具有相同颜色且相互连接的单元格吗?我相信你在使用某种洪水算法en.wikipedia.org/wiki/Flood_fill
  • 是的,我已经知道这个“填充”,但是如果我已经知道所有具有相同颜色的单元格相互连接形成一个正方形多边形,它就可以工作。

标签: c# algorithm grid 2d polygons


【解决方案1】:

问题不太清楚,我看不到图像(被我的防火墙阻止)。我的理解是,您想要遵循从红细胞开始并尝试找到多边形的所有可能路径。

如果是问题,听起来像是图形问题。您可能会使用 BFS(广度优先搜索)算法来解决它,将网格视为图形(如果您想考虑对角线方式,每个单元格可以有 8 条边 - 如果您只想考虑向上,则可以有 4 条边/下和左/右方向)。

BFS 将返回最短路径。如果你想要所有可能的路径,你应该使用 DFS(深度优先搜索)算法。

【讨论】:

    【解决方案2】:

    只需每 64 个像素迭代一次位图,然后调用一个检查附近像素的函数,以确认它找到了一个红色方块。只要像您一样在图像中具有高对比度,就应该不难找到过度偏向红色的地方。

    例如

    List<KeyValuePair<int, int>> PossibleCoords = new List<KeyValuePair<int,int>();
    
    for(int i = 0; i < Bitmap.Width/64; i++)
    {
        for(int j = 0; j < Bitmap.Height/64)
        {
            if(Bitmap.GetPixel(i*64, j*64).R > 200)
            {
                KeyValuePair<int, int> temp = new KeyValuePair<int, int>();
                KeyValuePair.Key = i*64;
                KeyValuePair.Value = j*64;
                PossibleCoords.Add(temp);
            }
        }
    }
    
    for(int i = 0; i < PossibleCoords.Count; i++)
    {
        SampleAdjacentPixelsToConfirm(PossibleCoords[i]);
    }
    

    为了取样,如果我追求高精度,我会检查红色与其他颜色的比例是否很高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多