Q068891のメモ帳

気が向いたときにLinuxだったり、プログラムだったり、適当なメモをざっくばらんに書いてます。

現在位置からランダムな方向(角度)に任意の距離移動するプログラム

シミュレーション等で現在位置からランダムに決定した角度に対して、
任意の距離移動させたい場合などが結構ある。(ブラウン運動とかLévy Walkとか)以下その方法を紹介。

まず最初に、移動する方向をランダムに選ぶ

移動する方向をランダムに選ぶには、下記方法でランダムに角度θ(ラジアン)を求めれば良い。(要は360度からランダムに方向を選んでるだけ)

角度\theta = 2 \pi Z

Zは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は{p(d) \sim d^{-3}}の確率でランダムに決定.10000step行った結果。

上記方法で実施したLévy Walkの軌跡。距離dは{p(d) \sim d^{-2}}の確率でランダムに決定.10000step行った結果。