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

问题描述:

我想计算a torus表面上两个x/y坐标之间的距离。所以,这是一个正常的网格,它的角落和两侧都是“连接”的。例如,在500×500的网格上,(499,499)处的点与(0,0)相邻,并且例如(0,0)和(0,495)应该是5.计算两个x/y坐标之间的距离?

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

+5

是的,有。 :-) – 2010-01-23 17:19:15

+1

你总是选择最短距离还是你指定方向?换句话说,为什么距离是5而不是495,或者它可能是两个,这取决于你如何画线? – 2010-01-23 17:21:48

+0

是的,它是关于最短的距离... – Ropstah 2010-01-23 18:12:42

所以,你正在寻找环面二维表面上的欧几里德距离,我收集。

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

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

+1

+1,我认为你的答案比我的数学更为数学:) – Yoni 2010-01-23 17:27:52

+0

优雅!数学! Upvoted! – 2010-01-23 17:29:12

+0

非常好的解决方案。 – 2010-01-23 17:35:15

  • 如果/当X坐标之间的距离比所述网格X大小的一半大时,坐标添加网格X尺寸到较小的X。
  • 对Y做同样的处理。
  • 然后计算距离。
+0

对事实的很好解释:) – Ropstah 2010-01-23 17:48:17

的点(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)

然后取最小值。

+0

这不起作用:用(0,200)和(0,300)来尝试。这与第二个公式的距离为0!另外,正如其他答案中所述(或至少暗示),您可以先计算出最短的x和最短的y距离;那么你只需要应用毕达哥拉斯定理一次。 – BobS 2010-01-23 17:57:23

+0

谢谢,我站在更正 – Yoni 2010-01-23 18:22:51

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

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

一般而言,可以执行以下操作:

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

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

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

+0

Upvoted为详细的解释。 – 2010-01-23 17:40:04