计算两个x / y坐标之间的距离?

时间:2010-01-23 17:15:41

标签: math grid coordinates distance

我想计算a torus表面上两个x / y坐标之间的距离。因此,这是一个普通网格,其边角和边是“连接”的。例如,在500x500的网格上,(499,499)处的点与(0,0)相邻,并且例如在(0,0)之间的距离。 (0,0)和(0,495)应为5。

有没有什么好的数学计算方法?

4 个答案:

答案 0 :(得分:51)

所以你在寻找圆环的二维表面上的欧氏距离,我聚集在一起。

sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)

其中wh分别是网格的宽度(x)和高度(y)。

答案 1 :(得分:6)

  • 如果/当x坐标之间的距离大于网格X大小的一半时,请将网格X大小添加到较小的x坐标。
  • 为Y做同样的事。
  • 然后计算距离。

答案 2 :(得分:3)

如果网格在边缘处缠绕,则每个坐标之间将有四个距离(对于2个维度)。我假设你想知道最短的距离。

让我们使用更小的网格,数字更易于管理。假设网格是10x10。为简单起见,我们也只使用一个维度(在这种情况下,只有两个距离),就像在您的示例中一样。假设我们有点0,2和0,6。点之间的两个距离为d_1 =(6-2)= 4且d_2 =(10-6)+ 2 = 6,因此在这种情况下,最短距离为d_1。

通常,您可以执行以下操作:

  • 对于每个坐标:
    • 从较大的数字
    • 中减去较小的数字
    • 如果结果大于网格宽度的一半,则此坐标中的最短距离是网格宽度减去结果
    • 如果结果小于网格宽度的一半,则此坐标中的最短距离为结果

然后使用毕达哥拉斯定理,两点之间的最短距离是每个方向上最短距离的平方和的平方根。您可以通过使用每个方向上的其他距离组合计算毕达哥拉斯定理来计算其他三个距离。

正如另一张海报所说,当你在边缘缠绕时形成的形状(对于二维网格)是一个圆环,我认为我上面使用的方法与给出的方程相同但具有优势如果需要,它可以扩展到n维。不幸的是,在2维度上并没有真正简单的可视化。

答案 3 :(得分:1)

对于点(x1,y1)和(x2,y2),你需要计算4个距离:

  • 从(x1,y1)到(x2,y2)
  • 从(x1,y1)到(x2,500-y2)
  • 从(x1,y1)到(500-x2,y2)
  • 从(x1,y1)到(500-x2,500-y2)

然后采取最低限度的那些。