web-dev-qa-db-ja.com

一定時間後の加速体の位置を計算する

特定の時間(例:1秒)後の加速体(例:車)の位置を計算するにはどうすればよいですか?

加速していない移動体の場合は線形関係なので、加速体の場合はどこかに正方形が含まれていると思います。

何か案は?

20
Iain

方程式は次のとおりです。s= ut +(1/2)a t ^ 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次ルンゲクッタ (科学的アプリケーションの「標準」方法)を参照してください。

34
Chris Johnson

まあ、それは加速度が一定であるかどうかに依存します。もしそうならそれは単に

s = ut+1/2 at^2

Aが一定でない場合は、数値積分する必要があります。現在、さまざまな方法があり、それらはすべて最終的に近似的な解決策であるため、正確さのためにこれを手作業で行うことに勝るものはありません。

最も簡単で精度が最も低いのは オイラー法 です。ここでは、時間をタイムステップと呼ばれる個別のチャンクに分割し、実行します

v[n] = v[n-1] * t * a[t]

nはインデックス、tはタイムステップのサイズです。位置も同様に更新されます。これは、精度がそれほど重要ではない場合にのみ本当に有効です。オイラー法の特別なバージョンは、投射物の動きの正確な解をもたらします(wikiを参照)。したがって、この方法は大雑把ですが、いくつかの適合に最適です。

ゲームや一部の化学シミュレーションで使用される最も一般的な数値積分法は Velocity Verlet であり、これはより一般的なVerlet法の特殊な形式です。オイラーが粗すぎる場合は、これをお勧めします。

7
freespace

あなたはそれをググることができます。私はこれを見つけました: http://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

しかし、読みたくない場合は、次のようになります。

p(t)= x(0) + v(0)* t +(1/2)a t ^ 2

どこ

  • p(t)=時間tでの位置
  • x(0)=時間ゼロでの位置
  • v(0) = velocity at time zero (if you don't have a velocity, you can ignore this term)
  • a =加速度
  • t =現在のitme
1
asterite

一定の加速を扱っていると仮定すると、式は次のようになります。

距離=(initial_velocity *時間)+(加速度*時間*時間)/ 2

どこ

距離 移動距離です

初期速度 は初速度です(体が最初に静止している場合はゼロなので、その場合はこの項を削除できます)

時間 時間です

加速度 (一定の)加速度です

計算するときは、メートル、秒などの適切な単位を使用してください。

このトピックに関する非常に優れた本は ゲーム開発者のための物理学 です。

1

一定の加速度と初速度v0を仮定すると、

x(t) = (1/2 * a * t^2) + (v0 * t)
1
jholl