"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

空の星までの距離を計算するプログラムをPythonで作ってみよう。

空の星までの距離の計算方法を調べて、Python で計算するプログラムを書いてみました・・という話題です。

f:id:arakan_no_boku:20200221194508p:plain

 

星までの距離

 

地球から星までの距離の情報はそこかしこにあります。

ja.wikipedia.org

金星は「3962万km」。

太陽は「 1億4709万km」

木製は「7億4054万km」

などなど。

今まで、なんとなく数字だけ見てたのですが、よく考えてみれば結構不思議です。

実際にいってもいないのに、どうやって距離を測るのか?

疑問に思ったら調べてみることですね。

 

調べてみた

 

Googleで「星までの距離 測り方」と検索すると、いくつか候補がでてきます。

www.nao.ac.jp

とか。

spacemgz-telstar.com

とか。

どちらにも共通している図がこれです。

f:id:arakan_no_boku:20200221195814p:plain

三角比ですね。

昔、数学の時間に木の高さを測るという問題で、こんな図をよく見ました。

f:id:arakan_no_boku:20200221200244p:plain

これと同じような方法で、宇宙の星までの距離を測っているというのは、なかなか面白いなと思います。

 

せっかくだから計算してみよう

 

まず。

年周視差というのを知らなければ始まりません。

これは度分秒の単位であらわされてます。

これがなかなか見つけられず、探し回って見つけたのが、こちらの表です。

f:id:arakan_no_boku:20200221230544p:plain

引用すると

  • ケンタウルス座アルファ星( α Cen) :年周視差「0.742秒」距離「4.39光年」
  • シリウス (α CMa) :年周視差「0.379秒」:距離「8.60光年」
  • ベガ (α Lyr): 年周視差「0.123秒」:距離「26光年」
  • アルタイル (α Aql): 年周視差「0.194秒」:距離「17光年」
  • 北極星 (α UMi) :年周視差「0.00756秒」:距離「430光年」

ですね。

これを使って、計算式があってるかの答え合わせを兼ねてやってみます。

とはいえ。

手計算できるものでもなく、EXCELでやってもいいけど、いまいち面白くないので、Pythonで星までの距離を求めるプログラムでも書いてみましょうかね。

 

年周視差から距離を光年単位で計算する

 

例によって、ソースからです。

import math


class DistanceToStar:
    def __init__(self, annual_parallax):
        # 年周視差
        self.annual_parallax = annual_parallax
        # 1度(秒換算)
        self.one_degrees = 3600
        # 太陽との距離(KM)
        self.distance_to_sun_km = 149600000.0
        # 1光年の距離(KM)
        self.one_light_year_km = 9460730472580.8

    def calc(self):
        # 年周視差(秒)を角度に換算する
        dig = self.annual_parallax / self.one_degrees
        # 角度をラジアンにして、Sinを計算する
        sin_degrees = math.sin(math.radians(dig))
        # 太陽までの距離をSINでわって光年の単位に換算する
        return (self.distance_to_sun_km / sin_degrees) / self.one_light_year_km

補足します。

まず、年周視差が「度分秒」単位なので、「角度」に変換してやる必要があります。

度分秒から度への変換をするサイトがあったので、計算式を見てみると、1度=3600秒として、年周視差を3600でわってやれば、角度に変換ができるようです。

keisan.casio.jp

ということで、

dig = self.annual_parallax / self.one_degrees

 の部分でそれをやってます。

次に、その角度に対する「Sin」を計算します。

math.sinは引数がラジアンなので。

sin_degrees = math.sin(math.radians(dig))

 ですね。

地球は太陽の周りを公転しているので、三角比で計算するときの1辺は太陽までの距離になります。

ということで。

太陽までの距離を、上記のSin値でわってやれば、対象の星までの距離(KM単位)がでるので、それをさらに「1光年」のKM数でわって、光年単位にする。

self.distance_to_sun_km / sin_degrees) / self.one_light_year_km

というわけです。

 

早速計算してみます

 

上記のクラスを使って、計算してみました。

d1 = DistanceToStar(0.742)
print(d1.calc())
d2 = DistanceToStar(0.379)
print(d2.calc())
d3 = DistanceToStar(0.123)
print(d3.calc())
d4 = DistanceToStar(0.194)
print(d4.calc())
d5 = DistanceToStar(0.00756)
print(d5.calc())

その結果がこちらです。 

4.395701078995025
8.605831663876279
26.517156102499737
16.812423714472963
431.429920715248

単位はすべて光年です。

こちらの表の5つを表の順番通りに年周視差をあてはめてみましたが、おおよそ、あってますね。

f:id:arakan_no_boku:20200221230544p:plain

良い感じじゃないでしょうか。

今回はこんなところで。

ではでは。