如何在 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
对象
但是,我似乎找不到 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
参考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")
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
对象
但是,我似乎找不到 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
参考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")