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