检查给定坐标的水平,垂直和对角线对

时间:2017-01-02 20:31:19

标签: java algorithm

我试图计算给定一组点(带有索引号的queenx,queeny)的斜率,以找出两个点是水平,垂直还是对角线。以下是代码:

请注意,方法checkSlope只是计算斜率。鉴于以下几点,我不明白这种方法有什么问题: [0,0] [6,1] [4,2] [7,3] [1,4] [3,5] [5,6] [2,7],它仍然显示有匹配,当确实没有。

   for(int i = 0; i < 8; i++) {
        int x1 = queenx.get(i);
        int y1 = queeny.get(i);

        for(int j = 0; j < 8; j++) {
            int x2 = queenx.get(j);
            int y2 = queeny.get(j);

            if(i != j) {
                double slope = Math.abs(checkSlope(x1, y1, x2, y2));
                try {
                    if ((slope == 1) || (slope == 0)) {
                        correct = false;
                        System.out.println("x1 = " + x1 + " y1 = " + y1 + " x2 = " + x2 + " y2 = " + y2);
                        break;
                    }
                } catch(Exception e) {
                    correct = false;
                    break;
                }
            }
        }
    }

   public static double checkSlope(int x1, int y1, int x2, int y2) {
       return (double)((y2 - y1) / (x2 - x1));
   }

2 个答案:

答案 0 :(得分:1)

问题是你转得太晚了。该部门使用整数。尝试删除外部的parens:(double)(y2 - y1) / (x2 - x1);

但这是一个很难的方法。而且,正如您所了解的那样,浮点计算很棘手。例如。如果分母为零,则斜率计算将失败。

更简单的方法:有4种情况:

  • 在同一水平线上:y1 == y2
  • 在同一垂直线上:x1 == x2
  • 在相同的正斜率对角线上:y2 - y1 == x2 - x1
  • 在相同的负斜率对角线上:y2 - y1 == x1 - x2

您只需要测试这四种情况。你可以通过分解差异来使事情变得整洁:

int dy = y2 = y1;
int dx = x2 - x1;
if (dx == 0 || dy == 0 || dx == dy || dx == -dy) {
  // match!
}

如果您愿意,可以将最后两个“或”案例替换为:abs(dx) == abs(dy)

答案 1 :(得分:0)

点 1 = (x,y) 点 2 = (a,b) 检查对角线:

  1. x+y == a+b
  2. a-b == x-y(取绝对值)

沿着同一条水平线:y ==b 沿着同一条垂直线:x==a

相关问题