#日期-时间 #月亮 #太阳 #实用 #行星 #坐标 #实现

practical-astronomy-rust

在 Rust 中实现的实用天文学算法

5 个版本

0.2.4 2024年4月9日
0.2.3 2024年4月9日
0.2.2 2024年4月7日
0.2.1 2024年4月7日
0.2.0 2024年4月7日

#126 in 日期和时间

MIT 许可证

375KB
10K SLoC

Rust 实用天文学

使用计算器或电子表格进行实用天文学》一书中 Peter Duffett-Smith 提供的算法,在 Rust 中实现。API 文档在此发布。

如果您对这个主题感兴趣,请购买此书!它提供了更多细节和背景信息。

快速入门

我们将使用发布的 crate 计算俄亥俄州亚历山大西部的4月8日日食的情况。(如果您愿意,可以调整输入)

首先,打开终端并创建一个二进制应用程序

cargo new pa_solar_test

切换到新项目目录,并添加对实用天文学 crate 的引用

cargo add practical-astronomy-rust

然后,编辑 main.rs 并更新它如下

use practical_astronomy_rust::eclipses as ECL;
use practical_astronomy_rust::util as UTIL;

fn main() {
    // Input values
    let local_date_day: f64 = 8.0;
    let local_date_month: u32 = 4;
    let local_date_year: u32 = 2024;
    let is_daylight_saving: bool = true;
    let zone_correction_hours: i32 = 5;
    let geog_longitude_deg: f64 = -84.53639;
    let geog_latitude_deg: f64 = 39.74722;

    // Calculate the circumstances of the eclipse
    let (
        solar_eclipse_certain_date_day,
        solar_eclipse_certain_date_month,
        solar_eclipse_certain_date_year,
        ut_first_contact_hour,
        ut_first_contact_minutes,
        ut_mid_eclipse_hour,
        ut_mid_eclipse_minutes,
        ut_last_contact_hour,
        ut_last_contact_minutes,
        eclipse_magnitude,
    ) = ECL::solar_eclipse_circumstances(
        local_date_day,
        local_date_month,
        local_date_year,
        is_daylight_saving,
        zone_correction_hours,
        geog_longitude_deg,
        geog_latitude_deg,
    );

    // Results are in Universal Time, so lets adjust them for local
    let ut_first_contact_hour_adj: f64 = UTIL::get_local_hour_from_ut(
        ut_first_contact_hour,
        is_daylight_saving,
        zone_correction_hours,
    );
    let ut_mid_eclipse_hour_adj: f64 = UTIL::get_local_hour_from_ut(
        ut_mid_eclipse_hour,
        is_daylight_saving,
        zone_correction_hours,
    );
    let ut_last_contact_hour_adj: f64 = UTIL::get_local_hour_from_ut(
        ut_last_contact_hour,
        is_daylight_saving,
        zone_correction_hours,
    );

    // Display the results
    println!("Solar eclipse circumstances:\n\t[Local Date] {}/{}/{}\n\t[DST?] {}\n\t[Zone Correction] {} hours\n\t[Geographical Longitude/Latitude] {} degrees / {} degrees\n\t=\n\t[Certain Date] {}/{}/{}\n\t[First Contact] {}:{}\n\t[Mid Eclipse] {}:{}\n\t[Last Contact] {}:{}\n\t[Magnitude] {}", local_date_month, local_date_day, local_date_year, is_daylight_saving, zone_correction_hours, geog_longitude_deg, geog_latitude_deg, solar_eclipse_certain_date_month, solar_eclipse_certain_date_day, solar_eclipse_certain_date_year, ut_first_contact_hour_adj, ut_first_contact_minutes, ut_mid_eclipse_hour_adj, ut_mid_eclipse_minutes, ut_last_contact_hour_adj, ut_last_contact_minutes, eclipse_magnitude);
}

保存文件,并运行它

cargo run

您应该看到这个

Solar eclipse circumstances:
	[Local Date] 4/8/2024
	[DST?] true
	[Zone Correction] 5 hours
	[Geographical Longitude/Latitude] -84.53639 degrees / 39.74722 degrees
	=
	[Certain Date] 4/8/2024
	[First Contact] 13:55
	[Mid Eclipse] 15:11
	[Last Contact] 16:27
	[Magnitude] 1.006

库函数 - 状态

日期/时间

  • 计算 -> 复活节的日期
  • 转换 -> 公民日期到日数
  • 转换 -> 公民时间 <-> 小时数
  • 提取 -> 小时数、分钟数和秒数部分
  • 转换 -> 当地公民时间 <-> 世界时
  • 转换 -> 世界时 <-> 格林尼治恒星时
  • 转换 -> 格林尼治恒星时 <-> 当地恒星时
  • 计算 -> 朱利安日期的星期

坐标

  • 转换 -> 角度 <-> 十进制度数
  • 转换 -> 赤道坐标 <-> 水平坐标
  • 转换 -> 黄道坐标 <-> 赤道坐标
  • 计算 -> 黄道倾角
  • 转换 -> 黄道坐标 <-> 赤道坐标
  • 转换 -> 赤道坐标 <-> 天球坐标
  • 计算 -> 两个物体之间的角度
  • 计算 -> 物体的升起和落下时间
  • 计算 -> 预转(两个时代之间的校正坐标)
  • 计算 -> 格林尼治日期的章动(黄经和倾角)
  • 计算 -> 黄道坐标的折射效应
  • 计算 -> RA 和赤纬值,校正大气折射
  • 计算 -> RA 和赤纬值,校正地心视差
  • 计算 -> 日心坐标
  • 计算 -> 卡林顿旋转数
  • 计算 -> 月球坐标(地球背面和太阳背面)

太阳

  • 计算 -> 太阳的大致和精确位置
  • 计算 -> 太阳距离和角直径
  • 计算 -> 当地日出和日落时间
  • 计算 -> 早晚晨昏线
  • 计算 -> 时间平差
  • 计算 -> 太阳视运动

行星

  • 计算 -> 行星的大致位置
  • 计算 -> 行星的精确位置
  • 计算 -> 行星的视觉特征(距离、角直径、相位、光行差、明亮边缘的位置角和视星等)
  • 计算 -> 彗星的位置(椭圆和抛物线轨道)
  • 计算 -> 双星轨道数据

月亮

  • 计算 -> 月亮的大致和精确位置
  • 计算 -> 月相和明亮边缘的位置角
  • 计算 -> 新月和满月的时间
  • 计算 -> 月球的距离、角直径和水平视差
  • 计算 -> 当地月升和月落时间

日食和月食

  • 计算 -> 月食发生的时间和情况
  • 计算 -> 日食发生的时间和情况

依赖项

~475KB