首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Skyfield中添加JulianDate对象或偏移量

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

Stack Overflow用户
提问于 2016-02-12 14:00:52
回答 1查看 285关注 0票数 1

JulianDate对象在天田中是一种简便的方法,可以在朱利安天快速生成和保存一组时间值,并将它们传递给Skyfield的at()方法来计算不同坐标下的天文位置。(见示例脚本)

但是,我似乎找不到addoffset方法,因此我无法向JulianDate对象添加时间偏移量或可迭代的偏移量。我似乎总是奋斗的日期和时间。

下面是一个非常简单、抽象的例子。我生成jd60,它与任意的jd0相抵60天。作为一个简单的检查,我计算了地球在两次的位置,并确保它移动了大约60度。

代码语言:javascript
复制
from skyfield.api import load, JulianDate
import numpy as np

data  = load('de421.bsp')
earth = data['earth']

从任意的t_zero开始:

代码语言:javascript
复制
jd0 = JulianDate(utc=(2016, 1, 17.4329, 22.8, 4, 39.3))   # (y, m, d, h, m, s)

现在,让第二个JulianDate对象偏移60天

这样做是可行的:

代码语言:javascript
复制
tim = list(jd0.tt_tuple())
tim[2] += 60   # add 60 days (~1/6 of a year)

jd60 = JulianDate(utc=tuple(tim))

但是,我想要的是:

代码语言:javascript
复制
jd60 = jd0.add(delta_utc=(0, 0, 60, 0, 0, 0)) # ficticious method

现在,计算这些位置,找出近似的角度,看看它是否起作用。

代码语言:javascript
复制
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"

给出

代码语言:javascript
复制
60.6215331601
should be roughly 60 degrees
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 01:55:43

参考这里

我的解决办法如下:

代码语言:javascript
复制
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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35364458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档