マイコン宇宙講座-惑星の軌道要素計算

太陽系9惑星の軌道要素データをベースに指定した日付の軌道要素を求めます。今では8惑星ですが、当時は冥王星も含まれており、9惑星になっていました。2008年の国際天文学連合の総会で準惑星に格下げになり、太陽系惑星から外されてしまいました。ですが、今回は当時のままとし、9惑星の軌道要素を求めます。また、これ以降も位置計算や出没時刻計算においても冥王星を太陽系9惑星として扱って計算します。

惑星に限らず、すでに発見されている小惑星や彗星、衛星なども軌道要素を持ち、軌道要素から指定した日付の位置を計算することができます。惑星の軌道要素は離心率(e)、平均近点離角(m)、近日点引数(p)、昇交点黄経(n)、軌道傾斜角(i)、軌道長半径(a)からなります。サブルーチンで使用しているrdは惑星の半径を表しています。

サブルーチン mean_elements

※サブルーチンはlib.pyに記述してください。

# 9惑星の軌道要素
def mean_elements(pn, t1, t2):
    # 水星
    if pn == 1:
        e = 0.20562441 + 2.042e-5 * t1 - 3e-8 * t2
        m = -0.729180963 + 2608.731797 * t1 + 8.242e-8 * t2
        p = 0.505094601 + 4.98049095e-3 * t1 + 1.33324e-6 * t2
        n = 0.833197496 - 2.1919881e-3 * t1 - 1.57564e-6 * t2
        i = 0.122238982 - 1.0510761e-4 * t1 + 1.454e-8 * t2
        a = 0.3870986011
        rd = 2439.0

    # 金星
    if pn == 2:
        e = 6.79676e-3 - 4.773e-5 * t1 + 9e-8 * t2
        m = -0.848503209 + 1021.306597 * t1 + 2.259232e-5 * t2
        p = 0.95357925 + 4.99862298e-3 * t1 - 2.077911e-5 * t2
        n = 1.330454065 - 4.85584535e-3 * t1 - 1.78896e-6 * t2
        i = 0.059237299 - 1.798659e-5 * t1 - 5.6723e-7 * t2
        a = 0.7233316286
        rd = 6052.0

    # 地球
    if pn == 3:
        e = 0.01673012 - 4.192e-5 * t1 - 1.3e-7 * t2
        m = -0.036149841 + 628.288592 * t1 - 2.86525e-6 * t2
        p = -1.262568078 + 9.7864e-3 * t1 + 2.55497e-6 * t2
        n = 3.044140013 - 4.21225519e-3 * t1 + 2.0847e-7 * t2
        i = 2.2713521e-4 * t1 - 2.618e-7 * t2
        a = 1.00000023
        rd = 695989.0

    # 火星
    if pn == 4:
        e = 0.09335426 + 9.056e-5 * t1 - 7e-8 * t2
        m = -3.326348457 + 334.0465218 * t1 + 3.08342e-6 * t2
        p = 4.991059739 + 0.01288077229 * t1 + 7.98973e-6 * t2
        n = 0.858200646 - 5.14920611e-3 * t1 - 1.107314e-5 * t2
        i = 0.032288058 - 1.4539562e-4 * t1 - 3.9755e-7 * t2
        a = 1.523688174
        rd = 3397.0

    # 木星
    if pn == 5:
        e = 0.04827062 + 4.7756e-5 * t1 + 2.2676e-5 * t2
        m = 5.28677165 + 52.9684478 * t1 + 9.996858e-5 * t2
        p = -1.50945736 - 1.7239975e-4 * t1 + 1.885925e-5 * t2
        n = 1.741507757 + 3.204618e-5 * t1 + 9.40539e-6 * t2
        i = 0.0228307 + 7.8055e-7 * t1 + 3.6991e-7 * t2
        a = 5.202833481
        rd = 71398.0

    # 土星
    if pn == 6:
        e = 0.05604508 - 2.5595e-5 * t1 - 1.6172e-5 * t2
        m = 1.165262433 + 21.328205912 * t1 - 5.4580324e-4 * t2
        p = -0.38321152 + 4.2707237e-4 * t1 + 2.6548394e-4 * t2
        n = 1.980742073 + 3.005845e-5 * t1 - 5.657776e-5 * t2
        i = 0.043422822 + 8.69756e-6 * t1 + 3.56623e-6 * t2
        a = 9.538762055
        rd = 60000.0

    # 天王星
    if pn == 7:
        e = 0.04613734 - 4.8118e-5 * t1 + 1.5396e-5 * t2
        m = -1.273611261 + 7.479637598 * t1 + 8.2743151e-4 * t2
        p = 1.716582467 - 2.37485982e-3 * t1 - 8.1424458e-4 * t2
        n = 1.28641873 + 6.429559e-4 * t1 + 3.97547e-6 * t2
        i = 0.013501673 - 1.72933e-5 * t1 - 8.7412e-7 * t2
        a = 19.19139128
        rd = 25400.0

    # 海王星
    if pn == 8:
        e = 9.71449e-3 + 1.095407e-3 * t1 + 3.62034e-4 * t2
        m = 2.724754505 + 3.994465294 * t1 + 0.048355704 * t2
        p = -1.62194737 - 0.18123685121 * t1 - 0.048352097 * t2
        n = 2.290559396 + 4.467073e-5 * t1 - 1.844231e-5 * t2
        i = 0.03096505 - 3.001e-6 * t1 + 3.6216e-7 * t2
        a = 30.06106906
        rd = 24300.0

    # 冥王星
    if pn == 9:
        e = 0.24824802 + 4.97082e-4 * t1 + 5.63208e-4 * t2
        m = -0.999328454 + 2.553487672 * t1 + 6.86515565e-3 * t2
        p = 1.977072713 - 0.01828324506 * t1 - 6.76126008e-3 * t2
        n = 1.913508742 + 1.027805e-5 * t1 + 5.6820159e-5 * t2
        i = 0.29929226 + 1.5198909e-04 * t1 + 5.269925e-5 * t2
        a = 39.52940243
        rd = 1500.0

    return e, m, p, n, i, a, rd

