ブラックホールには毛が三本あるらしい
Posted on 7月 21, 2008 - Filed Under ブラックホール | Leave a Comment
昨日の投稿で、2つのブラックホールが少しずつ移動してその後どうなってしまうのか気になったので、一晩計算機を回して確かめてみた。 2つのブラックホールは、長い時間をかけて結局合体した。合体は一瞬だった。その映像を残しておこう。同じ条件でもツインにならない場合もあったのでちょっと苦労した。 映像ダウンロード WMV形式 21秒 10MB 大きい方のブラックホールの動きがほとんど無いので、合体したというより、大きい方のブラックホールが、小さい方のブラックホールを吸収したという言い方のほうが正確かもしれない。ブラックホールがブラックホールを食らったという感じだ。 このように、自然に発生したツインブラックホールでは、質量差が出てきてしまう。質量差がないようなブラックホールの場合はどうなるのか?やってみよう。 ところで、ブラックホールには毛が三本あるらしい。質量、角運動量、電荷の三つだと言うことだ。きっと難しい方程式を解いて求めた答えなんだろうけど、どういうことだかさっぱりわからない。肝心の運動量はどうなってるのだろうか?ブラックホールは移動しないのかな?それなら、銀河のコアに巨大ブラックホールがあるということは、その質量に引きずられている銀河は、移動をしないということになる。でも、実際は移動している。ならば、ブラックホールの三本の毛というのは、普通の運動量は勘定に入れていないということなのだろうか? それにしても、ブラックホールが移動するというのは、どう考えればいいんだろう?ブラックホール内に働きかける重力は、あるにしても、内部粒子は空間の穴に落ち込んだまま、出てくることがない。だから移動しようにも、普通にはできないような気がする。 そんなことを考えつつ、シュバルツシルト半径から少しだけ離して並べたブラックホールを計算実験することにしてみた。 初期条件の段階ですべての粒子を2箇所のブラックホール内に同じ個数だけ配置するのだ。すると予想通り、シミュレーションを続行しても、まったく粒子が出てこない。だが驚くことに、近接させて配置したブラックホールは全く近寄っていく気配がない。それどころか少しずつ離れていき、また、2つのブラックホールがある方向へ移動し始めた。 これから、このシミュレータが正しければの話だが、離れたブラックホールの合体は、ブラックホール外にある粒子からの干渉によって引き起こされる現象であることが推測できる。例えれば、ブラックホールの毛は外部からもたらされたものということになるから、つまりはカツラだったということになる。 ここで、このシミュレータ自体の信憑性に疑いを向けておくべきだろう。こんなものはただのSFである。しかし、面白い映像が撮れるので、とことんやってみたくなるのは仕方のない人のサガというものだろう。 ということで、次に、ぎりぎり接触する距離に、2つのブラックホールを配置してみた。 すると、質量差はないはずなのに、一方のブラックホールが、もう一方のブラックホールを食った。 映像ダウンロード WMV形式 9秒 4MB 何という予想外の結果だ。最初、2つのブラックホールがシンメトリーを保ちつつ合体するかとばっかり思っていたが、結果は違った。シーソーのバランスのように、合体の初期段階でのちょっとしたアンバランスが、大きく傾いていって、結局一方が一方を吸収するような感じになっている。 同じものを視点を回転させて撮ったもの。 映像ダウンロード WMV形式 5秒 3MB
Read More..>>銀河の2つの核と静止するツインブラックホール
Posted on 7月 20, 2008 - Filed Under 銀河シミュレーター | Leave a Comment
今朝投稿した動画を出力したプログラムにバグが見つかった。光速度限定の計算で速度を二乗していなかった。なんとも情けない。そのせいで実験結果が多少変わってきた。 もっと面白い結果がでてきた。複数のブラックホールが出現したり衝突したりする。 まず映像を見てみよう。初期条件としては前回と同じ、回転する立方体内にランダムにちりばめられた粒子、粒子数は2048個だ。(個数が半端な数なのは単なる個人的な趣味だ) 映像ダウンロード WMV形式 24秒 7MB 15FPS まずおかしいと思うのは、ブラックホールの腰が非常に重いということだ。周りの粒子が高速で回転しているのに、ほとんど影響を受けている感じがしない。特に大きなブラックホールは、全く動こうとしない。そのせいで、初期条件での粒子の重心から大きく外れたところにブラックホールが落ち着いてしまう。 これは、シミュレーション上では考えてみれば当たり前の結果だ。ブラックホール外の粒子はブラックホールの重力を感じて快調に動くが、ブラックホール内の粒子はたとえ外部の重力を受け取ったとしても、運動量と時間の関係が破綻しているので、位置が普通には動いてくれない。 大きいブラックホールが小さいブラックホールを飲み込む様は、見ごたえがある。小さいほうのブラックホールは形が歪んだり、大きいブラックホールの周回軌道に入ろうとする瞬間に分解したりしている。 それで、前回の投稿のように、ぎりぎりブラックホールが出来るか出来ないかというパラメータで計算実験をしていたところ、もっと奇妙な結果が出てきた。 2つのブラックホールが落ち着いてしまって、合体しようとしてくれない。 これも映像を用意した。 映像ダウンロード WMV形式 24秒 9MB 15FPS このまま、ずーーーとシミュレーションを続行したのだが、だめだった。ピクリとも動く様子がない。 ・・・いや、ピクピクはしているか。総体として少しずつ動いていってるというのがないと言い換える。お前らの時間は止まっているのか?と突っ込みたくなるが、実際止まってるんだろうから突っ込みになってない。 ・・・いや、ピクピクはしているんだから止まってはいないんだろうか?動いているブラックホールもあるのに、どういう安定点を形成しているんだろうか? 気がつかないくらい、ほんの少しずつ動いていました。。 ところで、今調べて知ったんだが、銀河の核には巨大ブラックホールがあると言われているが、アンドロメダ銀河などではそのブラックホールが2つあることが観測されているらしい。2つのブラックホールは、周回軌道を描きながらいずれ合体するのではないかと言われるが、初めから2つ生成されていて、動かないまま現在に至っているのかもしれない。未だに合体しないままで、現在に至っているのかもしれない?
Read More..>>ブラックホール誕生の瞬間
Posted on 7月 20, 2008 - Filed Under 銀河シミュレーター | Leave a Comment
これまでの重力多体シミュレーションでは、初期条件はすべて立方体にちりばめた角運動量の無い粒子たちだった。この初期条件では、すぐに粒子がギューっと圧縮されていってしまうので、瞬間的にブラックホールが出来てしまう。 ならば、今度は初期条件としてゆるやかな回転を持たせてやって、ブラックホールの誕生の瞬間をじっくり見届けてやろう。 ということで、とりあえず簡単に、回転する立方体内という初期条件からシミュレーションをしてみた。回転速度や粒子の密度、重力定数、光速度の設定によって、回転する粒子群は飛散してしまったり、あっというまにブラックホールになったりしたが、ギリギリの所を狙って映像化してみた。 ダウンロード WMV形式 1分08秒 34MB 30FPS この映像では真上から撮影しているのでよくわからないが、立方体になっていた粒子群はただちに降着円盤を形成しようとする。最初は飛散してしまいそうな感じだが、シミュレーション開始から27秒あたりで、舞い戻ってきた粒子の密度が濃くなった部分でブラックホールができる。すると、ただちに周囲の粒子を吸い込みシュバルツシルト半径を大きくしていく。エルゴ領域に残った粒子は高速回転しながらしばらく残っているようだ。期待通りの結果だ。 ブラックホールの中の粒子がどういう運動をしているか興味がわくが、高速で粒子が飛びまわっているという他、総体として角運動量を持っているのか、まだなんとも言えない。何分粒子が高速で動きすぎなので、トレーサーを作って得られたデータを解析しないとわからないだろう。追々調査してみることにしよう。 ちょっと待て。まだブラックホールと決まったわけじゃないぞ。 うーーーむ。 単にシミュレーションの離散化された時間と速度の計算限界が生み出しただけのものにも思える。全く如何わしくて疑わしい。 銀河シミュレータでは、離散化された時間によって重力の相互作用に遅れが出ることは、重量の影響が及ぶ速度が光速度を超えない、つまり瞬間的に重力の影響が伝わらないことを近似的に行っていると言うことである程度説明がつくような気がしていたが、このブラックホールシミュレータでは、そこんところはどう説明できるのだろうか?それに、 ブッラックホールが出来る寸前の空間、及びブラックホール周辺に、反重力の場が形成される ように見えるのはどういったことか?重力定数を極端に大きく設定すると、反重力場が大きく表れるが、それを回避するために重力定数を決定しなければならないとしたら、宇宙半径から重量定数が決まってくることになる?いや、そもそもこんなことで回避可能なことなのか?それとも、絶対に回避しなければならないことなのか? マニアックな集団の近辺にある近寄りがたい空気みたいな そんな状況と似たことが、実際のブラックホールにも起きている可能性もあるだろうw 三次元球面で粒子の位置の変化を時間微分すると、運動量が角度になって出てくると思うが、その角度がπを超えると、いくら時間が縮まったとしても、反重力のような矛盾点が出てきてしまう。もし角度πが時間が反転してしまう前の限界の量だと言うことなら、光速度も宇宙半径から決定できるのかもしれない。すなわち、角度πが光速度そのものということになる? それとも、時間はミンコフスキー空間で虚数を使って表されるから、つまりこのあたりの時間が関係しそうな部分はπを超えないように双曲線関数を使ってみるべきなのかもしれない。 まあ、どこかに計算間違いがあって、全然違う結果が出てくる可能性もある。これから色々やってみよう。
Read More..>>ああ、間違いない、ブラックホールだ。
Posted on 7月 17, 2008 - Filed Under ブラックホール | Leave a Comment
前回の投稿で、三次元球面での重力多体シミュレーションの様子を映像にしたが、これは特殊相対性理論による光速度限定を行っていないものだった。今度は、粒子速度に上限を設定してシミュレーションしてみた。 宇宙全体に一様に分布したまま泡構造を形成しないかな そんなことを願いつつ、パラメータを調節してみたが出来なかった。どうしても、三次元球面の一点に粒子が集中してしまうのである。それでも光の速度をものすごく小さく設定することで銀河団のようなものは一応できた。 映像になってないからわからないが、動きは非常にのろい。それでも、次第に粒子は宇宙の一点に集まっていく。実際の宇宙とは違ってくる。これ以上のことは、宇宙の地平面とか時間の反転を考えてやらないとダメだな。 それにしても、銀河の渦は平坦な三次元球面だけの計算では、形成されないのだから、 一般相対性理論のいう質量が空間を歪めるという主張はやっぱり凄かった 一般相対性理論の非線形な空間の歪みが降着円盤を作る原因になっていた、のかもしれない。そうすると、トリロジー銀河シミュレーターは、固定的で一様な空間の歪みを仮定しているのだから、近似としては平坦な三次元球面よりは、逆に悪くないのかもしれない。いずれ、リアルタイムに重力場の歪みを計算するシミュレーションもしてみたいものだ。そうすると格子シミュレーションになるのかな? GPSでは、時間の遅れを補正しないと機能しないということで、相対論を擁護する根拠の1つになっているが、衛星のスピードによる特殊相対性理論からの時間の遅れより、地球の重力による一般相対性理論の時間の遅れのほうが勝っているそうだ。 まあ、最初、そんなことばかり考えていたわけで、ブラックホールのことなんて全く頭に無かったんだけどさ。 それにしても、あの太陽のようなもの、あれは光速度限定にすると、爆発とかどうなるのかな?あんな小さい範囲に固まってしまうのは、計算間違いか、計算誤差の類だろうか。もっとプログラムを見直してみよう。 それで、今度は非常に狭い範囲での計算実験を繰り返しやってみた。光速度で限定されていると、もう爆発は起きず、粒子が狭い範囲に縮こまって出てこなくなる。おかしいと思った。何度もプログラムを見直した。 いや、待てよ。これ、もしかしてブラックホール? え? でも、これ平坦な三次元球面だよ?それとも、重力の相互作用や光速度限定で空間の歪みの要素が入ってしまったのかな? 粒子数や重力定数にほぼ比例して大きくなる塊りの半径が、それがシュバルツシルト半径だということを示唆していないか? とりあえず映像化 ダウンロード WMV形式 1分08秒 34MB 30FPS 時間の歪みなんて考えてなかったんだが、四元数の中に時間の要素が入り込んでいるのかもしれない。 なんだかめんどくさいことになってきた。 ちょっと内部の計算をデバッガで覗いてみたところ、 角度から計算する速度は、粒子に働く重力がπを超えたとき、反転してしまう。 ということが推測できる。 だから、強い重力場に捕らわれた粒子は、素直に塊りに落ち込まないで、周囲をハエのように飛び回るんだな。 実際のブラックホールとの対比はどうなるのやら。まあ、何かの近似的な計算にはなっているのかも。 というわけで、ブラックホールシミュレーター誕生!(笑)
Read More..>>三次元球面で行った重力多体シミュレーションの画像
Posted on 7月 15, 2008 - Filed Under ブラックホール | Leave a Comment
三次元球面というのは、四次元超球の三次元の表面のことです。今度こそ近似じゃなく。 昨日の投稿で「渦が出来ないからガッカリだ」と書いたけれども、結果は結果なんだしそれを素直に見つめて考えてみることが大切かもしれない。というのは、よく見ると、なにやら興味深い現象が起きている。粒子がまるでマリモの様な球状の塊りを作ってうごめいている。いや、これ、明らかに通常の三次元空間とは違う結果になっている。 比べてみよう。初期条件はどちらもランダムにちりばめた粒子だ。 通常の三次元のシミュレーション。中心に近いほど密度が濃くなる。これが普通。 三次元球面で行った重力多体シミュレーションの画像。ある部分から急激に密度が濃い。奇妙だ。 この塊り、まるで液体のように蠢き、時々軽い爆発を起こしたように、表面の粒子が高速で飛び散る。 この様子はまるで、そう、太陽だ。 表面粒子が飛散した瞬間。 宇宙シミュレーターを作ろうとしたら、いつのまにか太陽が出来ていた。 それとも、もっと恐ろしいものの片鱗を見てしまったのかもしれない。 映像も作ったので置いて置こう。 ダウンロード WMV形式 1分08秒 33MB 30FPS 最初、三次元球面全体に粒子をちりばめてあるが、ほんの少しの片寄りが粒子を一箇所に集めることになる。視点はあらかじめ集合した地点に設置してあるので、原点からは離れている。
Read More..>>球面線形補間だと渦はできなかった
Posted on 7月 15, 2008 - Filed Under ブラックホール | 1 Comment
早速、八元数を使った四次元の回転の計算を使用して、トリロジー銀河シミュレータを改造してみた。 位置、運動量が通常の三次元とは違い三次元球面になっているので、ややこしくて仕方ない。 検証用プログラムを駆使して、まずは2つの粒子の衝突からシミュレーションしてみる。三次元球面上の玉突きゲームだ。衝突がうまくいかなければ、粒子はあらぬ方向に反射したり、衝突を繰り返すと速度が増したりするので、間違いがすぐにわかる。 検証用プログラムは、C#でManaged DirectXを使用している。やっぱりC#の方がこういう目的にはお手軽にできる気がする。Managed DirectXはサンプルが落ちていたので使わせて頂きました。 Managed DirectX 重力の相互作用、光速度限定などのアルゴリズムを組んで関数を作成して仕上げていく。結局、八元数のクラスは使用しないで、四元数のクラスにまとめる感じですべての計算ができた。このあたりのソースをメモしておこうかな。どんな計算なのか具体的なイメージがわくし。 まずは、八元数の掛算。C# public static Octonion operator *(Octonion a, Octonion b) { return new Octonion ( a.i0*b.i0-a.i1*b.i1-a.i2*b.i2-a.i3*b.i3-a.i4*b.i4-a.i5*b.i5-a.i6*b.i6-a.i7*b.i7, a.i0*b.i1+a.i1*b.i0+a.i2*b.i3-a.i3*b.i2-a.i4*b.i5+a.i5*b.i4-a.i6*b.i7+a.i7*b.i6, a.i0*b.i2-a.i1*b.i3+a.i2*b.i0+a.i3*b.i1-a.i4*b.i6+a.i5*b.i7+a.i6*b.i4-a.i7*b.i5, a.i0*b.i3+a.i1*b.i2-a.i2*b.i1+a.i3*b.i0-a.i4*b.i7-a.i5*b.i6+a.i6*b.i5+a.i7*b.i4, a.i0*b.i4+a.i1*b.i5+a.i2*b.i6+a.i3*b.i7+a.i4*b.i0-a.i5*b.i1-a.i6*b.i2-a.i7*b.i3, a.i0*b.i5-a.i1*b.i4-a.i2*b.i7+a.i3*b.i6+a.i4*b.i1+a.i5*b.i0-a.i6*b.i3+a.i7*b.i2, a.i0*b.i6+a.i1*b.i7-a.i2*b.i4-a.i3*b.i5+a.i4*b.i2+a.i5*b.i3+a.i6*b.i0-a.i7*b.i1, a.i0*b.i7-a.i1*b.i6+a.i2*b.i5-a.i3*b.i4+a.i4*b.i3-a.i5*b.i2+a.i6*b.i1+a.i7*b.i0 ); } 何という複雑さだろう。これを手計算でやるのは絶望的ですね。しかし、世の中には八元数を手計算するための方法があってFano plane mnemonicという図を使ってやるらしい。とてもやりたくないけど、最初の一回この関数を作るためにセッセと紙で計算してたり。8項×8項の展開だからノート一面が文字で埋め尽くされる感じになったw 数式処理ソフトを使えばよかった。 んで八元数の掛算から実数部分を取り除くと、7次元の外積になる。C# public Octonion Cross(Octonion a) { return new Octonion ( 0, i2*a.i3-i3*a.i2-i4*a.i5+i5*a.i4-i6*a.i7+i7*a.i6, -i1*a.i3+i3*a.i1-i4*a.i6+i5*a.i7+i6*a.i4-i7*a.i5, i1*a.i2-i2*a.i1-i4*a.i7-i5*a.i6+i6*a.i5+i7*a.i4, i1*a.i5+i2*a.i6+i3*a.i7-i5*a.i1-i6*a.i2-i7*a.i3, -i1*a.i4-i2*a.i7+i3*a.i6+i4*a.i1-i6*a.i3+i7*a.i2, i1*a.i7-i2*a.i4-i3*a.i5+i4*a.i2+i5*a.i3-i7*a.i1, -i1*a.i6+i2*a.i5-i3*a.i4+i4*a.i3-i5*a.i2+i6*a.i1 ); [...]
Read More..>>トリロジーグラフのグリッド線
Posted on 7月 8, 2008 - Filed Under 銀河シミュレーター | 2 Comments
トリロジーグラフとは、単位四元数の対数関数から四次元の超球の表面(三次元球面)を三次元に落とし込んで近似的に表示する投影技法のことで、私の造語です。(前回の投稿参照) ステレオ投影のウルフ網や他の地図の図法のように、投影法を開発したのなら、次に来るのはグリッド線の描写だと思い描いてみました。 まず、三次元のグリッド線ですが、このようになります。 普通です。何の変哲もない。 この線を、三次元球面上でずーっと伸ばしてやると、トリロジーグラフのグリッド線になるはずです。伸ばすというのは、四次元の回転を計算することにあたります。 なかなかに複雑w でも、線と線の交点はちゃんと直行してるし、線は一周してなめらかに連結しています。粒子をこの空間で飛ばしてやってもうまくいく。 もう1つ原点をずらした画像。 うーむ、美しくもないし、ここに手作業でプロットして下さいと言われてもお断りですねw 重ねて表示させても邪魔になるだけだし。まあ、こんなものなのかと一度見ておけばいいかと。 ポアンカレ予想の、宇宙にぐるっとロープをまわしてくるというのは、きっとこういうことなんだろうと思った。 画像だと3Dで想像しにくいと思うので、グルグル回してみることのできるプログラムを置いておきました。右の「プログラム本体」からダウンロードできます。
Read More..>>八元数と七次元の外積と四次元の回転と三次元の回転軸?
Posted on 7月 5, 2008 - Filed Under ブラックホール | 2 Comments
前回の投稿に引き続き、八元数あたりを考察してみる。 単位複素数(二元数)は、ガウス平面上で1つの角度を定義する。だから、単位複素数は閉じた一次元の量だとみなすことができる。単位複素数をかけ合わせる事は角度を足し合わせる事に等しく、割ることは差に等しい。同じことが単位四元数にも言えて、三次元の回転とみなすことができる。ただ、そのかけ合わせる仕方は単位複素数とは違い、共役とともにはさみ合わせるかけ方になる。 この掛算の仕方を一言で表すいい言葉を探してみたが、見つからなかった。量子力学のブラケット記法にちなんでブラケット積と呼んでもいいが、ブラケット積は別に定義されている言葉のようだ。テンソル積とはまた違うだろうし、スピン積と呼んでもいまいち。なんとか命名しないと、プログラムの関数名が決められないし(T.T)。仕方ないから仮にでも、共役積(conjugation product)と呼ぼうかな。 四元数による三次元の回転はとてもうまくいくので、CGや宇宙船の姿勢制御に使用されている。 ならば、八元数による七次元の回転もうまくいくに違いない。 十六元数による十五次元、三十二元数による三十一次元、・・・・・もうまくいくんだろうか?わかりません。でもそんな高次元は今はいらなくて、やりたいのはたったの四次元の回転だから関係なし。 さて、四次元を七次元で回転させようとした場合、七次元のどこに四次元をはめ込もうか問題になる。左4つに入れるのが常考かと思うが、七次元外積と八元数の構成を考えれば、右4つに入れるのが妥当だろう。 計算すると、最初よくわからない結果になった。4,6,8番目の位置に結果が出て、それ以外ゼロになる。八元数の掛算の定義が問題かもしれない。i,j,k,l を使用した八元数だと結果が変わるかもしれない。プログラムをセッセと組みなおし再計算。 果たしてその通りになった。左3つに綺麗に結果が入る。これこそ期待していたシンメトリー 三次元の回転を表す外積は三次元だが、四次元の回転もまた三次元ででる ということを、七次元の外積から確認することができた。四次元の回転は、七次元内の他の三次元によって定義できるのである。ただ、八元数の共役積によって回転を計算するために、四次元化しなければならないから、完全な三次元というわけでもないような感じだ。そしてその四次元化した量は、結局は単位四元数なのである。 ところで、冒頭で述べたとおり、2つの複素数の回転角は複素数の割り算に還元できる。だから、四元数の割り算を計算すればそれもまた四次元の回転角を算出することになるのではないかと思わないだろうか?そしてそれは、七次元外積の計算と一致するのではないか? 検証プログラム作成。 果たして結果は、一致した。 四元数割り算の虚数部分が一致した。当然といえば当然だが、奇妙だといえば奇妙な結果だ。七次元外積と四元数割り算の計算手順は質的に異なるからだ。 もう1つ、四元数の対数関数Logはどうだろう?複素数ではオイラーの公式から、指数関数 Exp(iθ)の逆関数 Logによって角度が求められる。出てきた角度の差をとってもとの四元数に戻す。 結果は一致しなかった。 これは、複素数から四元数に次元アップするにあたって、単なる角度と回転角の違いが出たということを意味する。ただし、実数部の割合が大きい場合、「七次元部分外積=四元数割算」と「四元数の指数対数関数」は近似的に一致する。これは、三次元から二次元に落とし込む技法である地図作成の様々な図法に出てくる不可避なゆがみと同様なものだと考えられる。つまり、 単位四元数の対数関数の三次元投影は、四次元の正距方位図法 ということになるだろう。これも名前がないと不便で仕方がない。同じような技法を誰かが思いついているのかもしれないが、調べても出てこないので、「 トリロジーグラフ (Trilogeographic Projection) 」と命名しようと思う。幾何学的に少し違うがステレオグラフ(Stereographic Projection)と、オイラーの宝石を3つ組み合わせたという意味をこめてみた。 現バージョンの銀河シミュレータは、このトリロジーグラフなのである。局所的にしか成立しない空間だったりして。こっちの方の名前でスッキリするからまた改名かな。; まあ、とにかくだ、四次元の回転をきちんと計算できるようになったようだから、銀河シミュレータは一気に宇宙シミュレータに進化する可能性が見えてきた。どうなることやら。
Read More..>>念願の四次元の超球面線形補間がやっとできた
Posted on 7月 3, 2008 - Filed Under ブラックホール | 2 Comments
現バージョンの四元数空間銀河シミュレータでは、四元数を三次元に落とした後に、重力相互作用を計算している。これでは、原点に重力が集まってしまい本物の宇宙とは言えない。銀河のサイズなど宇宙のサイズに比べれば塵に等しいので、自分的には、「最初は近似としてまあいいや」と思っていたんだが、他にやることもなくなったので、きちんと考えることにした。というか、何ヶ月も漠然と考えて、「難しいなあ」とため息をついていたことで、半ばあきらめていたところだった。それが今日は解決するかもしれないということで、少し喜んでいる。 ところで、このシミュレータ、どういうわけか重心が安定しない。なぜか銀河全体が速度を持って原点を中心にゆるやかに単振動するのだ。この現象は宇宙全体に粒子をちりばめるスケールで実験するともっとハッキリとする。まるで洗濯機の中にあるように、回転を逆転させつつ、粒子全体の重心が単振動する。実はこの重心が単振動するのを実験するのは、銀河シミュレータより先にやっており、自分的には機知の現象として受け入れていたことだった。粒子数を多くして狭い範囲に配置することで、銀河シミュレータが出来たわけだが、むしろそれは後からやったことで、そのようなシミュレーションでも重心が安定しないということに対しては、「やっぱりか」という感想だった。 これは銀河シミュレータが出来た経緯をもっと詳しく説明する義務があるのかもしれない。 最初は新しいアイデアとして四元数空間を試す意味で、粒子の衝突などをビリヤードゲームのように遊んでいただけだった。粒子がまっすぐに飛ばないことから制御が難しいが、粒子はあらぬ方向に飛んでいっても必ず循環してもとに戻ってくる。その様子を見るのが面白かったわけだ。それで遊びながら、四元数空間の位置や速度、加速度を定義していった経緯がある。その前置きがないまま、いきなり「四元数空間のシミュレーションです。銀河の渦ができます」とか言われても抵抗あると思う。とりあえず、四次元を体感できるソフトとして、四次元ビリヤードゲームとかいう感じで公開しようかな。 話が脱線している。今日書きたかったのはそういうことではなくて、 八元数と7次元の外積を使うことで、4次元の超球面線形補間ができた ということ。 三次元の球面線形補間は四元数を使うことでわりと簡単に計算できる。これを四次元に拡張したかったが、どうやっていいかわからなかった。何ヶ月もわからないまま、ほったらかしにしていたが、「大は小をかねると言う事で、八元数を使えばいいんじゃあるまいか。」ということを思いついてやってみたところ、うまくいった感じ。 計算手順は以下の通り。 位置を表す2つの単位四元数から八元数の l,il,jl,kl に代入することで2つの八元数を準備 八元数の虚数部の7次元の外積を計算して、正規化。 V とする。Vは最初の3次元以外はすべてゼロ 。どうやら八元数の定義には二種類あるようだが、l を使う方 2つの四元数から内積をとって角度θを求める φ = (補間率) * θ/2 このあたりは3次元球面線形補間と同じ 八元数 O = cos(φ) + V sin(φ) を作成 result = Conjugate(O) * (位置の八元数のどちらか) * O result の虚数部 l,il,jl,kl の係数から四元数に戻して、Ln()をとる → 3次元座標 これから、運動量も球面線形補間で定義しなおすことが出来る。そして、それは、八元数の積と7次元の外積の性質から、八元数の実部と虚数部 i, j, k の係数で定義できる。結局のところ、粒子の位置と運動量は、八元数の係数で一まとめにできるようだ。だから八元数を使ってもそんなにメモリを余計に使うことはなさそうだ。実装が楽しみだ。 四次元超球面線形補間の様子。実際は青と赤の粒子が動き回っていて、補間された粒子がぐにゃぐにゃと蠢く。まるで芋虫だw
Read More..>>