特定の時間 (例: 1 秒) 後の加速体 (例: 車) の位置を計算するにはどうすればよいですか?
加速していない運動体の場合は線形の関係なので、加速している物体の場合はどこかに正方形が含まれていると思います。
何か案は?
方程式は次のとおりです。s = ut + (1/2)at^2
ここで、s は位置、u は t=0 での速度、t は時間、a は一定の加速度です。
たとえば、車が静止状態からスタートし、3m/s^2 の加速度で 2 秒間加速すると、(1/2) * 3 * 2^2 = 6m 移動します。
この方程式は、速度が位置の変化率であり、加速度が速度の変化率であるという方程式を解析的に統合したものです。
通常、ゲーム プログラミングの状況では、わずかに異なる定式化を使用します。すべてのフレームで、速度と位置の変数は分析的にではなく、数値的に統合されます。
s = s + u * dt;
u = u + a * dt;
ここで、dt はフレームの長さです (タイマーを使用して測定: 1/60 秒程度)。この方法には、加速度が時間とともに変化する可能性があるという利点があります。
編集 何人かの人々は、数値積分のオイラー法 (ここに示されているように) は、実証するのが最も簡単ですが、精度がかなり低いことに気付きました。改善されたアルゴリズムについては、 Velocity Verlet (ゲームでよく使用される) と4 次 Runge Kutta (科学アプリケーションの「標準」メソッド) を参照してください。
まあ、加速度が一定かどうかによるけどね。もしそうなら、それは単に
s = ut+1/2 at^2
a が定数でない場合は、数値積分する必要があります。現在、さまざまな方法がありますが、最終的にはすべて近似解であるため、正確さのためにこれを手動で行うことに勝るものはありません。
最も簡単で最も正確でないのはオイラー法です。ここでは、時間をタイム ステップと呼ばれる個別のチャンクに分割し、実行します。
v[n] = v[n-1] * t * a[t]
n
はインデックス、t
はタイム ステップのサイズです。位置も同様に更新されます。これは、精度がそれほど重要ではない場合にのみ有効です。Euler の方法の特別なバージョンは、発射体の動き (wiki を参照) の正確な解を生成するため、この方法は粗雑ですが、いくつかのスーツには最適です。
ゲームや一部の化学シミュレーションで使用される最も一般的な数値積分法は、より一般的な Verlet 法の特殊な形式であるVelocity Verletです。オイラーが粗すぎる場合は、これをお勧めします。
あなたはそれをグーグルすることができます。私はこれを見つけました: http://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html
しかし、読みたくない場合は、次のとおりです。
p(t) = x(0) + v(0)*t + (1/2) a t^2
どこ
一定の加速度を扱っていると仮定すると、式は次のようになります。
距離 = (初期速度 * 時間) + (加速度 * 時間 * 時間) / 2
どこ
距離は移動した距離です
initial_velocityは初期速度です (ボディが最初に静止している場合はゼロなので、その場合はこの項を削除できます)
時間は時間です
加速度は(一定の)加速度です
計算するときは、メートル、秒などの適切な単位を使用してください。
このトピックに関する非常に優れた本はPhysics for Game Developersです。
一定の加速度と初速度 v0 を仮定すると、
x(t) = (1/2 * a * t^2) + (v0 * t)