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

Math 计算两个x/y坐标之间的距离?,math,grid,coordinates,distance,Math,Grid,Coordinates,Distance,我想计算曲面上两个x/y坐标之间的距离。所以,这是一个正常的网格,它的角和边是“连接”的。例如,在500x500的网格上,(499499)处的点与(0,0)相邻,例如(0,0)和(0495)之间的距离应为5 有什么好的数学计算方法吗? 如果/当x坐标之间的距离大于栅格x大小的一半时,将栅格x大小添加到较小的x坐标 对Y也一样 然后计算距离 我想你是在寻找圆环体二维表面上的欧几里德距离 sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h

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

有什么好的数学计算方法吗?
  • 如果/当x坐标之间的距离大于栅格x大小的一半时,将栅格x大小添加到较小的x坐标
  • 对Y也一样
  • 然后计算距离

我想你是在寻找圆环体二维表面上的欧几里德距离

sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)
其中
w
h
分别是网格的宽度(x)和高度(y)。

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

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

然后取其中的最小值。

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

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

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

  • 对于每个坐标:
    • 从较大的数字中减去较小的数字
    • 如果结果大于栅格宽度的一半,则此坐标中的最短距离为栅格宽度减去结果
    • 如果结果小于栅格宽度的一半,则此坐标中的最短距离为结果
然后使用毕达哥拉斯定理,两点之间的最短距离是每个方向上最短距离的平方和的平方根。通过使用每个方向上的其他距离组合计算毕达哥拉斯定理,可以计算其他三个距离


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

您总是选择最短距离还是指定方向?换句话说,为什么距离是5而不是495,或者两者都可以,这取决于你想如何画线?是的,这是关于最短的距离……事实的很好解释:)这不起作用:用(0200)和(0300)试试。用第二个公式得出的距离是0!此外,正如其他回答中所述(或至少暗示的),您可以首先计算出最短的x和最短的y距离;那么你只需要应用毕达哥拉斯定理一次。这个计算是否意味着0,0和0,1之间的距离小于0,0和1,1之间的距离?@ropstah:我当然希望如此。)@罗普斯塔:自己测试@Bishiboosh:在开始数字之前,我想先谈谈概念。。。可能还有另一种更适合我的解决方案。无论如何,这个解决方案似乎很合适:)@ropstah:我不知道你的意思。如果你指的是“圆环体”的形状,不要被欧几里得3-空间中的圆环体的形状所困扰;我们只是在讨论一个欧几里德平面,它的边是相连的,吃豆人式的,所有的距离都是你们所期望的。