剛体の運動シミュレータ

Home に戻る


力学の教科書の内容は質点系の力学と剛体の力学の二つに大きく分けられている。 質点系の力学を Java3D で行うことための処方箋はほぼ分かってきて、 むしろネタ切れの感があったので、剛体の力学に挑戦することにした。

剛体の運動のシミュレータ (Java Web Start)

使い方

内部角運動量、慣性テンソル、軌道を表示する場合の局所座標の点、外部重力ベクトル を与えて、シミュレーションをする。剛体の運動方程式に従って数値計算を行う。 剛体は独楽のような形をしているが、便宜上であって、独楽の慣性モーメントを 持つわけではない。次のような特徴的な初期値を与えることができる。

Unstable
主慣性モーメント(つまり慣性作用素が対角行列のときの対角成分)が全て 異なるときに、中間の大きさの主慣性軸は安定ではない。そこで、 その方向の角運動量を大きくとって、それ以外の角運動量をわずかな値にして シミュレーションをすると興味深い運動が見られる。
Lagrange
いわゆるラグランジュのコマ。回転の軸に対して、主慣性モーメントが対称。
Kowalevski
いわゆるコワレスカヤのコマ。回転軸は剛体の主軸と一致するが、 主慣性モーメントは回転軸と、それに垂直な一成分が等しく、 残りの一成分はそれらの2倍。

剛体の運動を空間上の回転を表すリー群上の運動だと思い、 角運動量はそのリー環(本当はその双対空間とすべきだけど、計量によって 同一視しておく)に値を持つと考える。 慣性テンソルをリー環上の対称作用素と考えて、 リー環の変数 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 パッケージを用いて計算した。ルンゲクッタ法は 行列環上の演算に翻訳して用いている。翻訳があっているかについて 理論的にチェックしていないので、ひょっとしたら積の非可換性から ルンゲクッタ法で保証される以上の誤差が出てきてしまうかもしれない。

履歴

2002/3/9
取りあえず重力場対応にして、重心の位置と重力場を入力可能にする。 パラメータの指定方法はあまりよい方法ではないかもしれない。
2002/3/6
軌跡を描画するための軸の方向を変更可能にする。 軌跡を書くためのクラス Tail を Shape3D から BranchGroup に変更。 さらにデータ処理方法も参照モードに変更。たぶんコピーモード よりも速い。さらに頂点の色も指定するようにして、色が減衰してい くようにした。オマケとして Rainbow モードで作成。
2002/3/4
軸の軌跡を描画する。
2002/3/3
数値計算をルンゲクッタ法に変える。発散はおさまる。
2002/2/26
オイラー法で数値計算する。すぐ発散してしまう。
2002/2/23
開発開始。