現在位置からランダムな方向(角度)に任意の距離移動するプログラム
シミュレーション等で現在位置からランダムに決定した角度に対して、
任意の距離移動させたい場合などが結構ある。(ブラウン運動とかLévy Walkとか)以下その方法を紹介。
まず最初に、移動する方向をランダムに選ぶ
移動する方向をランダムに選ぶには、下記方法でランダムに角度θ(ラジアン)を求めれば良い。(要は360度からランダムに方向を選んでるだけ)
角度
※は0以上1未満の範囲をとる一様確率変数
・Javaでの記述方法
Random r = new Random();
double radian = 2.0 * Math.PI * r.random();
ランダムに決定した角度θの方向に、現在の座標(x, y)から距離d分だけ移動した座標値を求める。(要は移動先を決める)
移動後の座標x = 現在の座標x + 任意の距離d × cosθ
移動後の座標y = 現在の座標y + 任意の距離d × sinθ
・Javaでの記述方法
double next_x = x + d * Math.cos(radian);
double next_y = y + d * Math.sin(radian);
以上で任意の角度θに、任意の距離d分現在位置から移動するプログラムが書ける。
おまけ
上記方法で実施したブラウン運動の軌跡。距離dはの確率でランダムに決定.10000step行った結果。