use super::*;
use crate::coordinates::transform::frames::bias;
impl FrameRotationProvider<ICRS, EclipticMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
bias::icrs_to_ecliptic_j2000()
}
}
impl FrameRotationProvider<EclipticMeanJ2000, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EclipticMeanJ2000, ICRS, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRS, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
bias::frame_bias_icrs_to_j2000()
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
bias::frame_bias_j2000_to_icrs()
}
}
impl FrameRotationProvider<EME2000, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
Rotation3::IDENTITY
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialMeanJ2000, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, ICRS>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRS, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialMeanJ2000>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, EclipticMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, EclipticMeanJ2000>>::rotation::<
Eph,
Eop,
Nut,
>(jd, ctx)
}
}
impl FrameRotationProvider<EclipticMeanJ2000, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EclipticMeanJ2000, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, EquatorialMeanOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, EquatorialMeanOfDate>>::rotation::<
Eph,
Eop,
Nut,
>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialMeanOfDate, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialMeanOfDate, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, EquatorialTrueOfDate>>::rotation::<
Eph,
Eop,
Nut,
>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialTrueOfDate, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, ICRF>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<ICRF, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EME2000, GCRSFrame> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, GCRSFrame>>::rotation::<Eph, Eop, Nut>(
jd, ctx,
)
}
}
impl FrameRotationProvider<GCRSFrame, EME2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<GCRSFrame, EME2000, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, EclipticMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
bias::obliquity_eq_to_ecl()
}
}
impl FrameRotationProvider<EclipticMeanJ2000, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
bias::obliquity_ecl_to_eq()
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, EquatorialMeanOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
precession::precession_matrix_iau2006(jd) * bias::frame_bias_j2000_to_icrs()
}
}
impl FrameRotationProvider<EquatorialMeanOfDate, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
(precession::precession_matrix_iau2006(jd) * bias::frame_bias_j2000_to_icrs()).inverse()
}
}
impl FrameRotationProvider<EquatorialMeanOfDate, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
let nut = Nut::nutation(jd);
Rotation3::fused_rx_rz_rx(nut.mean_obliquity + nut.deps, nut.dpsi, -nut.mean_obliquity)
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, EquatorialMeanOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialTrueOfDate, EquatorialMeanOfDate, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
let nut = Nut::nutation(jd);
precession::precession_nutation_matrix(jd, nut.dpsi, nut.deps)
* bias::frame_bias_j2000_to_icrs()
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
let nut = Nut::nutation(jd);
(precession::precession_nutation_matrix(jd, nut.dpsi, nut.deps)
* bias::frame_bias_j2000_to_icrs())
.inverse()
}
}
impl FrameRotationProvider<ICRS, EquatorialMeanOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
precession::precession_matrix_iau2006(jd)
}
}
impl FrameRotationProvider<EquatorialMeanOfDate, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
precession::precession_matrix_iau2006(jd).inverse()
}
}
impl FrameRotationProvider<ICRS, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
let nut = Nut::nutation(jd);
let mut dpsi = nut.dpsi;
let mut deps = nut.deps;
let eop = ctx.eop_at_tt(jd);
let dx_rad = crate::qtty::Radians::from(eop.dx);
let dy_rad = crate::qtty::Radians::from(eop.dy);
let zero = crate::qtty::Radians::new(0.0);
if dx_rad != zero || dy_rad != zero {
let sin_eps = nut.mean_obliquity.sin();
if sin_eps.abs() > 1e-15 {
dpsi += dx_rad / sin_eps;
}
deps += dy_rad;
}
precession::precession_nutation_matrix(jd, dpsi, deps)
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialTrueOfDate, ICRS, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
Rotation3::IDENTITY
}
}
impl FrameRotationProvider<ICRS, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<ICRS, ICRF, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialMeanJ2000>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialMeanJ2000, ICRF, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, EclipticMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EclipticMeanJ2000>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EclipticMeanJ2000, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EclipticMeanJ2000, ICRF, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, EquatorialMeanOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialMeanOfDate>>::rotation::<Eph, Eop, Nut>(
jd, ctx,
)
}
}
impl FrameRotationProvider<EquatorialMeanOfDate, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialMeanOfDate, ICRF, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<ICRF, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialTrueOfDate>>::rotation::<Eph, Eop, Nut>(
jd, ctx,
)
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, ICRF> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
inverse_rotation::<EquatorialTrueOfDate, ICRF, Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<GCRSFrame, ICRS> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
Rotation3::IDENTITY
}
}
impl FrameRotationProvider<ICRS, GCRSFrame> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
_jd: JulianDate,
_ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
Rotation3::IDENTITY
}
}
impl FrameRotationProvider<GCRSFrame, EquatorialMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialMeanJ2000>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EquatorialMeanJ2000, GCRSFrame> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialMeanJ2000, ICRS>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<GCRSFrame, EquatorialTrueOfDate> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EquatorialTrueOfDate>>::rotation::<Eph, Eop, Nut>(
jd, ctx,
)
}
}
impl FrameRotationProvider<EquatorialTrueOfDate, GCRSFrame> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EquatorialTrueOfDate, ICRS>>::rotation::<Eph, Eop, Nut>(
jd, ctx,
)
}
}
impl FrameRotationProvider<GCRSFrame, EclipticMeanJ2000> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<ICRS, EclipticMeanJ2000>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}
impl FrameRotationProvider<EclipticMeanJ2000, GCRSFrame> for () {
#[inline]
fn rotation<Eph, Eop: EopProvider, Nut: NutationModel>(
jd: JulianDate,
ctx: &AstroContext<Eph, Eop>,
) -> Rotation3 {
<() as FrameRotationProvider<EclipticMeanJ2000, ICRS>>::rotation::<Eph, Eop, Nut>(jd, ctx)
}
}