2011-01-04 5 views
6

こんにちは ポイントの座標を計算するのに効果的な方法があるかどうかは疑問でした。c# - 与えられた距離dを移動する方法(そして新しい座標を取得する)

私はポイントP(0.3,0.5)を持っていて、そのポイントを距離dでランダムな方向に移動する必要があるとしましょう。

これまで私は新しいxとyの座標をランダムに選んでそれを行い、古い点と新しい点の距離がdであるかどうかを調べていました。私はそれを行うにはあまりにも効率的な方法ではないことを認識しています。 あなたはどうやってそれをしますか?

+0

あなたは何を意味するかをあなたは距離と角度を指定して新しい座標を計算するためにいくつかの三角関数を使うことができるようですか? – n8wrl

答えて

17

ポイント(x1, y1)が与えられた場合、距離dから「ランダム」ポイント(x2, y2)を探したいとします。

ランダムな角度を選択theta。その後:

    :あなたが見たいかもしれません

    Distance between (x1, y1) and (x2, y2) 
    = sqrt ((x2 - x1)^2 + (y2 - y1)^2) 
    = sqrt (d^2 * (sin^2 (theta) + cos^2 (theta))) 
    = d 
    

    x2 = x1 + d * cos(theta) 
    y2 = y1 + d * sin(theta) 
    

    これは(x1, y1)

    を中心とした半径dの円証明上のランダム点となります

  • Polar coordinate system
  • Distance Formula
  • Pythagorean trigonometric identity
0

点が移動することとなる方向に何ら制約がない場合、最も簡単な方法は、1つの軸のみに沿ってそれを移動させることです。

ポイントを1単位だけ移動する必要がある場合、ポイントP(0.3,0.5)は、次のいずれかになります。 P(1.3,0.5)または P(0.3,0.5) 、1.5)

8

式には基本的な三角関数が含まれています。

new_x = old_x + Math.cos(angle) * distance; 
new_y = old_y + Math.sin(angle) * distance; 

ところで、角度はラジアンである必要があります。

あなたは、単純な方程式解決する必要があり
radians = degrees * Math.PI/180.0; 
0

: '?ランダムな方向'

double dx_square = rand.NextDouble(d); 
double dy_square = d - dx_square; 
double dx = Math.Sqrt(dx_square); 
double dy = Math.Sqrt(dy_square); 
関連する問題