2011-02-09 4 views
2

私空間における2つのエンティティの位置を表す2つの点(X 、Y )及び(X 、Y )を有しています。私はピタゴラスの定理を使ってそれらの間のユークリッド距離を計算し、すべてが素晴らしいです。しかし、私の空間が有限になると、地図の縫い目を「包み込む」点の間に新しい最短距離を定義したいと思います。たとえば、ポイントAを(10, 10)とし、ポイントBを(90,10)とし、マップの幅を100単位とすると、AとBの間の距離を20として計算したいと考えています(マップの右端から左端)を、通常のユークリッド距離である80の代わりに使用します。小惑星のスタイルラップを尊重しながらデカルト空間の2点間の距離を計算するにはどうすればよいですか?

私の問題は、私がやろうとしていることには適していない座標系を使用していることです。本当に私の平らな正方形のマップは、よりシームレスなドーナツ形状です。この性質のシステムをどのように実装し、デカルト座標から前後に変換するかについての示唆もあります。

答えて

8

トロイダル面?さて、私は噛むだろう。ここでロールオーバーあなたのxの行動とy座標と符号付き整数のロールオーバー動作の間の対応method of complementsにベースの補数表現を用いて表現があります

var raw_dx = Math.abs(x2 - x1); 
var raw_dy = Math.abs(y2 - y1); 

var dx = (raw_dx < (xmax/2)) ? raw_dx : xmax - raw_dx; 
var dy = (raw_dy < (ymax/2)) ? raw_dy : ymax - raw_dy; 

var l2dist = Math.sqrt((dx * dx) + (dy * dy)); 

あなたの座標境界が、あなたの言語でサポートされているバイナリ整数型の境界に正確にマップされている場合、オーバーフローを無視して、結果は元の座標と同じサイズの符号付き値として返されます。一般的なケースでは、それはabsと上記のダンス、比較と減算が必要ですので、その幸運になるつもりはないでしょう。

+0

私は思ったよりもずっと簡単で、長い計算はありません!本当にありがとう。 – hornairs

関連する問題