オブジェクトが 2D 世界でターゲット位置に向かって移動し、 vector として保存されるシミュレーションを書いていますtarget(x,y)
。オブジェクトの位置も位置ベクトルpos(x,y)
として保存されます。dv(x,y)
オブジェクトには、目的の移動速度と現在の移動速度 の2 つのベクトルが含まれていcv(x,y)
ます。シミュレーションの開始時には、これらの速度ベクトルは両方とも初期値、つまり に設定されてい(0,0)
ます。
オブジェクトがターゲット位置に向かって移動する必要がある場合は、目的の速度ベクトルを計算し、dv
それを正規化し、移動速度の値でスケーリングします。
dv.set(target).sub(pos).normalize()
dv.scale(speed)
動きをよりリアルに見せたいので、2 つの速度ベクトルを使用します。dv
オブジェクトを動かしたい最高速度を伝え、cv
オブジェクトが現在動いている実際の速度を保持します。
次に、各フレーム (更新ステップ) で、現在の速度が目的の速度と加速度値cv
に基づいて設定されます。これは、 と の差を単純に計算して、この差を にクランプすることによって行われます。このようにして、オブジェクトはゆっくりと動き始め、徐々に加速して最終的に全速力に達します。dv
acc
cv
dv
acc
これまでのところ、これはうまく機能しています。acc
今度は減速にも活用したいです。pos
との間の距離がtarget
特定の値にあるとき、目標の位置で完全に停止するまでオブジェクトが徐々に減速するように、目的の速度dv
を に設定する必要があります。(0,0)
私の質問は、どの距離に設定dv
する必要があるか(0,0)
(つまり、システムに動きを停止するように指示する) をどのように計算して、オブジェクトが正しく減速して目標位置で正確に停止するかです。