【问题标题】:How to add JulianDate objects or offsets in Skyfield如何在 Skyfield 中添加 JulianDate 对象或偏移量
【发布时间】:2016-05-23 17:05:44
【问题描述】:

Skyfield 中的 JulianDate 对象是一种方便的方法,可以快速生成并保存一组儒略日时间值,并将它们传递给 Skyfield 的 at() 方法以计算各种坐标中的天文位置。 (见example script

但是,我似乎找不到 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

【问题讨论】:

    标签: julian-date skyfield


    【解决方案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")
    

    【讨论】:

    • 太棒了!这个问题是在 .timescale() 方法存在之前的二月份写的。不错的收获!
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2021-07-22
    • 2021-11-10
    • 2018-03-24
    • 2018-02-06
    • 1970-01-01
    • 2014-09-24
    • 2014-05-29
    相关资源
    最近更新 更多