見出し画像

日経ソフトウエア特集「Pythonでプラネタリウムを作る」を執筆しました!

本記事は著者が作成したものです。日経ソフトウエア様のご承諾をいただき、著者の責任において作成・公開しています。

冬の夜空は特に美しく、オリオン座や冬の大三角など、明るい星が澄んだ空に輝いています。私は夜空を見上げるのが好きで、何億年前の光が今、地球に届いていると知ったとき、その広大さに圧倒されました。そう考えると、日々の雑事などはほんの些細なことのように思えてきます。

日経ソフトウエア特集の執筆

今回、私は「日経ソフトウエア 2025年3月号」の特集として、「Pythonでプラネタリウムを作る」を執筆しました。この特集では、リアルな恒星情報を活用し、Pythonを使ってデジタルプラネタリウムを作成する方法を解説しています。

この特集の想定読者は、プログラミングに興味があり、Pythonを学びながら天文学の知識を深めたい人や、3Dライブラリを活用して視覚的なシミュレーションを作りたい人です。特に、学校でのプログラミング、天文学などの教育現場で活用していただきたいと考えて、心を込めて執筆しました。

本記事では、特集の概要を簡単に紹介しつつ、「地球の自転による星空の運行」と「地球の公転による星座の変化」という2つの重要なポイントについて詳しく説明していきます。PythonとPanda3Dを使って、「星空をより深く理解する」ことを目指しましょう。

特集の紹介

日経ソフトウエアの特集は、PythonとPanda3Dを使ってデジタルプラネタリウムを作成するための5つのパートで構成されています。それぞれのパートで、プラネタリウムの基本概念から、実際に星空を再現する方法までを段階的に学んでいきます。

Part 1:プラネタリウムの基礎知識

まず、プラネタリウムを構築する上で欠かせない基本的な知識を学びます。天球座標系、地平座標系、恒星の位置を指定する方法など、天文学の基礎を理解することで、後のプログラム作成をスムーズに進められるようになります。

Part 2:3D空間の構築 – Panda3D入門

 地球と座標軸

Pythonの3D描画ライブラリ Panda3D を使い、3D空間を作成します。最初に、地球を表す青い球体と、地球を中心とした座標軸を表示することで、Panda3Dの基本的な使い方を学びます。このパートで、3Dシミュレーションを作るための基礎を身につけます。

Part 3:天球と地平線の可視化

天球と地平線

Part 2で作成した3D空間をさらに発展させ、天球と地平線をプログラムで描画します。これにより、星の位置を表示するための基盤が完成し、実際のプラネタリウムに近い表現ができるようになります。

Part 4:星のデータ – ヒッパルコス星表の活用

プラネタリウムには、実際の星の位置データが必要です。このパートでは、ヒッパルコス星表(ESAが作成した恒星カタログ)について学び、データの構造やどのように活用するかを解説します。

Part 5:プラネタリウムの完成

デジタルプラネタリウムの完成

ダウンロードしたヒッパルコス星表のデータをPanda3Dで可視化し、実際の星空を再現します。さらに、天球を回転させることで、特定の日付や時刻の星空を表示できるプラネタリウムを完成させます。このパートを終えると、Pythonを使った本格的なプラネタリウムシミュレーションが動作するようになります。

日経ソフトウエア特集では、この5つのパートを通じて、PythonとPanda3Dを活用しながら、天文学の知識を深め、プラネタリウムを自作する過程を学ぶことができます。特集に興味を持たれた方は、ぜひ書店等で手にとってみてください!

特集紹介動画を公開

特集の紹介動画を作成しましたので、どうぞご覧ください。

プラネタリウムアプリの基本操作

本記事では、プラネタリウムアプリの基本操作について詳しく解説します。記事で紹介する操作を実際に試してみたい方は、『日経ソフトウエア 2025年3月号』をご購入の上、アプリを完成させた後に本記事の続きをお読みください。

再現日時の設定


app = Planetarium(2025, 2, 20, 0)

初めに、プラネタリウムの再現日時を指定します。main.pyを開いて、一番下のPlanetariumクラスのインスタンス化のコードを確認します。

4つの引数が (year, month, day, hour) を意味するので、希望の再現日時を入力してください。上のコードでは「2025年2月20日0時」を指定しています。

