力学の教科書の内容は質点系の力学と剛体の力学の二つに大きく分けられている。 質点系の力学を Java3D で行うことための処方箋はほぼ分かってきて、 むしろネタ切れの感があったので、剛体の力学に挑戦することにした。
剛体の運動のシミュレータ (Java Web Start)内部角運動量、慣性テンソル、軌道を表示する場合の局所座標の点、外部重力ベクトル を与えて、シミュレーションをする。剛体の運動方程式に従って数値計算を行う。 剛体は独楽のような形をしているが、便宜上であって、独楽の慣性モーメントを 持つわけではない。次のような特徴的な初期値を与えることができる。
剛体の運動を空間上の回転を表すリー群上の運動だと思い、 角運動量はそのリー環(本当はその双対空間とすべきだけど、計量によって 同一視しておく)に値を持つと考える。 慣性テンソルをリー環上の対称作用素と考えて、 リー環の変数 M についての微分方程式
dM -- = [M,Ω] dt M = A(Ω)
を解いて、角運動量 M を求める。 その角運動量にしたがって りー群上の運動を求め、それに従って剛体の座標系を回転させている。 ちなみにこれは外力のない場合、つまりは 無重力空間内での剛体の運動となっている。 剛体がある重力場の中にいるときには、次の方程式になる。
dM -- = [M,Ω] + [G,L] dt M = A(Ω)
ここで、G は剛体の座標系による 重力ベクトル場で、L は固定点を原点とした時の重心の位置ベクトルである。
はじめ Arnold の「古典力学における数学的方法」を見たが、剛体の運動は のっていても、Hamilton 力学ではない。そこで、Abraham and Marsden の Foundations of Mechanics とか、Marsden and Ratiu の Introduction to Mechanics and Symmetry などを参考にした。この方程式の導出自体は Hamilton 力学でなくてもできる。
数値計算は局所座標に書き下さずに行列のまま vecmath パッケージを用いて計算した。ルンゲクッタ法は 行列環上の演算に翻訳して用いている。翻訳があっているかについて 理論的にチェックしていないので、ひょっとしたら積の非可換性から ルンゲクッタ法で保証される以上の誤差が出てきてしまうかもしれない。