2016-02-12 40 views
1

Skyfield中的JulianDate對象是在Julian天快速生成和保存一組時間值的方便方法,並將它們傳遞給Skyfield的at()方法來計算各種座標中的天文位置。 (參照example script如何在Skyfield中添加JulianDate對象或偏移量

然而,我似乎無法找到一個addoffset方法使得我可以添加一個時間偏移量或偏移到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()'方法存在之前,這個問題在2月份被寫回來。好的趕上! – uhoh