URANOGRAPHIA AD MMXXVI

N - body Gravitational Simulation

Star Trail

ニュートン 万有引力 で 動 く 天体 多体 シミュレーション ・ 太陽系 / 二重星 / 銀河衝突 / 球状 星団 を 純 JS Canvas で

F = G · m₁ · m₂ / r²

DE NATVRA · 解 説

I

Quid sit — N 体 問題 と は

N 体 問題 (n-body problem) は、 3 個 以上 の 質点 が 万有引力 で 互い に 引き合う と き、 そ れ ぞ れ の 軌道 を 求める 古典 力学 の 問題 で す。 N = 2 (太陽 + 惑星 一個 等) は ケプラー 三 法則 で 楕円 軌道 と し て 解析的 に 解け ま す が、 N ≧ 3 で は 一般 に 解析解 が 存在 し ま せ ん。 し か し、 各 ステップ ご と に 全 ペア 間 の 力 を 計算 し て 速度 と 位置 を 更新 する 数値 積分 で 任意 精度 の 軌道 を 得 ら れ ま す。 本 ツール は こ の 直接 数値 計算 を 純 JS Canvas で 行 い ま す。

II

Methodus — 計算 手法

各 タイム ステップ で、 全 ペア (i, j) に 対 し 力 F_ij = G m_i m_j (x_j - x_i) / |r|³ を 計算 し、 i に は + 寄与、 j に は − 寄与 を 加算 (Newton 第 3 法則)。 ζ ペア 数 は N(N−1)/2 で、 N = 200 で 約 2 万、 N = 400 で 約 8 万 ペア。 軟化 ε を 距離 二乗 に 加 え る (r² → r² + ε²) こ と で、 二 体 が 極端 に 接近 し て 力 が 発散 す る 数値 不安定 を 防 ぎ ま す。 位置 更新 は シンプル な セミ implicit Euler (v += a·dt → x += v·dt) を 2 サブ ステップ 走 ら せ て 滑らか に 描画 し ま す。

III

Initia — 初期 配置 6 プリセット

① 太陽系 風 = 中央 巨大 主星 + 円軌道 速度 v = √(GM/r) を 持つ 惑星。 ② 二重星 = 共通 重心 周回 + 周辺 惑星。 ③ 銀河衝突 = 2 つ の 円盤 銀河 が ゆっくり 通過、 数千 フレーム で 衝突 / 通り抜け / 合体。 ④ ランダム 雲 = 自己 重力 で 凝集 し、 数百 フレーム 後 に 渦巻き / フィラメント 構造 が 自然 発生。 ⑤ 球状 星団 = 中央 ガウス 分布 + 等方 ランダム 速度、 ビリアル 平衡 近く で 安定。 ⑥ 衛星 系 = 巨大 惑星 + 月 4-8 + 内側 デブリ。 click で 任意 の 場所 に 質量 80 の 体 を 追加 で き、 既存 軌道 を かき乱せ ま す。

IV

Limites — 限界 と 注意

本 ツール の N-body は O(N²) 直接法 で、 N = 400 程度 が 60 fps の 上限 (端末 性能 に 依存)。 大規模 銀河 (N = 10⁵+) シミュ で は Barnes-Hut tree O(N log N) や Particle-Mesh、 専用 ソフト (Gadget / NEMO 等) が 必要。 ま た、 本 シミュ は 純 重力 の み を 扱 い、 流体力学 (ガス) / 磁場 / 相対論的 効果 / 衝突 散乱 は 考慮 し ま せ ん。 教育 ・ デモ ・ アート 用途 に 限定 し て く だ さ い。

「 Materiae omnes mutuo se attrahunt vi gravitatis. 」
─ 全 て の 物質 は 重力 で 互い に 引き合 う ─ Isaac Newton, Principia (1687)

QVAESTIONES · よ く あ る 問 い

Q1

なぜ 衝突 す る と 粒子 が 吹き 飛ぶ?

古典 N-body で は、 2 体 が ほぼ 同じ 座標 に 来 る と 距離 → 0 と な り 力 が 発散 (slingshot 効果)。 本 ツール は 軟化 ε を 距離 二乗 に 加 え て 「ε 以下 の 距離 は 同じ と み な す」 こ と で 数値 安定化 し て い ま す が、 ε を 小さ く する と 強烈 な ス リング ショット が 発生 し ま す。 リアル な 衝突 (合体 や 跳ね返り) を 扱 う に は、 別 途 衝突 判定 と 慣性 平均 が 必要 で す。

Q2

ink-tide 流体 シミュ と 何 が 違 う?

ink-tide は WebGL2 fragment shader で 流体 (Navier-Stokes) の 連続体 を シミュ し ま す。 StarTrail は Canvas 2D + CPU で 質点 (離散) を 万有引力 で シミュ し ま す。 連続体 (流体・ガス) と 離散 (天体・粒子) は 数学 / 計算 手法 が 全く 異 な り、 ど ち ら も シミュレーション の 主要 ジャンル。 ai-lab シミュ シリーズ で は こ の 二 軸 を 並 べ て い ま す。

Q3

astro-cast (太陽系 3D) と 何 が 違 う?

astro-cast は Three.js + 実 天体 データ で 太陽系 を 3D 表示 し ま す (固定 軌道)。 StarTrail は 任意 の 初期 配置 から 万有引力 で 動 か す 自由 シミュ で、 軌道 自体 が 計算 結果 で す。 ま た、 衝突 や 銀河 規模 の 集団 動力学 を 観察 で き る 点 が 別 軸 で す。

Q4

粒子 が 多 い と カクつ く

O(N²) 直接法 な の で、 N = 200 で 約 2 万 ペア、 N = 400 で 約 8 万 ペア の 計算 が 毎 フレーム 走 り ま す。 統合 GPU 端末 / モバイル で は 100-150 が 60 fps の 上限。 dt を 大 き く する と 滑らか に なり ま す が、 軌道 精度 が 落ち る ト レード オフ。 本格 的 な 高速 化 に は Barnes-Hut tree (O(N log N)) が 必要 で、 本 ツール の 範囲 外 で す。

Q5

PNG 保存 が 真 っ 黒 に な る

Canvas を `toDataURL` で 取得 す る 設計 で、 通常 は 軌跡 + ボディ が そ の ま ま 保存 さ れ ま す。 も し 黒画像 が 出 る 場合、 ブラウザ の 拡張機能 (アドブロック / 一部 セキュリティ 系) が canvas 出力 を 干渉 し て いる 可能性。 拡張 を 一時 無効 化 し て お 試し く だ さ い。

Q6

計算 デー タ は 保存 さ れ る?

ど こ に も 保存 さ れ ま せ ん。 粒子 状態 は ブラウザ の メモリ 上 だけ で 計算 さ れ、 サーバー に は 送信 さ れ ず、 ローカル スト レージ に も 残し ま せ ん。 タブ を 閉じれ ば シミュ は 完全 に 消え ま す。