如何遍历矩形中的每个方块?

时间:2015-08-05 18:37:13

标签: c# loops for-loop

在c#中,我想循环遍历矩形中的每个正方形。方形尺寸远小于矩形尺寸。但请注意,我并不是指循环网格图案中的每个正方形,我指的是任何类型位置的每个正方形(不限于网格)。它就像在随机位置随机挑选一个正方形,但它需要遍历所有可能的位置,并且只获得每一个(没有重复)。

有人知道这个算法吗?

由于

1 个答案:

答案 0 :(得分:2)

您需要做的是设置原点(比如左上角),找出该位置的最大边长,并为图像中的每个像素从1迭代到该值。

班级名称是虚构的,适应您自己的需要。

IEnumerable<Rectangle> AllSquaresIn(Rectangle rect)
{
    for (int x = 0; i x < rect.Width; x++)
    {
        for (int y = 0; y < rect.Height; y++)
        {
            int maxLength = Math.Min(rect.Width - x, rect.Height - y);
            for (int i = 1; i <= maxLength; i++)
            {
                yield return new Rectangle(x, y, x + i, y + i);
            }
        }
    }
}

由于i总是正数,因此不可能有重复的矩形。

由于评论中显示您只需要给定大小的矩形:

IEnumerable<Rectangle> AllSquaresIn(Rectangle rect, int length)
{
    for (int x = 0; i x < rect.Width - length; x++)
    {
        for (int y = 0; y < rect.Height - length; y++)
        {
            yield return new Rectangle(x, y, x + length, y + length);
        }
    }
}