メインルーチン m27.py

# m27.py
# マイコン宇宙講座
# 2-7 惑星の軌道要素計算プログラム
import math
import lib


print()
std = input('DATE AND TIME(JST) ? ')
dy, dt = std.split(',')
dy = float(dy)
dt = float(dt)

jd, yy, mm, dd, hh, ms, ss = lib.mjd(dy, dt)

t1 = jd - 33281.92334
t1 = t1 * (2.737909288e-5 + 1.260132857e-17 * t1)
t2 = t1 * t1

print()
print('DATE = %4d %2d %2d   TIME = %2d h %2d m %2.1f s (JST)' % (yy, mm, dd, hh, ms, ss))
print('      MJD = %10.4f ET' % (lib.fnb(jd)))
print()
print('PLANET     Mo         Peri.      Node        Inc.     e')
print('             。         。         。         。')

for j in range(1, 10):
    pn = j
    e, m, p, n, i, a, rd = lib.mean_elements(pn, t1, t2)

    m = 2.0 * math.pi * (m / (2.0 * math.pi) - int(m / (2.0 * math.pi)))
    m *= lib.K[3]
    p *= lib.K[3]
    if p < 0:
        p += 360.0
    n *= lib.K[3]
    i *= lib.K[3]

    print('%-7s  %10.5f %10.5f %10.5f %10.5f %10.7f' % (lib.PL[pn], m, p, n, i, e))

print()

例題 2000年1月1日9時00分00秒(JST)における各惑星の軌道要素を求めてみよう。

DATE AND TIME(JST) ? 20000101,090000

DATE = 2000  1  1   TIME =  9 h  0 m 0.0 s (JST)
      MJD = 51544.0000 ET

PLANET     Mo         Peri.      Node        Inc.     e
             。         。         。         。
MERCURY   172.74700   29.08249   47.67588    7.00077  0.2056346
VENUS      49.61064   54.77897   76.09027    3.39352  0.0067729
EARTH     357.03855  287.94057  174.29571    0.00650  0.0167091
MARS       19.12497  286.33578   49.02360    1.84580  0.0933995
JUPITER    20.34265  273.50980   99.78210    1.30813  0.0483002
SATURN    317.76379  338.05963  113.48821    2.48824  0.0560282
URANUS    141.31475   98.27323   73.72484    0.77308  0.0461171
NEPTUNE   271.24237  261.18463  131.24040    1.77409  0.0103527
PLUTO      15.99293  112.65730  109.63708   17.15329  0.2486374