犀角(Diceros Horn) 2006 01 11

とくながの「書き散らかし」です

ここは研究・調査・開発などの記録がメインのページです。 日常の雑事、読書記録は はてなダイアリー の方に書いています。よろしければそちらもどうぞ。

Wed, 11 Jan 2006

結び目

結び目を円周から3次元空間への写像とみなし、 それを三角関数で展開したときの係数を与えて結び目を描く。 有名な結び目については、あらかじめ与えている。

まずはメニューから有名どころの結び目を選んでみてください。 それから係数を変化させてお楽しみください。 他の結び目の係数を御存じの方はぜひお知らせください。

履歴

2003/6/15
いつ作ったかよく覚えていないのだけれど、2003年になってからなのは 確か。Swing でスライダーを作って係数を変更するようにしている。 法線ベクトルを GeometryInfo を使わずに自力で計算するようにしたが、 しわになっていしまうこともある。他に依存しないような法線ベクトル の作り方を考え中。

posted at 22:32 | category: /Program/Knot | 固定リンク(結び目 )

ローレンツアトラクタ

3次元の常微分方程式の中で視覚化することに意義があるものとして 取り上げた。たぶん一番最初に作ったまともな Java3D の プログラムだったような・・・・・。

方程式

  x' = -10x + 10y
  y' = 28x -y -xz
  z' = xy - 8/3z
を初期値 (x,y,z) = (0,5,0) の下で数値計算する。

posted at 21:31 | category: /Program/Physics | 固定リンク(ローレンツアトラクタ )

剛体の運動シミュレータ

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

使い方

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

posted at 21:19 | category: /Program/Physics | 固定リンク(剛体の運動シミュレータ )

4x4ルービックキューブ

ルービックキューブのシミュレーションプログラムの4x4バージョンです。 Java3D で作っています。

画面下のボタンを押すか、色名のキーを押すと、 デフォルトの状態でその色が中心にある面をその面の上から見て 時計回りに90度回転します。 4x4なので、中心の色もそのうち変わってしまうので注意。

posted at 00:39 | category: /Program | 固定リンク(4x4ルービックキューブ )

三体問題のシミュレータ

三体問題は、ハミルトン系の例として教科書によく現れ、また初等的に解けない例としても よく紹介される。そこで Java3D でハミルトン系を扱う場合の例として取り上げることにしました。 数値計算はシンプレクティック法を Java で実装したものを使っています。

開発履歴:はじめ2000年の秋頃に作ったのですが、そのときの履歴をなくしてしまいました。
2003/8/2
うまく動かなくなっていたのを直す。アプレットにおけるパラメータ表示のための スレッドの処理などを変更。
2000/秋頃
開発開始。数値計算に使うためにシンプレクティック法をパッケージ化する。

posted at 00:25 | category: /Program/Physics | 固定リンク(三体問題のシミュレータ )