celestial_time/transforms/precession/
mod.rs1pub mod constants;
2pub mod iau2000;
3pub mod iau2006;
4
5use crate::{TimeResult, TT};
6use celestial_core::matrix::RotationMatrix3;
7
8#[derive(Debug, Clone, PartialEq)]
9pub struct PrecessionResult {
10 pub bias_matrix: RotationMatrix3,
11 pub precession_matrix: RotationMatrix3,
12 pub bias_precession_matrix: RotationMatrix3,
13 pub model: PrecessionModel,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum PrecessionModel {
18 IAU1976,
19 IAU2000,
20 IAU2006,
21}
22
23pub trait PrecessionCalculator {
24 fn precession_iau2000(&self) -> TimeResult<PrecessionResult>;
25
26 fn precession_iau2006(&self) -> TimeResult<PrecessionResult>;
27
28 fn precession(&self) -> TimeResult<PrecessionResult> {
29 self.precession_iau2006()
30 }
31
32 fn bias_precession_matrix(&self) -> TimeResult<RotationMatrix3> {
33 Ok(self.precession_iau2006()?.bias_precession_matrix)
34 }
35}
36
37impl PrecessionCalculator for TT {
38 fn precession_iau2000(&self) -> TimeResult<PrecessionResult> {
39 iau2000::calculate(self)
40 }
41
42 fn precession_iau2006(&self) -> TimeResult<PrecessionResult> {
43 iau2006::calculate(self)
44 }
45}