アプリの起動(観測者視点)

日時が指定できたら、プラネタリウムを実行してみましょう。PowerShellなどのターミナルを開いて、cdコマンドでプロジェクトのルート(planetarium)に移動します。「python main.py」を実行すると、プラネタリウムが起動します。

アプリを起動する(観測者視点)

アプリが起動しました。この画面は、通常のプラネタリウムの視点である「観測者視点」の星空をシミュレーションしています。矢印キーで視点を上下左右に動かせます。マウスホイールでカメラの視角を調整します。そして、「J」「K」キーで時間を増減できます。連打すると、1時間ずつ、長押しは1日ずつ、再現日時を変更できます。昼になると画面の背景色は「水色」に、夜になると「黒」に変更されます。

観測者視点から外部視点へ変更

次に、本アプリケーションの最大の特徴である「外部視点」への変更を説明します。観測者視点と外部視点を行き来するには、「C」キーを押してください。

外部視点からプラネタリウムを観察する

外部視点に変更されました。この画面はプラネタリウムの天球の外側にカメラを移動して、外部からプラネタリウムを観察している視点になります。

この外部視点では、「地球」は画面中心の小さい青い球体で示されています。観測者は地球上に配置された緑の平面の中心に立って空を眺めていることになります。この地平面は、地球の自転軸に対して35度の傾きがあるため、日本のような中緯度地域での星の見え方をシミュレーションできます。

次は、天球(ドーム)を見てみましょう。天球は地球を中心にした巨大な球体であり、プラネタリウムでは、この球体の内側に星空を投影します。

天球上の大きい黄色の球体が「太陽」です。この太陽を基準に、時間(0時から24時)が決定されます。天球上の小さい点が「恒星」を表します。本来、恒星は天球のより遠方の宇宙空間に位置していますが、プラネタリウムでは仮想的な位置として、天球上に張り付いていると考えます。

この外部視点はアプリを開発する際にデバッグのために使用されますが、星空の運行を理解するのにも役立ちます。次は、この外部視点を使って、星空の動きを検証していきます。

星の運行をシミュレーションする

夜空に輝く星々は地球の運動によって刻々と変化し、一定の法則に従って運行しています。本記事では、特集では誌面の都合上詳しく説明できなかった 「地球の自転による星空の運行」 と 「地球の公転による星座の変化」 について、補足説明を加えながらシミュレーション方法を紹介します。

地球の自転による星空の運行

地球は西から東へ回転しており、この自転によって、星は東から昇り、西へ沈んでいくように見えます。そして、地平線の下にある太陽が昇ると昼になり、沈むと夜になります。

  1. 地球は1日で1回転(約24時間で360度回転)します。

  2. 星は1時間で約15度動いて見えます。

  3. 北極星のように、天の北極に近い星はほとんど動かず、その周囲の星は円を描くように動きます(周極星)。

  4. 地平座標系において、太陽が地平面の上にあると「昼」、下にあると「夜」 になります。

アプリで自転による星の動きをシミュレーション

プラネタリウムアプリを使うと、地球の自転による星の動きをプログラムで再現できます。

2月20日午前6時(夜明け前)

上の図は、アプリを起動してから 「K」キーを6回押した状態 です。現在の時刻は 2月20日午前6時、もうすぐ夜明けを迎える時間帯です。

「K」キーを押すと、緑の平面(地平面)が15度ずつ回転 します。これは地球の自転を表しており、観測者から見た星の動きがどのように変化するかを視覚化しています。

緑の平面(地平面)は、地球の自転とともに35度傾いた状態で回転しています。一方、天球上の恒星は動きません。しかし、地球の表面にいる観測者の視点では、地平面が動くことで星が自転の逆方向に移動するように見えます。これが、星が東から昇り西へ沈む理由です。

現在、右下に見える太陽は、まだ地平面のすぐ下に位置しています。ここでもう一度「K」キーを押すと時刻が午前7時になり、太陽が昇って昼になります。

2月20日午前7時(日出)

上の図は、太陽が昇り、昼になった状態を示しています。背景色が水色に変化し、日中の空を表しています。

ここで重要なポイントは、太陽が昇ると空に輝いていた星は見えなくなります。しかし、星が消えたわけではなく、太陽の強い光にかき消されているだけです。実際には、夜に見えていた星も昼間の空に存在しており、望遠鏡を使えば明るい星は昼間でも観測することができます。

