我正在尝试在坐标(x,y)中进行像素搜索
我需要一个函数( int width,int height),它返回一个从中心开始的点数组。
如果镜像有1000x1000,我需要获取{500,500},{501,500},{501,501},{500,501},{499,501},{499,500} ...
示例:

发布于 2021-05-06 05:07:15
嗯,这比我想象的要容易。
static IEnumerable<Point> GetPixels(int size)
{
Point point = new Point(size/2, size/2);
yield return point;
int sign = 1;
for (int row = 1; row < size; row++)
{
// move right/left by row, and then up/down by row
for (int k = 0; k < row; k++)
{
point.Offset(sign*1, 0);
yield return point;
}
for (int k = 0; k < row; k++)
{
point.Offset(0, -sign*1);
yield return point;
}
sign *= -1;
}
// last leg to finish filling the area
for (int k = 0; k < size-1; k++)
{
point.Offset(sign*1, 0);
yield return point;
}
}结果(size=5)
{X=2,Y=2}
{X=3,Y=2}
{X=3,Y=1}
{X=2,Y=1}
{X=1,Y=1}
{X=1,Y=2}
{X=1,Y=3}
{X=2,Y=3}
{X=3,Y=3}
{X=4,Y=3}
{X=4,Y=2}
{X=4,Y=1}
{X=4,Y=0}
{X=3,Y=0}
{X=2,Y=0}
{X=1,Y=0}
{X=0,Y=0}
{X=0,Y=1}
{X=0,Y=2}
{X=0,Y=3}
{X=0,Y=4}
{X=1,Y=4}
{X=2,Y=4}
{X=3,Y=4}
{X=4,Y=4}或图形化的size=50

测试代码非常简单
static void Main(string[] args)
{
foreach (var point in GetPixels(5))
{
Console.WriteLine($"{point}");
}
Console.WriteLine();
}https://stackoverflow.com/questions/67404737
复制相似问题