在c#中,我想循环遍历矩形中的每个正方形。方形尺寸远小于矩形尺寸。但请注意,我并不是指循环网格图案中的每个正方形,我指的是任何类型位置的每个正方形(不限于网格)。它就像在随机位置随机挑选一个正方形,但它需要遍历所有可能的位置,并且只获得每一个(没有重复)。
有人知道这个算法吗?
由于
答案 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);
}
}
}