以日心为中心的立场

时间:2015-03-26 04:07:06

标签: python skyfield

有没有办法用Brandon Rhodes计算日心行星坐标(经度和纬度)' python program,Skyfield?

如果我只这样做:

mercury(utc=(1980, 1, 1)).ecliptic_latlon()

我得到一个重心物体,因此纬度和经度不符合日心说。

我试过了: sun(utc=(1980, 1, 1)).observe(jupiter) 但这会引发错误:

skyfield/relativity.py:128: RuntimeWarning: invalid value encountered in true_divide
ehat = pe / emag
skyfield/relativity.py:144: RuntimeWarning: divide by zero encountered in double_scalars
fac1 = 2.0 * GS / (C * C * emag * AU_M * rmass)

使用Python 3.4,skyfield 0.4, de423

谢谢!

2 个答案:

答案 0 :(得分:2)

使用Python 3.4和Skyfield 0.4,我可以运行:

from skyfield.api import sun, jupiter
p = sun(utc=(1980, 1, 1)).observe(jupiter)
lat, lon, d = p.ecliptic_latlon()
print(lat)
print(lon)

并得到结果:

01deg 00' 46.7"
+151deg 19' 21.7"

我想知道在你的情况下,引用的等式是什么使得归零?顺便提一下,你的方法是正确的 - 日心位置是从太阳系测量的,而不是从太阳系中间测量的,所以你做的是正确的事情!

如果您可以在错误行上方的Skyfield源代码中添加print语句,那么分母中哪些值为零会很有趣!

答案 1 :(得分:0)

非常感谢布兰登。根据您的回答,我很快发现问题所在:而不仅仅是创建一个Astrometric对象:
sun(utc=(1980, 1, 1)).observe(jupiter)
我接着尝试创建一个Apparent对象:
astrometric = sun(utc=(1980, 1, 1)).observe(jupiter) apparent = astrometric.apparent()
这就是产生错误的原因
1)尽管如此,这给我留下了一个庸俗: 获得的经度和纬度值为:
+ 151deg 19' 21.7"
01deg 00' 46.7"
我查看了JPL Horizo​​n的在线网站,他们得到了完全相同的价值 但是,在我使用的(私人编写的Java)程序中,也基于SPiCES JPL文件,为日心经度获得的值是: 151deg 02'
我在网上搜索了日心说星历,我立即遇到了一个(http://www.astro.com/swisseph/ahel/1900/ahel1980.pdf),它也表示+ 151deg 02'。
知道为什么有两套价值观吗?

2)stackoverflow是否是提出这些问题的正确位置,BTW?

再次感谢!