ディスカッション (11件)
好奇心と学習を兼ねて、週末のプロジェクトとして太陽系シミュレーター『Gravity』を開発しました。学校の授業では「なぜ惑星が公転するのか」という根本的な理由が腑に落ちなかったのですが、それを自分なりに可視化するために作ったものです。このツールは、順を追って理解を深められるガイドツアー形式になっています。まず、2体問題における相互作用と慣性(太陽を消すと地球が真っ直ぐ飛んでいく様子など)から始まり、「軌道とは、落下し続けながらも的を外し続けている状態である」という概念、ロケットによる宇宙速度の変化、さらにボイジャー1号・2号の実際の重力アシスト(1977〜1989年の実際の惑星配置とスイングバイを再現)を経て、最後はアインシュタインの「時空の歪み」までを視覚的に体験できます。物理モデルについてですが、各天体は実際の半径・質量・J2000軌道要素を使用し、毎フレームケプラー方程式を解いています。エネルギードリフト(約1e-6%)をリアルタイム表示できるN体問題モード(シンプレクティック・リープフロッグ法)も搭載しており、計算の精度も確認可能です。唯一「嘘」をついているのはスケール感で、真のスケールだと何も見えないため、対数ベースの「視覚用スケール」と切り替えられるようにしました。物理演算自体は実データ(AU)に基づいています。技術スタックはTypeScript + Three.js + Viteで、完全にクライアントサイドで完結しており、オフラインでも動作します。惑星のテクスチャも地球以外はプロシージャル生成(バリューノイズ)です。ソースコードはこちら:https://github.com/qunabu/Gravity ご質問や物理モデル、解説に関するフィードバックは大歓迎です。自分なりの解釈で構築したモデルなので、現実の物理学と照らし合わせる良い機会になればと思っています。
これいいね。重力で地球ができる過程で、最初は北アメリカ大陸がめちゃくちゃ小さくて、質量が集まるにつれて北アメリカがどんどん大きくなっていく様子を見て笑っちゃったよ!
すごくいいし、かなり効率的だね。ニュートン力学の重力と相対論的重力をわざわざ分けて説明しているのはあまり好きじゃないな。教育コンテンツではよくある手法だけど、混乱を招きやすいから。例えば、あたかも別の理論であるかのような錯覚を与えるけど、実際にはニュートンの重力は速度が光速より十分に遅く(v << c)、重力場が弱い場合のアインシュタインの重力の極限値に過ぎないんだ(ニュートンの重力ポテンシャルに関するポアソン方程式を見てみるといい)。最後に、時空のレンダリングについてだけど、Alessandro Rousselの時空の可視化(https://www.youtube.com/watch?v=wrwgIjBUYVc )を参考にしてみるといいかも。これまで見た中で一番革新的で最高だよ。
アニメーションはすごく気に入ったんだけど、ステップ14は間違ってないかな?地球の地軸は歳差運動するけど、それはすごく長い時間をかけて起こることだよね。一日のスパンで見れば、地軸は実質的に固定されているはず。だからこそ「回転軸」と呼ばれているわけで、回転の基準となる不動の線なんだ。北極星が北極星であるのもそのためで、季節に関係なく回転軸が常にほぼ正確に北極星を指しているからだよ。北半球が夏の時に太陽の方へ傾いて日差しを強く受けるのは、軸が動いているからじゃなくて、太陽の周りを公転する過程で軸の相対的な位置が変わるからだよね。
皆さん、コメントとモデルや可視化の弱点を指摘してくれてありがとう。指摘された点を理解して、近いうちに修正してみるよ。
太陽の重力(赤い矢印)は常に地球を太陽の方へ真っ直ぐ引っ張っているのに、なぜ衝突しないのか?それは地球が秒速29.8kmで横向きにも動いているからだ。地球は常に太陽に向かって落ちているけれど、横向きの速度があるおかげで太陽の横を通り過ぎる。つまり、衝突し続けているようで、実は常に外れているんだ。破線は慣性だけで進んだ場合の経路を示しているけれど、重力がその直線的な軌道を曲げて閉じたループにしている。軌道とは、シンプルに言えば、落ち続けているけれど一度もぶつからない状態のことだ。
こういう話を読むといつも「幸運だなあ」って思うよ。もちろん生存者バイアスがあるから、別に驚くことじゃないけどね。でも、この現状が何によって変わり得るのかも気になるところだ。
現状が変わるとしたら、こんな感じかな:
- 太陽が軽くなる(地球が宇宙の彼方に弾き飛ばされる)
- 地球が加速する(地球が宇宙の彼方に弾き飛ばされる)
- 太陽が重くなる(地球が太陽に墜落する)
- 地球が減速する(地球が太陽に墜落する)
理論上は、巨大な星間物体が地球のすぐそばを通り過ぎて、宇宙空間か太陽の方へ弾き飛ばされる可能性もあるだろうね。
もっと厳密なものについて言えば、この機会にrebound[1]を紹介させてもらうよ。私たちの分野(惑星形成)のN体シミュレーションで使っているものだ。たぶん知っている人もいると思うけど。Pythonインターフェースがあるし、Cインターフェースもすごく使いやすくて、GLFWで可視化できるプリセットのサンプルもたくさんあるんだ。めちゃくちゃクールだよ!
[1]https://github.com/hannorein/rebound (https://github.com/hannorein/rebound)
惑星への「フォーカス」機能が少し正しく動作していないみたい。実際のサイズ感を取り入れたのはすごくいいと思うんだけど、フォーカスがうまく機能して、惑星が見えるまでズームインできたらもっと良かったな。あと、土星の環がそんなに速く揺れることはないと思うよ。
これは素晴らしいね!ステップ15で、数年前にすごく拡散された「渦巻き」のアニメーション[0]ではなく、3Dヘリックスの正確なバージョンを表示しているのがすごくいい。
これを天の川銀河、さらにはその先までスケールアップして、より長い時間スケールで全てが動く様子を見てみたいな。
[0]https://astrorhysy.blogspot.com/2015/03/and-yet-it-moves-qui... (https://astrorhysy.blogspot.com/2015/03/and-yet-it-moves-quite-lot-like-that.html)
すごくクールなプロジェクトだね。これを作っている間に学んだことで、あなた自身の重力や軌道の仕組みに対する理解が覆ったような「一番驚いたこと」って何だった?
ステップ5で、地球の速度が遠日点で秒速21.5km、近日点で秒速39kmになっているね。これ、実際にはそれぞれ秒速29.3kmと30.3kmあたりが正しいはずだよ。