マイコン宇宙講座-太陽系天体の高度・方位角計算
惑星の位置は赤経・赤緯以外にも高度と方位角で表すことができます。赤経・赤緯から高度・方位角を求めます。計算に必要なものは、赤経・赤緯および恒星時、緯度です。計算式については、「天体の位置計算 増補版」29頁の式2−7を使用します。実際の計算のしかたを同書30頁に掲載されていますので、電卓なりプログラムを組むなりして計算してみるとよいでしょう。高度・方位角の計算はサブルーチン altitude_directionで行います。
サブルーチン altitude_direction
※サブルーチンはlib.pyに記述してください。
# KODO_HOUI
def altitude_direction(jd, lg, la, ra, dc):
r1 = jd
r2 = lg
r3 = siderealtime_date(r1, r2)
s1 = r3 - ra
cc = -math.sin(dc) * math.cos(la) + math.cos(dc) * math.sin(la) * math.cos(s1)
ss = math.cos(dc) * math.sin(s1)
tt = quadrant(ss, cc)
al = tt
cc = cc / math.cos(al)
ss = math.sin(dc) * math.sin(la) + math.cos(dc) * math.cos(la) * math.cos(s1)
hi = math.atan(ss / cc)
return al, hi
メインルーチン m311.py
# m311.py
# マイコン宇宙講座
# 3-11 太陽系天体の高度・方位角計算プログラム
import math
import lib
M2PI = 2.0 * math.pi
lg = 139.745 / lib.K[3]
la = 35.654 / lib.K[3]
obs = '東京'
lib.PL[3] = 'Sun'
x = [[0 for i in range(10)] for j in range(4)]
f = [0, 0, 0, 0]
q = [0, 0, 0, 0]
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)
print()
print(' Date= %5d 年 %2d 月 %2d 日 Time= %2d 時 %2d 分 %2.1f 秒' % (yy, mm, dd, hh, ms, ss))
print(' MJD=%12.2f ET Place=%-s' % (jd, obs))
print(' Planets R.A. (Date) Decl. 方位 高度 Distance')
print(' ------------------------------------------(南より西)----------------------')
print(' h m 。 , 。 。 AU')
t1 = jd - 33281.92334
t1 = t1 * (2.737909288e-5 + 1.260132857e-17 * t1)
t2 = t1 * t1
ty = yy + (mm - 1) / 12.0 + dd / 365.0
if yy < 0:
ty = yy - (1 - ((mm - 1) / 12.0 + dd / 365.0))
for pn in range(1, 10):
e, m, p, n, i, a, rd = lib.mean_elements(pn, t1, t2)
f, q = lib.eph_const(p, n, i, lib.K)
ec = e
mo = M2PI * (m / (M2PI) - int(m / (M2PI)))
ss, cc, ff = lib.kepler(mo, ec)
b = a * math.sqrt(1.0 - e * e)
for n in range(1, 4):
f[n] = a * f[n]
q[n] = b * q[n]
# 惑星座標の計算
for n in range(1, 4):
x[n][pn] = ff * f[n] + ss * q[n]
for n in range(1, 4):
x[n][3] = - (x[n][3])
for pn in range(1, 10):
if pn != 3:
for n in range(1, 4):
x[n][pn] = x[n][pn] + x[n][3]
# 惑星の赤経・赤緯の計算
for pn in range(1, 10):
cc = x[1][pn]
ss = x[2][pn]
tt = lib.quadrant(ss, cc)
ra = tt
cc = x[1][pn] / math.cos(ra)
ss = x[3][pn]
dc = math.atan(ss / cc)
r1 = ra
d1 = dc
ra1, dc1 = lib.precession(r1, d1, ty, 0, 0, lib.K)
ra = ra1
dc = dc1
al, hi = lib.altitude_direction(jd, lg, la, ra, dc)
ra *= lib.K[3] / 15.0
dc *= lib.K[3]
ds = math.sqrt(x[1][pn]**2 + x[2][pn]**2 + x[3][pn]**2)
rh = int(ra)
rm = 60.0 * (ra - rh)
dh = int(abs(dc))
dm = 60.0 * (abs(dc) - dh)
dh = lib.sgn(dc) * dh
al *= lib.K[3]
hi *= lib.K[3]
if hi < 0:
# hind = '[Can not see]'
hind = '---.- ---.-'
print(' %-7s %02d %05.2f %+03d %04.1f %-15s %8.5f' % (lib.PL[pn], rh, rm, dh, dm, hind, ds))
else:
print(' %-7s %02d %05.2f %+03d %04.1f %5.1f %5.1f %8.5f' % (lib.PL[pn], rh, rm, dh, dm, al, hi, ds))
print(' --------------------------------------------------------------------------')
print()
例題 1981年1月1日6時30分における惑星の高度と方位角を求めてみよう。
DATE AND TIME(JST) ? 19810101,063000 Date= 1981 年 1 月 1 日 Time= 6 時 30 分 0.0 秒 MJD= 44604.90 ET Place=東京 Planets R.A. (Date) Decl. 方位 高度 Distance ------------------------------------------(南より西)---------------------- h m 。 , 。 。 AU MERCURY 18 47.08 -24 47.2 ---.- ---.- 1.43796 VENUS 17 03.95 -21 56.9 310.1 13.5 1.51182 Sun 18 45.21 -23 02.1 ---.- ---.- 0.98330 MARS 20 12.99 -21 05.4 ---.- ---.- 2.26756 JUPITER 12 36.42 -02 30.1 21.3 49.8 5.33757 SATURN 12 40.13 -01 45.7 20.3 50.8 9.46859 URANUS 15 47.45 -19 44.1 324.0 25.9 19.50573 NEPTUNE 17 26.96 -21 54.6 306.2 9.8 31.20136 PLUTO 13 56.75 +06 13.7 347.0 60.0 30.29481 --------------------------------------------------------------------------