目標へなめらかに向き直る
点に行きたい場所を持たせる。標的へ真っ直ぐ向かう速度を desired として、今の速度との差を力にする。差を毎フレーム速度に足すと、向きが少しずつ標的の方へ傾いていく。
steering。Craig Reynolds の操舵で、行きたい速度 desired から現在の速度を引いた差を操舵力とする。force = desired − velocity を加速度として積分し、力の大きさを maxForce、速度を maxSpeed で頭打ちにする。上限があるぶん一フレームでは狙い通りの速度になれず、軌跡に慣性が残って弧を描く。標的へ向かう seek、距離に応じて減速する arrive、向きを乱歩させる wander が同じ枠組みの変種。
desired は標的方向の単位ベクトルを maxSpeed まで伸ばしたもの。そこから今の速度を引いた差を maxForce で抑えて速度に足す。標的に近づくと desired を距離に比例させて細らせ、行き過ぎずに止まれるようにする。
点は標的の動きを追いかけるが、急には曲がれずに外側へ膨らんだ弧を描く。slow を 0 にすると desired が細らなくなって、標的を毎回オーバーシュートして振り子になる。maxForce を上げると曲がりが鋭くなって弧が締まり、下げると緩い大回りになる。
seek に乱歩を一本足したのが wander。向きの角度を毎フレーム少しずつずらしてから、その向きへ弱い力を加える。角度を積分して進めるので、毎フレーム新しい向きを引くのと違って震えずにふらつく。標的を追う力に wander の力を重ねると、軌道に揺らぎが乗る。複数の点を撒いて同じ標的へ向かわせると、それぞれが別々にふらつきながら集まる。
六つの三角が同じ標的へ寄りながら、それぞれ別々にふらついて弧を散らす。wander の係数 0.06 を上げると揺らぎが強くなって標的から逸れがちになり、0 にすると seek だけの素直な追従に戻る。角度のずれ幅 0.6 を大きくすると向きの変わり方が荒くなる。標的への力と乱歩の力を重ねるだけで、機械的な追従が散歩めいた動きになる。