17 个版本 (11 个稳定版)
3.0.0 | 2023 年 10 月 22 日 |
---|---|
2.1.0 | 2020 年 12 月 17 日 |
2.0.3 | 2017 年 5 月 28 日 |
2.0.1 | 2017 年 2 月 12 日 |
0.5.1 | 2015 年 9 月 23 日 |
#26 在 科学
每月 23 次下载
在 2 个 Crates 中使用(通过 astral)
19MB
818K SLoC
VSOP87 Rust 实现
本库实现了用于计算太阳系行星位置的 VSOP87 解。完整 文档 可在此处找到:这里。
主模块计算太阳系行星在 J2000.0 春分点上的偏心椭圆轨道元素,这是基本的 VSOP87 解。每个其他 VSOP87 实现都有一个模块:VSOP87A、VSOP87B、VSOP87C、VSOP87D 和 VSOP87E。更多信息可在此处找到:这里 和 这里。
每个模块都有自己的文档,以下是基本 VSOP87 解的文档。VSOP87 算法在 J2000 历元前后 4000 年内对水星、金星、地月质心以及火星的精度非常高(小于 1"),对木星和土星的精度为 2000 年,对天王星和海王星的精度为 6000 年。
基本 VSOP87 解计算行星绕太阳的轨道元素。返回的元素是特殊的 VSOP87 轨道元素,可以使用 Into
特性将其转换为常规开普勒元素。这些元素非常适合了解轨道随时间的变化。它还可以用于其他复杂的轨道计算。
示例
以下示例计算了 2000 年 1 月 1 日水星的轨道参数。VSOP87 算法需要将日期输入为 儒略日(JD)。在我们的例子中,该日期为 2451545.0
。
我们首先计算 VSOP87 元素
let vsop87_elts = vsop87::mercury(2451545.0);
assert!(vsop87_elts.a > 0.3870982121 && vsop87_elts.a < 0.3870982123);
assert!(vsop87_elts.l > 4.4026057778 && vsop87_elts.l < 4.4026057780);
assert!(vsop87_elts.k > 0.0446647517 && vsop87_elts.k < 0.0446647519);
assert!(vsop87_elts.h > 0.2007208957 && vsop87_elts.h < 0.2007208959);
assert!(vsop87_elts.q > 0.0406161540 && vsop87_elts.q < 0.0406161542);
assert!(vsop87_elts.p > 0.04563512 && vsop87_elts.p < 0.04563588);
请注意,>
和<
比较操作存在,因为不应该使用==
来比较浮点数。这些数字来自VSOP87算法的原始测试数据。然后我们可以通过使用KeplerianElements::from()
或VSOP87元素中的into()
函数将它们转换为开普勒元素。这也适用于相反的过程
use vsop87::{KeplerianElements, VSOP87Elements};
let elements = KeplerianElements::from(vsop87_elts);
let convert_back: VSOP87Elements = elements.into();
assert!(elements.semimajor_axis() > 0.387097 && elements.semimajor_axis() < 0.387099);
assert!(elements.eccentricity() > 0.205629 && elements.eccentricity() < 0.205631);
assert!(elements.inclination() > 0.122260 && elements.inclination() < 0.122261);
assert!(elements.ascending_node() > 0.843525 && elements.ascending_node() < 0.843527);
assert!(elements.periapsis() > 1.35183 && elements.periapsis() < 1.35185);
assert!(elements.mean_anomaly() > 4.40259 && elements.mean_anomaly() < 4.40261);
如您所见,这些数字与NASA的数据完美匹配。
许可证
此库根据MIT许可证和Apache许可证(版本2.0)进行分发,任选其一。有关详细信息,请参阅LICENSE-APACHE和LICENSE-MIT文件。