gpt4 book ai didi

java - 检查给定坐标的水平、垂直和对角线对

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:38 24 4
gpt4 key购买 nike

我正在尝试计算给定一组点(带索引号的 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));
}

最佳答案

问题是您转换为 double 为时已晚。除法使用整数。尝试移除外括号:(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)

关于java - 检查给定坐标的水平、垂直和对角线对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com