2016-02-12 8 views
1

Объект JulianDate в Skyfield - это удобный способ быстро произвести и удерживать набор значений времени в Julian Days и передать их методу Skyfield at() для вычисления астрономических положений в различных координатах. (Посмотреть example script)Как добавить объекты или смещения JulianDate в Skyfield

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

Вот очень простой, абстрактный пример. Я генерирую 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

Ссылка here,

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

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" 

Днем программирования.

+0

Отлично! Вопрос был написан еще в феврале до того, как существовал метод '.timescale()'. Хорошо поймал! – uhoh

 Смежные вопросы

  • Нет связанных вопросов^_^