プログラムでの位置・速度・加速度

数学的には位置(変位)・速度・加速度の関係は

   微分    微分
位置 → 速度 → 加速度
    ←     ←
   積分    積分

の関係にあります。一度理解してしまうと何てことないの ですが、Σ(シグマ)やら∫(インテグラル)やら訳の分からない記号のせいで数学や物理にアレルギーを持ってる方も少なくないでしょう。

数式でこれらの関係を表現すると難しく見えるかもしれませんが、プログラムでは非常に簡単に表現できます。


簡単に理解してもらうために1次元(直線)上での物体の運動を考えてみることにしましょう。

速度とは時間当たりの距離の移動量のことです。
位置p、速度s、時間tとすると、

for(時間t){
  位置p += 速度s
}

と表現できます。速度が0の時は位置の変化はありません。速度が1のときはループを繰り返す毎に1ずつ位置が移動していきます。当然速度が5のときは変位も5ずつです。

このように速度に変化のない運動を等速度運動と呼びます。

さて、加速度とは読んで字の通り"加わる速度"のことです。
加速度aを先ほどのループに加えてみましょう。

for(時間t){
  速度s += 加速度a
  位置p += 速度s
}

今度は時間t毎に速度が変化していようになりました。
初期値を位置p=0、速度s=0、加速度a=1とした場合、

時間t 位置p 速度s 加速度a
 0   0   0   1
 1   1   1   1
 2   3   2   1
 3   6   3   1
 4   10   4   1

という関係になります。

平面座標(x,y)や立体座標(x,y,z)について考える場合もそれぞれの成分に同様の処理を施せばよいだけです。


ベースとなる考え方は以上になります。

ただし、実際にプログラムをする場合、時間tの単位は秒になるとは限りません。ゲームプログラミングの場合、画面更新はFPS(Flame Par Second)という考え方を用います。

例えば1秒当たり60回の画面更新が行われる場合は60FPSとなります。

ゲームにおいてはFPSは30または60で固定することが一般的ですが、パソコンの環境しだいでこの数値は変動してしまいます。コンシューマと異なり、パソコンは所有者によりそのスペックに差があるのが当たり前ですので、プログラム側でFPS60で固定しても、その画面更新を実現可能なマシンスペックでなければ、想定より低いFPSになってしまうのです。

ですが物理シミュレーションにおいては、物体の移動量がFPSに依存して変化するようなことがあってはならないのです。

物体の移動遼をFPSに依存させないためにはどうすればよいか、それはまたの機会に解説します。
[PR]
by pcinfo | 2004-12-25 03:56