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 日期和时间
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