Celestia/JPL 星历表
注意:此信息不适用于 1.5.0 之前的 Celestia 版本。
可以使用 JPL 的 DE405/406 星历表与 Celestia,以比默认的 VSOP87 理论更准确地计算行星的位置。权衡的是,由于 JPL 的星历表文件本质上是大型查找表,因此需要大量内存才能覆盖与 VSOP87 相同的时间跨度。
首先,您需要下载星历表文件。它们可以在此处找到
ftp://ssd.jpl.nasa.gov/pub/eph/planets/unix/de406/
名为 unxpNNNN.406 的文件可能最令人感兴趣。它们包含从 +NNNN 年开始的 DE406 星历表的 300 年块。文件名为 unxmNNNN.406,涵盖了公元前 1 年之前的年份。每个块约为 9 兆字节,因此整个 DE406 的总大小约为 180 兆字节。您不需要使用多个块,但如果您需要超过 300 年的星历表,则 JPL FTP 站点上提供了一套工具。C 语言工具可以在这里找到
ftp://ssd.jpl.nasa.gov/pub/eph/planets/C-versions/hoffman/
DE405 比 DE406 更大,精度也略高,但 DE406 对于大多数用途来说应该足够精确了。文档中解释了差异
ftp://ssd.jpl.nasa.gov/pub/eph/planets/README.txt
要使用 JPL 星历表,您需要将其放置在 Celestia 的数据目录中,并将其命名为“jpleph.dat”。然后,您应该修改 solarsys.ssc 中定义的行星的 CustomOrbits,以使用 JPL 星历表代替默认的 VSOP87 轨道。以下是可用的 CustomOrbit 名称
- 行星的日心轨道
jpl-mercury-sun jpl-venus-sun jpl-earth-sun jpl-mars-sun jpl-jupiter-sun jpl-saturn-sun jpl-uranus-sun jpl-neptune-sun jpl-pluto-sun
- 相对于太阳系质心的行星轨道
jpl-mercury-ssb jpl-venus-ssb jpl-earth-ssb jpl-mars-ssb jpl-jupiter-ssb jpl-saturn-ssb jpl-uranus-ssb jpl-neptune-ssb jpl-pluto-ssb
- 地球-月球质心相对于太阳和 SSB 的位置
jpl-emb-sun jpl-emb-ssb
- 地球相对于地球-月球质心的位置
jpl-earth-emb
- 月球的地心和质心位置
jpl-moon-earth jpl-moon-emb
- 太阳相对于 SSB 的位置
jpl-sun-ssb
为 jpl-mars、jpl-jupiter、jpl-saturn、jpl-uranus、jpl-neptune 和 jpl-pluto 计算的位置是系统的质心。金星和水星没有卫星,因此质心正好是行星的中心。尽管火星有卫星,但它们相对于火星来说太小了,因此 Horizons 似乎将火星系统质心和火星中心视为相同。jpl-earth 存在轻微的不一致:它提供了地球的位置。如果您想要地球-月球质心,请使用 jpl-emb。
如果您好奇巨行星的位置与它们的系统质心偏离了多少,那么天王星和天卫五的粗略计算结果约为 20 公里。伽利略卫星与木星的质量比类似,尽管它们离木星更远,因此会使质心更远。
尽管 JPL 星历表的本机参考系是 J2000.0 的地球平均赤道和春分点,但 Celestia 在内部(通过固定旋转)将它们转换为 J2000 黄道系。这使得默认的 VSOP87 轨道可以通过简单地更改 CustomOrbit 来替换为 JPL 轨道。唯一的例外是月球。卫星的默认参考平面是卫星所围绕行星的当日赤道平面。因此,当更改月球轨道以使用 JPL 星历表时,必须覆盖轨道系。
OrbitFrame { EclipticJ2000 { Center "Sol/Earth" } }
有两种方法可以从使用 VSOP87 级数切换到使用 JPL 星历表来计算行星的位置。您可以直接修改 data/solarsys.ssc,或者您可以创建一个简单的插件,利用 SSC 对象的 Modify 属性。以下示例替换了太阳系所有行星和月球的轨道。将此示例复制粘贴到 extras 目录中的一个新的 .ssc 文件中,然后下次您启动 Celestia 时,行星的位置将根据 data/jpleph.dat 中的 JPL 星历表计算。
Modify "Mercury" "Sol" { CustomOrbit "jpl-mercury-sun" } Modify "Venus" "Sol" { CustomOrbit "jpl-venus-sun" } Modify "Earth" "Sol" { CustomOrbit "jpl-earth-sun" } Modify "Moon" "Sol/Earth" { OrbitFrame { EclipticJ2000 { Center "Sol/Earth" } } CustomOrbit "jpl-moon-earth" } Modify "Mars" "Sol" { CustomOrbit "jpl-mars-sun" } Modify "Jupiter" "Sol" { CustomOrbit "jpl-jupiter-sun" } Modify "Saturn" "Sol" { CustomOrbit "jpl-saturn-sun" } Modify "Uranus" "Sol" { CustomOrbit "jpl-uranus-sun" } Modify "Neptune" "Sol" { CustomOrbit "jpl-neptune-sun" } Modify "Pluto" "Sol" { CustomOrbit "jpl-pluto-sun" }