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.
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.
綺麗に仕上げるためには、気をつけなければならないことがたくさんあります。私はインテグレーターの実装に焦点を当て、私が見つけたものは私にとってうまく機能します.
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
自由度のある計画システムの商用ソフトウェアと同じです。