计算2D阵列中的距离,非对角线

时间:2014-03-20 20:38:44

标签: java language-agnostic distance

我在Java中实现了以下内容:

  [1,1][1,2][1,3][1,4]
  [2,1][2,2][ B ][2,4]
  [ A ][3,2][3,3][3,4]

我希望能够计算[A]和[B]之间的最小距离,而不是对角移动,我已经在线搜索,但我不确定如何说出我在寻找的东西对于。到目前为止,我已经能够使用以下方法计算对角线距离:

dMin = Math.min(dMin, Math.abs((xDistance - yDistance)));

有人可以给我一个我可以在网上查找的算法吗?任何帮助表示赞赏。谢谢你的时间:))

预期输出为:

Distance = 3 //Not Distance = 2 (as it would be diagonally).

3 个答案:

答案 0 :(得分:10)

它被称为Manhattan Distance,可以通过以下方式轻松计算:

distance = abs(ydistance) + abs(xdistance)

也就是说,您必须垂直行进的单元格数量,以及您必须水平行进的单元格数量,就像乘坐出租车穿过城市街道网格一样。

答案 1 :(得分:5)

你想要点的x值之间的绝对差值,加上点的y值之间的绝对差值。

即:

dMin = Math.abs(A.x - B.x) + Math.abs(A.y - B.y)

这称为曼哈顿距离

答案 2 :(得分:2)

您希望X轴上的差异加上Y轴上的差异。像这样:

int minDistance = Math.abs(A.x - B.x) + Math.abs(A.y - B.y);