我想计算a torus表面上两个x / y坐标之间的距离。因此,这是一个普通网格,其边角和边是“连接”的。例如,在500x500的网格上,(499,499)处的点与(0,0)相邻,并且例如在(0,0)之间的距离。 (0,0)和(0,495)应为5。
有没有什么好的数学计算方法?
答案 0 :(得分:51)
所以你在寻找圆环的二维表面上的欧氏距离,我聚集在一起。
sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)
其中w
和h
分别是网格的宽度(x)和高度(y)。
答案 1 :(得分:6)
答案 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个距离:
然后采取最低限度的那些。