以上で、地球の自転による星空の動きの説明を終わります。次は、地球の公転による星座の変化を検証しましょう。

地球の公転による星座の変化

地球は自転するだけでなく、太陽の周りを 1年かけて公転 しています。この公転運動のため、天球上の太陽の位置は1年かけて黄道上を1周します。その結果、夜空に見える星座は季節ごとに異なります。

  1. 地球の公転周期は約365日

  2. 地球の公転運動のため、太陽は毎日約1度ずつ黄道上を移動する

  3. 太陽の位置により、昼と夜の範囲が変わる

  4. 春・夏・秋・冬の星座が変化する

例えば、冬には「オリオン座」がよく見えますが、夏には「さそり座」がよく見えます。これは、地球の公転によって、夜に見える星の方向が変わるためです。

アプリで公転による星座の変化をシミュレーション

プラネタリウムアプリを使用すると、地球の公転による星座の変化をシミュレーション できます。ここでは、夏至の日(6月21日) と 冬至の日(12月22日) の星空を比較します。

夏至の日(6月21日)の星空

初めに、夏(夏至の日)の午前0時の星空を観察します。Planetariumクラスのインスタンス化の引数を (2025, 6, 21, 0) にして、アプリを起動します。

夏の夜空の南に「さそり座」が位置している

アプリを起動したら、観測者視点のまま矢印キーでカメラを南に向けます。
すると、ほぼ南の地表近くに「さそり座」が目立って配置されています。この状態で、Cキーを押して外部視点に移動します。

太陽の反対側のさそり座が見える

上の図は、地球の自転軸(天球座標系の「天の北極」)方向から天球を見たもの です。このとき、太陽は画面の上部 にあるため、画面の下側180度(赤い弧線) が見えています。

  • 「さそり座」は太陽の反対側にあるため、夜空で観測可能

  • 「オリオン座」は地平面の下にあるため、見ることができない

冬至の日(12月22日)の星空

次に、冬(冬至の日)の星空を観察します。Planetariumクラスのインスタンス化の引数を (2025, 12, 22, 0) にして、アプリを起動します。

冬の夜空の南に「オリオン座」が位置している

アプリを起動したら、観測者視点のまま矢印キーでカメラを南に向けます。
すると、ほぼ南の高度75度付近に「オリオン座」 が目立って配置されています。この状態で、Cキーを押して外部視点に移動します。

太陽の反対側のオリオン座が見える

上の図は、地球の自転軸(天球座標系の「天の北極」)方向から天球を見たもの です。このとき、太陽は画面の下部 にあるため、画面の上側180度(赤い弧線) が見えています。

  • 「オリオン座」は太陽の反対側にあるため、夜空で観測可能

  • 「さそり座」は地平面の下にあるため、見ることができない

結論

季節によって見える星座が変わる理由は、地球の公転による太陽の天球上の位置変化にある。そのため、夜に見える星の範囲が変化し、目立つ星座も季節ごとに異なって見えるのです。

これこそが、本記事の核心はこの点にあります。

おわりに

本記事では、地球の公転による星座の変化について、プラネタリウムアプリを用いたシミュレーションを通じて詳しく解説しました。

  • 地球の公転によって、太陽の位置が天球上を移動すること

  • その結果、夜に見える星座が季節ごとに異なること

  • 夏至の日には「さそり座」が、冬至の日には「オリオン座」が夜空に輝くこと

これらの現象を、PythonとPanda3Dを活用して可視化することで、天文学の基礎をプログラムを通じて深く理解できることを示しました。

星空の変化は、単なる知識として学ぶだけでなく、実際にシミュレーションを作成し、視覚的に確かめることでより直感的に理解できるようになります。夜空を見上げるとき、星座がどのように配置され、なぜその季節に見えているのかを知ることで、星空観察がより楽しく、奥深い体験になるでしょう。

最後に、本記事で紹介した手法を応用すれば、異なる緯度での星の見え方や、未来の夜空のシミュレーション など、さらなる発展も可能です。興味のある方はぜひ、自分の手でプログラムを改良し、自分だけのプラネタリウムを作ってみてください!

いいなと思ったら応援しよう!