0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

小説『三体』シリーズに影響を受けて、三体問題のシミュレーションを作ってみた

0
Last updated at Posted at 2026-09-04

小説のネタバレを過分に含みます






























前書き

最近『三体』シリーズを買って読破しました。
とても面白かったです!個人的には、第一部・第二部が一番面白かった :thumbsup:

その中でも特に、第一部のVRゲームの世界観にとても感銘を受けました。
あれは本当のところ、三体人の住んでいる世界をシミュレーションで再現したものでした。
そして彼らの星系には、なんと3つの恒星があり、それらは複雑な軌道で動きます。
予測不可能な「乱期」の影響で、多くの文明が滅亡に追いやられた・・・。

さて、Qiitaの記事でなぜそんなことを書いているのかというと、プログラマー目線として、「これを再現してみたら面白そうだな〜」と思ったからです。
三体問題は、(おそらく今のところ)解がありませんが、シミュレーションならばステップを進めてその軌道を観察できます。
というわけで、そのシミュレーションを作ってみました。ようやく本題ですね。

完成作品

image.png

10通りの初期配置があり、数字の1~9, 0で切り替えられます。
最初の5つはいい感じの配置、後の5つはラグランジュ点の配置(安定する配置)です。
スペースで加速、その速度は上下キーで調節できます。

なかなか面白い動きなので、ぜひ触ってみてください!

詳細

Rust をあまり触ったことがなかったので、折角ということで触ってみました。
Wasm & GitHub Pages でデプロイしています。あとは Codex を使いました。

恒星は質点とみなし、万有引力をステップごとに加えています。
惑星は、質量差が無視できるほど小さいので、恒星の万有引力に引っ張られるだけです。
自転は一旦実装せず、360度のパノラマ映像として見せるようにしました。
(大気の明るさが均一なのは目を瞑ってください。。。)

pub(crate) fn calculate_gravity_norm(star1: &Star, star2: &Star) -> f64 {
    let distance_squared = (star2.position - star1.position).norm_squared();
    G * star1.mass * star2.mass / distance_squared
}

『三体』の設定だと、恒星の大気層が分厚いため、遠くから見ると小さな「飛星」のように見えます。
しかし、惑星との距離が近づくと大気層が光を散乱するため、急激に恒星の大きさが増大するように観測されます。
(間違っていたらごめんなさいm(_ _)m)
この設定も入れて、遠いところでは小さな点として、一定距離より近づくと急激に大きく見せ、地表から見た画面も、恒星の発光を考慮して大気を明るくしています。

飛星状態 接近した状態

一応地表がどのくらいの温度になっているかを、棒グラフで見せています。

image.png

事前調査した感じ、星系を俯瞰したシミュレーションはいくつかあったのですが、実際に地表の観測者からどう見えるかというのは、あまりシミュレーションするものが無かったようでしたので、これを機に作ってみました :rocket:

締め

実際に動かしてみると分かるのですが、あまりにも動きが変則的すぎて、この状況で文明が発展するのは無理だろ!って思いました。
三体人たちが地球に憧れる気持ちがよくわかりましたね。

また、厳密と言えるまでは突き詰めていないので、それなりの計算誤差が出ています。
この点に関してもご容赦頂いて、エンタメの一環としてお楽しみください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?