如何在 Skyfield 中添加 JulianDate 对象或偏移量

How to add JulianDate objects or offsets in Skyfield

Skyfield is a handy way to quickly produce and hold a set of time values in Julian Days, and pass them to Skyfield's at() method to calculate astronomical positions in various coordinates. (see an example script)

中的JulianDate对象

但是,我似乎找不到 addoffset 方法,以便我可以向 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

参考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")