在2d网格上查找多边形的算法

时间:2014-07-17 10:52:56

标签: c# algorithm grid 2d polygons

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

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

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

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

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

提前致谢

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

e.g。

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]);
}

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