use lox_core::types::units::JulianCenturies;
use lox_core::units::Angle;
#[inline]
pub fn d_simon1994(centuries_since_j2000_tdb: JulianCenturies) -> Angle {
Angle::arcseconds_normalized_signed(fast_polynomial::poly_array(
centuries_since_j2000_tdb,
&[1072260.70369, 1602961601.2090],
))
}
#[inline]
pub fn lp_simon1994(centuries_since_j2000_tdb: JulianCenturies) -> Angle {
Angle::arcseconds_normalized_signed(fast_polynomial::poly_array(
centuries_since_j2000_tdb,
&[1287104.79305, 129596581.0481],
))
}
#[inline]
pub fn l_simon1994(centuries_since_j2000_tdb: JulianCenturies) -> Angle {
Angle::arcseconds_normalized_signed(fast_polynomial::poly_array(
centuries_since_j2000_tdb,
&[485868.249036, 1717915923.2178],
))
}
#[inline]
pub fn f_simon1994(centuries_since_j2000_tdb: JulianCenturies) -> Angle {
Angle::arcseconds_normalized_signed(fast_polynomial::poly_array(
centuries_since_j2000_tdb,
&[335779.526232, 1739527262.8478],
))
}
#[inline]
pub fn omega_simon1994(centuries_since_j2000_tdb: JulianCenturies) -> Angle {
Angle::arcseconds_normalized_signed(fast_polynomial::poly_array(
centuries_since_j2000_tdb,
&[450160.398036, -6962890.5431],
))
}
#[cfg(test)]
mod tests {
use lox_core::units::AngleUnits;
use lox_test_utils::assert_approx_eq;
use super::*;
const TOLERANCE: f64 = 1e-10;
const T_ZERO: JulianCenturies = 0.0;
const T_POSITIVE: JulianCenturies = 1.23456789;
const T_NEGATIVE: JulianCenturies = -1.23456789;
#[test]
fn test_d() {
assert_approx_eq!(
d_simon1994(T_ZERO),
5.198466588650503.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
d_simon1994(T_POSITIVE),
5.067187555274916.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
d_simon1994(T_NEGATIVE),
-0.953439685154148.rad(),
rtol <= TOLERANCE
);
}
#[test]
fn test_lp() {
assert_approx_eq!(
lp_simon1994(T_ZERO),
6.24006012692298.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
lp_simon1994(T_POSITIVE),
2.806501115480207.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
lp_simon1994(T_NEGATIVE),
-2.892751475993361.rad(),
rtol <= TOLERANCE
);
}
#[test]
fn test_l() {
assert_approx_eq!(
l_simon1994(T_ZERO),
2.355555743493879.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
l_simon1994(T_POSITIVE),
5.399393108792649.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
l_simon1994(T_NEGATIVE),
-0.688281621805333.rad(),
rtol <= TOLERANCE
);
}
#[test]
fn test_f() {
assert_approx_eq!(
f_simon1994(T_ZERO),
1.627905081537519.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
f_simon1994(T_POSITIVE),
2.076369815616488.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
f_simon1994(T_NEGATIVE),
-5.103744959722151.rad(),
rtol <= TOLERANCE
);
}
#[test]
fn test_omega() {
assert_approx_eq!(
omega_simon1994(T_ZERO),
2.182439196615671.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
omega_simon1994(T_POSITIVE),
-1.793813955913912.rad(),
rtol <= TOLERANCE
);
assert_approx_eq!(
omega_simon1994(T_NEGATIVE),
6.158692349145257.rad(),
rtol <= TOLERANCE
);
}
}