天球上の巡回セールスマン問題

Python

大晦日にも撮影したけれど、UnistellarのOdysseyで撮影する際に、東の空を撮影して、西の空を撮影して、また東の空に戻って、となると、いくら自動で天体を導入してくれるとはいえ、鏡筒の移動に時間がかかります。もちろん、それだけモーターを稼働させることにもなるので、バッテリーの消費も大きいと。

Unistellarのアプリに、天体の観測順序を指定して順番に撮影してくれれば助かるけども、そんなものは無いので、撮影したい天体のリストをテキストファイルで用意して、撮影場所・日時を指定すれば、西の水平線に最も近い天体から最短の経路となる撮影順を計算し、その結果を表示・画像に出力するPythonを書きました。

例えば、仁科峠の緯度・経度と高度、撮影日時を与えると、

./sphere_tsp.py bodies.txt --lat 34.863 --lon 138.843 --height 1000 --date 2025-01-03 --time 18:00:00 --tz +9

以下のように撮影順を表示し、

Location: Lat: 34.863, Lon: 138.843, 1000.0m
Observation Date/Time: 2025-01-03 18:00:00 +9

Optimal Order of Celestial Bodies:
Name: NGC6922, RA: 307.47, Dec:-2.19, Altitude:15.60,  Azimuth:256.05, Observable: True
Name: M71,     RA: 298.44, Dec:18.78, Altitude:19.95,  Azimuth:279.55, Observable: True
Name: NGC7023, RA: 315.40, Dec:68.16, Altitude:42.49,  Azimuth:333.78, Observable: True
Name: M81,     RA: 148.89, Dec:69.07, Altitude:19.57,  Azimuth:16.37,  Observable: True
Name: NGC2281, RA: 102.09, Dec:41.06, Altitude:25.11,  Azimuth:56.14,  Observable: True
Name: M33,     RA: 23.46,  Dec:30.66, Altitude:83.03,  Azimuth:123.88, Observable: True
Name: M31,     RA: 10.68,  Dec:41.27, Altitude:81.91,  Azimuth:325.79, Observable: True
Name: NGC281,  RA: 13.10,  Dec:56.56, Altitude:68.02,  Azimuth:354.70, Observable: True

画像も生成します。

GitHubに放流してあるので、興味のある方は是非。

タイトルとURLをコピーしました