Как добавить объекты или смещения JulianDate в Skyfield

JulianDate Объект в Скайфилде - это удобный способ быстро создать и сохранить набор значений времени в юлианских днях и передать их Скайфилду. at() метод расчета астрономических позиций в различных координатах. (см. пример сценария)

Тем не менее, я не могу найти add или же offset метод, так что я могу добавить временное смещение или итерацию смещений к JulianDate объект. Мне всегда кажется, что я борюсь с датами и временем.

Вот очень простой, обобщенный пример. Я генерирую jd60 который смещен от произвольного jd0 на 60 дней. В качестве простой проверки я рассчитываю положение земли в два раза и проверяю, что она движется примерно на 60 градусов.

from skyfield.api import load, JulianDate
import numpy as np

data  = load('de421.bsp')
earth = data['earth']

Начнем с произвольного t_zero:

jd0 = JulianDate(utc=(2016, 1, 17.4329, 22.8, 4, 39.3))   # (y, m, d, h, m, s)

Теперь сделайте второе смещение объекта JulianDate на 60 дней

Это работает:

tim = list(jd0.tt_tuple())
tim[2] += 60   # add 60 days (~1/6 of a year)

jd60 = JulianDate(utc=tuple(tim))

Но то, что я хотел бы, это что-то вроде:

jd60 = jd0.add(delta_utc=(0, 0, 60, 0, 0, 0)) # ficticious method

Теперь вычислите позиции и найдите приблизительный угол, просто чтобы увидеть, как это работает.

p0  = earth.at(jd0).position.km
p60 = earth.at(jd60).position.km

dot = (p0*p60).sum()

cos_theta = dot / np.sqrt( (p0**2).sum() * (p61**2).sum() )

print (180./np.pi) * np.arccos(cos_theta)
print "should be roughly 60 degrees"

дает

60.6215331601
should be roughly 60 degrees

1 ответ

Решение

Ссылка здесь,

Мое решение заключается в следующем:

from skyfield.api import load
import numpy as np

data  = load('de421.bsp')
earth = data['earth']

ts=load.timescale()
t=ts.utc(2016, 1, np.linspace(17.4329,77.4329,61), 22.8, 4, 39.3)

p=earth.at(t)

p0  = p.position.au[:,0]
p60 = p.position.au[:,60]

dot = (p0*p60).sum()

cos_theta = dot / np.sqrt( (p0**2).sum() * (p60**2).sum() )

print (180./np.pi) * np.arccos(cos_theta)
print "should be roughly 60 degrees"

Удачного программирования.

Другие вопросы по тегам