单循环获取两点之间的坐标

时间:2016-01-24 16:23:26

标签: c# algorithm

输入包含两个坐标(x|y),它们具有相同的x或相同的y(意味着它们始终位于同一列或行上)。

我希望得到所有坐标。

示例输入:

  

(2 | 2),(2 | 5)

示例输出:

  

(2 | 2),(2 | 3),(2 | 4),(2 | 5)

另一个例子:

  

(2 | 2),(5 | 2)

示例输出:

  

(2 | 2),(3 | 2),(4 | 2),(5 | 2)

我的方法是检查四个条件(y1 > y2x1 > x2y1 < y2x1 < x2),然后使用四个单独的循环

这是我的伪代码:

if (x1 > x2)
    decrement x1 until x1 = x2, list all coordinates
else if (x1 < x2)
    increment x1 until x1 = x2, list all coordinates
else if (y1 > y2)
    decrement y1 until y1 = y2, list all coordinates
else if (y1 < y2)
    increment y1 until y1 = y2, list all coordinates

我正在寻找一种方法在一个循环中完成。

1 个答案:

答案 0 :(得分:2)

您可以通过找出哪些变量需要增加并在循环中使用maxmin函数来实现:

int x1 = 1;
int x2 = 6;
int y1 = 3;
int y2 = 5;

int min, max;

if (x1 == x2) {
    min = Math.Min(y1,y2);
    max = Math.Max(y1,y2);
} else {
    min = Math.Min(x1,x2);
    max = Math.Max(x1,x2);
}

for (int i = min; i < max; ++i) {
    if (x1 == x2) {
        Console.WriteLine(x1 + "/" + i);
    else {
        Console.WriteLine(i + "/" + y1);
    }
}

请注意:我没有在很长时间内完成C#并且没有编译器在这里进行测试,所以请根据C#编辑代码。另请注意:如果坐标相同,则程序不会执行任何操作,上面的代码中没有错误检查!这只是示例代码!