質問
一定時間(1秒など)後に加速体(車など)の位置を計算するにはどうすればよいですか?
加速していない移動体の場合、それは線形の関係であるため、加速体の場合はどこかに正方形が含まれると推測します。
アイデアはありますか?
解決
式は次のとおりです。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次ルンゲクッタ(科学アプリケーションの「標準」メソッド)アルゴリズムの改善。
他のヒント
まあ、それは加速度が一定かどうかに依存します。それが単純な場合
s = ut+1/2 at^2
aが一定でない場合、数値的に積分する必要があります。現在、さまざまな方法がありますが、いずれも最終的には近似解であるため、精度を高めるために手作業でこれに勝るものはありません。
最も簡単で正確性が低いのは Eulerのメソッドです。ここでは、時間ステップと呼ばれる個別のチャンクに時間を分割し、実行します
v[n] = v[n-1] * t * a[t]
n
はインデックス、 t
はタイムステップのサイズです。位置も同様に更新されます。これは、精度がそれほど重要ではない場合にのみ本当に役立ちます。オイラーの方法の特別なバージョンは、発射体の動きの正確な解決策をもたらします(wikiを参照)ので、この方法は粗雑ですが、いくつかの適合には最適です。
ゲームおよび一部の化学シミュレーションで使用される最も一般的な数値積分法は、 Velocity Verlet 。これは、より一般的な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
where
- p(t)=時間tでの位置
- x(0)=時間ゼロの位置
- v(0)=時間ゼロでの速度(速度がない場合は、この用語を無視できます)
- a =加速度
- t =現在のitme
一定の加速を扱っていると仮定すると、式は次のようになります。
距離=(初期速度*時間)+(加速度*時間*時間)/ 2
where
距離は移動距離です
initial_velocity は初期速度です(体が最初に静止している場合はゼロなので、その場合はこの用語を削除できます)
時間は時間です
acceleration は(一定の)加速度です
計算の際に適切な単位、つまりメートル、秒などを使用するようにしてください。
このトピックに関する非常に良い本は、ゲーム開発者向けの物理です。
一定の加速度と初速度v0を想定、
x(t) = (1/2 * a * t^2) + (v0 * t)