有没有办法用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
谢谢!
答案 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 Horizon的在线网站,他们得到了完全相同的价值
但是,在我使用的(私人编写的Java)程序中,也基于SPiCES JPL文件,为日心经度获得的值是:
151deg 02'
我在网上搜索了日心说星历,我立即遇到了一个(http://www.astro.com/swisseph/ahel/1900/ahel1980.pdf),它也表示+ 151deg 02'。
知道为什么有两套价值观吗?
2)stackoverflow是否是提出这些问题的正确位置,BTW?
再次感谢!