トーラスの表面上の 2 つの x/y 座標間の距離を計算したいと思います。したがって、これは角と辺が「接続」されているというプロパティを持つ通常のグリッドです。たとえば、500x500 のグリッドでは、(499, 499) のポイントは (0, 0) に隣接し、(0,0) と (0,495) の間の距離は 5 になります。
これを計算する良い数学的な方法はありますか?
トーラスの表面上の 2 つの x/y 座標間の距離を計算したいと思います。したがって、これは角と辺が「接続」されているというプロパティを持つ通常のグリッドです。たとえば、500x500 のグリッドでは、(499, 499) のポイントは (0, 0) に隣接し、(0,0) と (0,495) の間の距離は 5 になります。
これを計算する良い数学的な方法はありますか?
つまり、トーラスの 2 次元表面でのユークリッド距離を探しているということですね。
sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)
ここでw
、 とh
はそれぞれグリッドの幅 (x) と高さ (y) です。
グリッドが端で折り返されている場合、各座標間に 4 つの距離があります (2 次元の場合)。最短距離を知りたいと思います。
小さいグリッドを使用してみましょう。数字はもう少し扱いやすいです。グリッドが 10x10 だとします。例と同じように、簡単にするために 1 つの次元のみを使用してみましょう (この場合、距離は 2 つだけになります)。ポイント 0,2 と 0,6 があるとします。ポイント間の 2 つの距離は d_1 = (6-2) = 4 と d_2 = (10-6) + 2 = 6 であるため、この場合、最短距離は d_1 になります。
一般に、次のことができます。
次に、ピタゴラスの定理を使用して、2 点間の最短距離は、各方向の最短距離の 2 乗和の平方根です。他の 3 つの距離は、各方向の距離の他の組み合わせを使用してピタゴラスの定理を計算することで計算できます。
別のポスターが言ったように、(2 次元グリッドの場合) エッジを丸めたときに形成される形状はトーラスであり、上記で使用した方法は与えられた方程式と同じですが、それができるという利点があります。必要に応じて n 次元に拡張できます。残念ながら、2 次元を超える簡単な視覚化は実際にはありません。
ポイント (x1,y1) と (x2,y2) の場合、4 つの距離を計算する必要があります。
そしてそれらの最小値を取ります。