(a・b)cを、使いました。依存するので、いちいち計算するには面倒くさいです。そこで、もう少し扱いやすい形に変形します。┘さて、ここから計算がシステマチックでわずらわしいので、アインシュタインの規約を使って、記述します。アインシュタインの規約とは、ベクトルや行列を添え字で書くときに、同じ添え字があったら、暗黙のうちにその添え字について、和を取ることを言います(アインシュタイン唯一の発明とも言われています)。Rμκ(t)Iκδ(0)Rδν-1(t)になります。R(t)I(0)R-1(t)です。慣性テンソルは最初の時点で求めておけば、あとは、剛体の向きを作用させれば、それぞれの時刻での値が求まることになります。通常は、ローカル座標系での慣性テンソルを求めておき、そこから剛体の向きによって、ワールド座標系での慣性テンソルを求めます。┘のようになります(こってり屋の丸写しってばらしちゃだめ!)。■状態ベクトル剛体を記述する状態ベクトルと、その時間発展は、次のようになります。I(t)ω(t)■ソースの解説では、ソースを解説します。今回は、運動がメインなので、描画部分の解説はしません。半球ライティングのページを参考に調べてください。使っていますが、ほかのAPIを使うときでも、適当な行列を使って計算が可能でしょう。関係するものだけでなく、計算途中で使う速度ベクトルもメンバーとして持っています。これらの変数は剛体のプログラムに共通のものだと思います。クラスを実際の計算に用いています。クラスは、外力を与える等、車の計算に特有な部分を記述します。この関数で、状態ベクトルに関する更新を行います。前のフレームとの時間差分です。フレーム数が違っても、同じ運動になるように調整するために使います。関数を上書きして、適当な運動をするような外力を与えています)。速度ベクトルなどを計算して、準備を整えてから、足しこみます。回転行列は、計算誤差の蓄積で正規直行行列からずれていくので、規格化等をして適切な状態になるように調整します。速度ベクトルなどを計算する部分は、先ほどまで述べた部分に忠実に計算しています。}それぞれ定義を確認してみてください。(まだ、満足できる出来でもないですしね)。めり込んでいたらめり込んだ分だけ押し返します(あと、安定化を図る雑多な部分です)。■最後に実際にプログラムをしてみると、安定させるのが難しいですね。それに、回転行列を作るのもうまく言ってないですね。