2010-01-23 250 views
19

我想計算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

回答

48

所以,你正在尋找環面二維表面上的歐幾里德距離,我收集。

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

6
  • 如果/當X座標之間的距離比所述網格X大小的一半大時,座標添加網格X尺寸到較小的X。
  • 對Y做同樣的處理。
  • 然後計算距離。
+0

對事實的很好解釋:) – Ropstah 2010-01-23 17:48:17

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)

然後取最小值。

+0

這不起作用:用(0,200)和(0,300)來嘗試。這與第二個公式的距離爲0!另外,正如其他答案中所述(或至少暗示),您可以先計算出最短的x和最短的y距離;那麼你只需要應用畢達哥拉斯定理一次。 – BobS 2010-01-23 17:57:23

+0

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

3

如果您的網格在邊緣環繞,則每個座標之間將有四個距離(對於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

相關問題