英文:
Best way to check if two elements of an array of array are in diagonal
问题
我有一个数组的数组的索引(不是基本对象的索引):
第一个元素 = tab[x0][y0]
第二个元素 = tab[x1][y1]
我想要检查这两个元素是否在对角线上,如下所示:
_________________
| | * | | |
-----------------
| | | | |
-----------------
| | | | * |
-----------------
| | | | |
-----------------
在这里,这两个点都在对角线上,所以我们应该返回 true。
但是,最好的检查方法是什么?
英文:
I have indexes of two elements of an array of array (not of primitive objects) :
first element = tab[x0][y0]
second element = tab[x1][y1]
And i want to check if both of these elements are in diagonal like :
_________________
| | * | | |
-----------------
| | | | |
-----------------
| | | | * |
-----------------
| | | | |
-----------------
Here both of these points are in diagonal, so we should return true.
But what is the best way to check it ?
答案1
得分: 5
将数组视为笛卡尔坐标空间,并计算连接两个元素(点)的斜率(上升与水平位移的比值):
int rise = y1 - y0;
int run = x1 - x0;
如果rise
除以run
等于1或-1,则这两个元素形成对角线。1或-1决定了对角线的方向。不必进行实际除法运算,只需检查它们是否具有相同的符号和大小:
if (Math.abs(rise) == Math.abs(run)) {
if (Integer.signum(rise) == Integer.signum(run)) {
// 对角线
} else {
// 另一个方向的对角线
}
} else {
// 非对角线
}
英文:
Treat the array like a Cartesian coordinate space, and calculate the slope (rise over run) of the line joining the two elements (points):
int rise = y1 - y0;
int run = x1 - x0;
If rise
divided by run
is 1 or -1, then the two elements form a diagonal. 1 or -1 determines the direction of the diagonal. Rather than dividing, you can just check if they have the same sign and magnitude:
if (Math.abs(rise) == Math.abs(run)) {
if (Integer.signum(rise) == Integer.signum(run)) {
// diagonal
} else {
// diagonal that is another direction
}
} else {
// not diagonal
}
答案2
得分: 3
两个点在对角线上,如果它们的x坐标和y坐标之间的差相同。
x0 - x1 == y0 - y1
英文:
Two points are diagonal if the difference between the x coordinates and the y coordinates is the same.
x0 - x1 == y0 - y1
答案3
得分: 2
只需看坐标。位于对角线上意味着 x
坐标和 y
坐标上的差值相同。因此:
boolean is_diagonal = (x1 - x0) == (y1 - y0);
英文:
Just look at the coordinates. Being on a diagonal means that the differences in the x
coordinate and in the y
coordinate are the same. Thus:
boolean is_diagonal = (x1 - x0) == (y1 - y0);
答案4
得分: 2
对角线条件如下:
int x = x0 - x1 = 2
int y = y0 - y1 = 2
boolean diagonal = x == y;
任何其他索引组合都会得到一个等式,这意味着它们不是对角线。同时可能需要使用 Math.abs()
。
英文:
diagonal if
int x = x0 - x1 = 2
int y = y0 - y1 = 2
boolean diagonal = x == y;
any other combination of index will to give you an equation which means they are not diagonal. also probably you will have to use Math.abs()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论