23

我想计算环面上两个 x/y 坐标之间的距离。所以,这是一个正常的网格,它的角和边是“连接的”。例如,在 500x500 的网格上,(499, 499) 处的点与 (0, 0) 相邻,例如 (0,0) 和 (0,495) 之间的距离应为 5。

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

4

4 回答 4

56

所以你正在寻找圆环的二维表面上的欧几里得距离,我猜。

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

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

于 2010-01-23T17:25:18.620 回答
8
  • 如果/而 x 坐标之间的距离大于网格 X 大小的一半,则将网格 X 大小添加到较小的 x 坐标。
  • 对 Y 做同样的事情。
  • 然后计算距离。
于 2010-01-23T17:22:07.800 回答
4

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

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

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

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

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

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

于 2010-01-23T17:37:09.057 回答
0

对于点 (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)

然后取其中的最小值。

于 2010-01-23T17:25:50.803 回答