Dies ist eine Fortsetzung von Last. Berechnen Sie nun auch die durchschnittliche Sonne.
Die Zeitdifferenz zwischen der wahren Sonne und der durchschnittlichen Sonne, die der Durchschnitt der Zeitgeschwindigkeiten basierend auf der Sonne des Jahres ist, wird als durchschnittliche Zeitdifferenz bezeichnet. Die Faktoren der Zeitdifferenz sind die elliptische Umdrehung der Erde und die Neigung der Bodenachse. Im Folgenden finden Sie ein LST-Programm (Local Sun Time), das sowohl die wahre Sonne als auch die durchschnittliche Sonne berechnet.
Bereiten Sie die Umlaufbahninformationen vor. Dieses Mal werde ich TLE (Two Line Element) von ALOS-2 (Daichi No. 2) verwenden. Speichern Sie die TLE als Textdatei. ("./TLE/ALOS-2.tle")
ALOS-2
1 39766U 14029A 19271.21643628 .00000056 00000-0 14378-4 0 9997
2 39766 97.9225 6.5909 0001371 85.1486 274.9890 14.79472450288774
TLE wird berechnet, indem es unter Verwendung des Himmelsfelds in 6 Kontaktbahnelemente umgewandelt wird. Alles, was Sie tun müssen, ist, die Differenz zwischen dem roten Meridian des Sonnenrichtungsvektors und dem roten Meridian "ra" des aufsteigenden Punktes zu nehmen und in Zeit umzuwandeln. Im Himmelsfeld wird es in Grad, Minuten und Sekunden wie "184deg 09" 18,9 "angezeigt, also habe ich die Zeichenkette zwangsweise manipuliert.
Verwenden Sie für die durchschnittliche Sonne Gleichung (2) in Eine Studie zur Berechnung des roten Schusses und der Zeitdifferenz von Solar Vision. Hat. Die Julius-Jahrhunderte (JC) von J2000 werden ab dem Julius-Tag berechnet, und die durchschnittliche sonnenrote Länge $ α_ {m} $ [h] wird berechnet.
#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-
import numpy as np
import math
import sys
import datetime
from skyfield.api import Loader, Star, Topos, load, JulianDate
from skyfield.api import EarthSatellite
from skyfield.elementslib import osculating_elements_of
TLE_NAME = './TLE/ALOS-2.tle'
def loc_time_calc(elm):
ra = elm[5] # raan[rad]
## True Sun ###
planets = load('de421.bsp')
earth = planets['earth']
sun = planets['sun']
astrometric = earth.at(elm[0]).observe(sun) #earth->sun vector
true_sun, dec, distance = astrometric.radec()
true_sun = math.radians(_to_10deg(true_sun.dstr(warn=False))) # get angle
true_sun_angle = ra - true_sun
if true_sun_angle * 12/math.pi + 12 < 0:
true_loc_time = _to_str(24 + true_sun_angle * 12 / math.pi + 12)
else:
true_loc_time = _to_str(true_sun_angle * 12/math.pi + 12)
## Mean Sun ###
JD = elm[0].ut1 # Julian date
Tu = (JD-2451545)/36525 # Julian Julian Century, JC
# mean sun right ascension[h]
alpha_m = 18 +(41+50.54841/60)/60 + Tu*8640184.812866/60/60 + (0.093104/60/60)*(Tu**2) - (0.0000062/60/60)*(Tu**3)
alpha_m = alpha_m % 24
mean_sun = (alpha_m/24) * 2 * np.pi
mean_sun_angle = ra - mean_sun
if mean_sun_angle * 12/math.pi + 12 < 0:
mean_loc_time = _to_str(24 + mean_sun_angle * 12 / math.pi + 12)
else:
mean_loc_time = _to_str(mean_sun_angle * 12/math.pi + 12)
return true_loc_time, mean_loc_time
def _to_10deg(val):
spl1 = val.split()
spl2 = spl1[0].split("deg",1)
spl3 = spl1[1].split("'",1)
spl4 = spl1[2].split('"',1)
degrees = (float(spl4[0]) / 3600) + (float(spl3[0]) / 60) + float(spl2[0])
return degrees
def _to_str(hour):
h_str = datetime.datetime.strftime(datetime.datetime.strptime((str(int(hour))), "%H"),"%H")
m_str = datetime.datetime.strftime(datetime.datetime.strptime(str(int((hour-int(hour))*60)), "%M"),"%M")
return h_str + ":" + m_str
def main():
with open(TLE_NAME) as f:
lines = f.readlines()
sat = EarthSatellite(lines[1], lines[2], lines[0])
print(lines[0], sat.epoch.utc_jpl())
pos = sat.at(sat.epoch)
print(sat.epoch)
elm = osculating_elements_of(pos)
i = elm.inclination.degrees
e = elm.eccentricity
a = elm.semi_major_axis.km
omega = elm.argument_of_periapsis.degrees
ra = elm.longitude_of_ascending_node.degrees
M = elm.mean_anomaly.degrees
print(i,e,a,omega,ra,M)
# Osculating Orbit
osc_elm = [0 for i in range(7)]
osc_elm[0] = sat.epoch
osc_elm[1] = a
osc_elm[2] = e
osc_elm[3] = np.radians(i)
osc_elm[4] = np.radians(omega)
osc_elm[5] = np.radians(ra)
osc_elm[6] = np.radians(M)
true_loc_time, mean_loc_time = loc_time_calc(osc_elm)
print("Kreuzungspunkt nach Ortszeit(LST True Sun)",true_loc_time)
print("Kreuzungspunkt nach Ortszeit(LST Mean Sun)",mean_loc_time)
return
Die durchschnittliche Zeitdifferenz beträgt ungefähr 9 Minuten, wenn die durchschnittliche Zeitdifferenz von 2019/9/28 auf dieser Website berechnet wird. Es scheint also ungefähr dieselbe zu sein. Ich verstehe.
ALOS-2
A.D. 2019-Sep-28 05:11:40.0946 UT
<Time tt=2458754.717237021>
97.92987988479214 0.0012760645968402655 7015.220028255803 69.31302830191312 6.32305263767209 290.71632630644746
Kreuzungspunkt nach Ortszeit(LST True Sun) 00:08
Kreuzungspunkt nach Ortszeit(LST Mean Sun) 23:58
Recommended Posts