从x1,y1循环到x2,y2,不管顺序如何
本文关键字:不管 顺序 y2 x1 y1 循环 x2 | 更新日期: 2023-09-27 18:11:11
我希望能够通过两个点(p1,p2)选择图像的一部分。我的问题是,我想使用相同的循环,而不管它们的顺序如何。
现在我有这个:
for (int x = p1.X; x != p2.X; x += Math.Sign(p2.X - p1.X))
{
for (int y = p1.Y; y != p2.Y; y += Math.Sign(p2.Y - p1.Y))
{
MessageBox.Show(String.Format("{0} {1}", x, y));
}
}
在这个循环中,我没有得到所有的数字:例如,从1/1到3/3只到2/2。
我需要在两个循环中再循环一次,但是因为我不知道我实际上是在循环哪个方向(减少还是增加),所以我不能只从循环中添加/减去一个。
任何帮助将不胜感激!
你可以从最低的X循环到最高的X,然后对y做同样的操作。
for (int x = Math.Min(p1.X, p2.X); x <= Math.Max(p1.X, p2.X); x++){
for (int y = Math.Min(p1.Y, p2.Y); y <= Math.Max(p1.Y, p2.Y); y++){
MessageBox.Show(String.Format("{0} {1}", x, y));
}
}
这不会从[3,3]走到[1,1]。如果你真的关心方向,这种方法将不起作用。
Point p1 = new Point(1, 1);
Point p2 = new Point(3, 3);
int dx = Math.Sign(p2.X - p1.X);
int dy = Math.Sign(p2.Y - p1.Y);
for (int x = p1.X; x != p2.X + dx; x += dx)
{
for (int y = p1.Y; y != p2.Y + dy; y += dy)
{
Console.WriteLine("{0} {1}", x, y);
}
}