← Blog
PhysicsSimulationCanvas APIMath

N体問題をブラウザで — 万有引力シミュレーションの実装

7 分で読める

このトピックを深掘りする

クリエイティブコーディング

ブラウザでの数学的シミュレーション・自然現象の可視化・生成アートの実装技法

全12本中 6 本目。

このトピックの記事一覧

シリーズ全体の流れを見ながら、次に読む記事へ進めます。 初めての方は /start →

よくある質問

Q. N体問題のシミュレーションはなぜ不安定になりやすい?
重力は距離が近いほど急激に大きくなるため、時間刻みが粗いと発散しやすくなります。近距離での加速度の上限(ソフトニング)や、固定タイムステップ、半陰的な積分(例: symplectic Euler)などで安定性を上げられます。
Q. O(n²) の重力計算はどこまで実用的?
粒子数 n が増えるとペア計算が急増します。ブラウザでは 60fps を維持するなら、まずは n を抑えつつベクトル演算を最適化し、必要なら Barnes–Hut などの近似(O(n log n))を検討するのが現実的です。
Q. なぜ積分法が軌道の見た目に大きく影響する?
位置・速度の更新順序や数値誤差がエネルギーの増減として蓄積し、軌道が縮んだり膨らんだりします。簡易な Euler 法は誤差が増えやすいので、同じ計算量でもより安定な手法を選ぶと見た目が改善します。
Q. マウス追従の重力源はどう実装する?
ポインタ座標をワールド座標に変換し、各粒子に対して「重力源→粒子」の方向ベクトルを正規化して加速度に加えます。距離が 0 に近いと発散するので、最小距離を設けるかソフトニング項を足すのが安全です。