マイコン宇宙講座-月の視位置計算
「マイコン宇宙講座-月の位置計算」で求めた月の位置は、地心つまり地球の中心から見た位置になります。ですが、実際は地球の表面、地上から見ています。そのため、地球の半径分だけズレることになります。地球に近い天体ほど、その影響を受けることになります。月は地球から約38万Kmほどであり、非常に近い位置にあるといえます。
近くにあるモノをみることで、このズレを体験することができます。最初に左目だけでみた位置を地心からみた位置とすると、右目だけでみると、位置がズレて見えると思います。視位置はこのズレを補正した位置のことをいいます。視位置は最初に地心から求めた位置に、サブルーチン geocentric_latitude、geocentric_distanceを呼び出して補正計算することで視位置を求めることができます。
メインルーチン m54.py
プログラムは東京における視位置ですが、10行目〜12行目の観測地の経緯度を変更することで、東京以外の場所から視位置を求めることができます。
# m54.py
# マイコン宇宙講座
# 月の視位置計算プログラム
import math
import lib
M2PI = 2.0 * math.pi
lg = 139.745 / lib.K[3]
la = 35.654 / lib.K[3]
obs = 'Tokyo'
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)
iv = input('INTERVAL(UNIT OF HOUR) ? ')
iv = float(iv)
ii = 0
yz = 0
mt = 0
print()
print(' Date (JST) 地心での月の位置 距離 %-7sでの月の位置 距離' % (obs))
print(' -------------------------------------------------------------------------------')
print(' 年 月 日 時 分 h m 。 , Km h m 。 , Km')
while ii < 32:
t0 = (jd - 15019.5) / 36525.0
a, b, c, d, e, g, j, l, m, n, v, w = lib.argument(t0)
mx, my, mz = lib.moon(t0, a, b, d, e, n, g, w)
r0 = c
r1 = mx
r2 = my
r3 = mz
ra, dc, dl = lib.positions(r0, r1, r2, r3)
dl1 = dl
if ra < 0:
ra = ra + M2PI
r1 = la
r2 = lib.geocentric_distance(r1)
r0 = r2 / 6378.16
r1 = la
r2 = 0
r3 = lib.geocentric_latitude(r1, r2)
fi = r3
r1 = jd
r2 = lg
r3 = lib.siderealtime_date(r1, r2)
s1 = r3
x0 = r0 * math.cos(fi) * math.cos(s1)
y0 = r0 * math.cos(fi) * math.sin(s1)
z0 = r0 * math.sin(fi)
xx = dl * math.cos(dc) * math.cos(ra)
yy = dl * math.cos(dc) * math.sin(ra)
zz = dl * math.sin(dc)
x = xx - x0
y = yy - y0
z = zz - z0
dl2 = math.sqrt(x * x + y * y + z * z)
ss = y
cc = x
tt = lib.quadrant(ss, cc)
mr = tt
md = math.atan(z / (y / math.sin(mr)))
# MJD to YY-MM-DD
jd = jd + 0.375
yy, mm, dd = lib.jdate(jd, lib.T)
jd = jd - 0.375
hh = 24.0 * (dd - int(dd))
dd = int(dd)
ms = 60.0 * (hh - int(hh))
hh = int(hh)
ms = int(ms + 0.1)
if ms == 60:
hh = hh + 1
ms = 0
# Print Position
if ra < 0:
ra = ra + M2PI
if ra > M2PI:
ra = ra - M2PI
ra = ra * lib.K[3] / 15.0
dc = dc * lib.K[3]
dl1 = 6378.16 * dl1
h1 = int(ra)
m1 = 60.0 * (ra - h1)
sg = lib.sgn(dc)
dc = abs(dc)
d1 = int(dc)
f1 = 60.0 * (dc - d1)
s1 = '+'
if sg < 0:
s1 = '-'
mr = mr * lib.K[3] / 15.0
md = md * lib.K[3]
dl2 = 6378.16 * dl2
h2 = int(mr)
m2 = 60.0 * (mr - h2)
sg = lib.sgn(md)
md = abs(md)
d2 = int(md)
f2 = 60.0 * (md - d2)
s2 = '+'
if sg < 0:
s2 = '-'
sfmt = ' %2d %2d %2d %2d %5.2f %s%2d %4.1f %6d %2d %5.2f %s%2d %4.1f %6d' % (dd, hh, ms, h1, m1, s1, d1, f1, dl1, h2, m2, s2, d2, f2, dl2)
if yy != yz:
sfmt = ' %4d %2d %2d %2d %2d %2d %5.2f %s%2d %4.1f %6d %2d %5.2f %s%2d %4.1f %6d' % (yy, mm, dd, hh, ms, h1, m1, s1, d1, f1, dl1, h2, m2, s2, d2, f2, dl2)
if mm != mt:
sfmt = ' %2d %2d %2d %2d %2d %5.2f %s%2d %4.1f %6d %2d %5.2f %s%2d %4.1f %6d' % (mm, dd, hh, ms, h1, m1, s1, d1, f1, dl1, h2, m2, s2, d2, f2, dl2)
print(sfmt)
yz = yy
mt = mm
ii = ii + 1
if ii < 32:
jd = jd + iv / 24.0
print(' -------------------------------------------------------------------------------')
print()
例題 1981年9月1日 22時、東京における1ヶ月間の月の視位置を求めてみましょう。
DATE AND TIME(JST) ? 19810901,210000 INTERVAL(UNIT OF HOUR) ? 24 Date (JST) 地心での月の位置 距離 Tokyo での月の位置 距離 ------------------------------------------------------------------------------- 年 月 日 時 分 h m 。 , Km h m 。 , Km 9 1 21 0 12 55.63 - 0 37.1 396710 12 52.77 - 1 8.9 398263 2 21 0 13 41.48 - 5 0.7 400025 13 38.52 - 5 31.8 400931 3 21 0 14 27.15 - 9 8.3 402558 14 24.17 - 9 40.0 402793 4 21 0 15 13.28 -12 51.8 404080 15 10.35 -13 24.9 403639 5 21 0 16 0.39 -16 3.2 404420 15 57.62 -16 38.8 403317 6 21 0 16 48.90 -18 35.1 403490 16 46.40 -19 13.5 401756 7 21 0 17 39.02 -20 19.9 401295 17 36.90 -21 1.4 398978 8 21 0 18 30.73 -21 10.6 397938 18 29.13 -21 54.7 395105 9 21 0 19 23.78 -21 1.2 393626 19 22.80 -21 47.2 390365 10 21 0 20 17.70 -19 48.0 388657 20 17.42 -20 34.7 385081 11 21 0 21 11.98 -17 30.8 383403 21 12.43 -18 16.7 379648 12 21 0 22 6.19 -14 13.6 378272 22 7.33 -14 57.4 374501 13 21 0 23 0.10 -10 4.8 373666 23 1.87 -10 45.7 370060 14 21 0 23 53.76 - 5 17.3 369930 23 56.07 - 5 54.9 366678 15 21 0 0 47.46 - 0 7.4 367306 0 50.22 - 0 42.3 364591 16 21 0 1 41.68 + 5 6.1 365906 1 44.77 + 4 32.7 363887 17 21 0 2 36.91 +10 3.3 365710 2 40.20 + 9 29.9 364508 18 21 0 3 33.53 +14 24.6 366587 3 36.86 +13 49.6 366275 19 21 0 4 31.65 +17 52.4 368334 4 34.83 +17 14.4 368931 20 21 0 5 30.94 +20 12.3 370723 5 33.76 +19 31.0 372200 21 21 0 6 30.66 +21 15.9 373546 6 32.94 +20 31.6 375826 22 21 0 7 29.78 +21 1.1 376636 7 31.38 +20 15.0 379606 23 21 0 8 27.31 +19 32.5 379884 8 28.17 +18 46.3 383403 24 21 0 9 22.57 +17 0.2 383224 9 22.70 +16 15.3 387134 25 21 0 10 15.27 +13 37.2 386623 10 14.74 +12 55.0 390751 26 21 0 11 5.56 + 9 38.0 390046 11 4.45 + 8 59.1 394218 27 21 0 11 53.84 + 5 16.5 393435 11 52.22 + 4 41.1 397483 28 21 0 12 40.65 + 0 45.6 396697 12 38.61 + 0 13.4 400460 29 21 0 13 26.61 - 3 43.1 399690 13 24.22 - 4 12.8 403029 30 21 0 14 12.32 - 7 59.2 402238 14 9.65 - 8 27.6 405030 10 1 21 0 14 58.35 -11 53.7 404144 14 55.46 -12 21.8 406289 2 21 0 15 45.18 -15 17.9 405209 15 42.15 -15 47.1 406631 -------------------------------------------------------------------------------