日心位置

Heliocentric Positions

有没有办法用 Brandon Rhodes 的 python 程序 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,天空场0.4, de423

谢谢!

使用 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"

我想知道是什么让引用的方程式 return 在你的例子中被零除?顺便说一句,你的方法是正确的——日心位置是从太阳开始测量的,而不是从太阳系的中心开始测量的,所以你做的完全正确!

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

非常感谢布兰登。有了你的回答,我很快就找到了问题所在:而不是仅仅创建一个天体测量对象:
sun(utc=(1980, 1, 1)).observe(jupiter)
我随后尝试创建一个 Apparent 对象:
astrometric = sun(utc=(1980, 1, 1)).observe(jupiter) apparent = astrometric.apparent()
这就是造成错误的原因。

1) 不过,这让我感到困惑:
得到的经纬度值为:
+151 度 19' 21.7"
01 度 00' 46.7"
我查看了 JPL Horizo​​n 的在线网站,他们得到的值几乎完全相同。
然而,在我使用的(私人编写的,Java)程序中,同样基于 SPiCES JPL 文件,获得的日心经度值是: 151 度 02'
在网上搜索日心星历表,我立即找到了一个(http://www.astro.com/swisseph/ahel/1900/ahel1980.pdf),它也表示+151deg 02'。
知道为什么有两组值吗?

2) Whosebug 是问这些问题的正确场所吗?

再次感谢!