2

Does anyone know any c++/opengl sourcecode demos for 2D rigid body physics using runge kutta?

I want to build a physics engine but I need some reference code to understand better how others have implemented this.

4

1 に答える 1

4

綺麗に仕上げるためには、気をつけなければならないことがたくさんあります。私はインテグレーターの実装に焦点を当て、私が見つけたものは私にとってうまく機能します.

aシステムのすべての自由度に対して、加速度を時間t、位置x、および速度の関数として返す関数を実装しますv。これは、スカラーだけでなく、量の配列またはベクトルで動作する必要があります。

a = accel(t,x,v);

RKステップの後、加速度を評価して、次のステップの準備を整えます。ループ内で次のようにします。

{
   // assume t,x[],v[], a[] are known
   // step time t -> t+h and calc new values
   float h2=h/2;
   vec q1 = v + h2*a;
   vec k1 = accel(t+h2, x+h2*v, q1);
   vec q2 = v + h2*k1;
   vec k2 = accel(t+h2, x+h2*q1, q2);
   vec q3 = v + h*k2;
   vec k3 = accel(t_h, x+h*q2, q3);
   float h6 = h/6;
   t = t + h;
   x = x + h*(v+h6*(a+k1+k2));
   v = v + h6*(a+2*k1+2*k2+k3);
   a = accel(t,x,v);
}

なんで?標準的なRK方法では状態ベクトルを作成する必要がありますが、最初の要素2xNの導関数はN最後の要素と等しくなりNます。問題を 2 つの状態ベクトルに分割しN、少し単純化すると、上記の 2 次スキームに到達しますRK

私はこれを行いましたが、結果はN=6自由度のある計画システムの商用ソフトウェアと同じです。

于 2012-04-13T20:22:39.753 に答える