首页 > 解决方案 > 检查数组的两个元素是否在对角线上的最佳方法

问题描述

我有数组数组(不是原始对象)的两个元素的索引:
第一个元素 = tab[x0][y0]
第二个元素 = tab[x1][y1]

我想检查这两个元素是否都在对角线上,例如:

_________________
|   | * |   |   |
-----------------
|   |   |   |   |
-----------------
|   |   |   | * |
-----------------
|   |   |   |   |
-----------------

这里这两个点都在对角线上,所以我们应该返回 true。但是检查它的最佳方法是什么?

标签: java

解决方案


将数组视为笛卡尔坐标空间,并计算连接两个元素(点)的直线的斜率(上升沿):

int rise = y1 - y0;
int run = x1 - x0;

如果rise除以run1 或 -1,则这两个元素形成对角线。1 或 -1 确定对角线的方向。您可以检查它们是否具有相同的符号和大小,而不是除法:

if (Math.abs(rise) == Math.abs(run)) {
    if (Integer.signum(rise) == Integer.signum(run)) {
        // diagonal
    } else {
        // diagonal that is another direction
    }
} else {
    // not diagonal
}

推荐阅读