use super::CoordinateWithPM;
use crate::coordinates::{cartesian, centers::*, frames::*, spherical, transform::Transform};
use qtty::LengthUnit;
impl<C1, F1, C2, F2, U> From<&CoordinateWithPM<cartesian::Position<C1, F1, U>>>
for CoordinateWithPM<cartesian::Position<C2, F2, U>>
where
cartesian::Position<C1, F1, U>: Transform<cartesian::Position<C1, F2, U>>, cartesian::Position<C1, F2, U>: Transform<cartesian::Position<C2, F2, U>>, C1: ReferenceCenter,
C2: ReferenceCenter,
F1: ReferenceFrame,
F2: ReferenceFrame,
U: LengthUnit,
{
fn from(orig: &CoordinateWithPM<cartesian::Position<C1, F1, U>>) -> Self {
Self::new_raw(
orig.position.transform(orig.time).transform(orig.time),
orig.time,
orig.proper_motion.clone(),
)
}
}
impl<C1, F1, C2, F2, U> From<&CoordinateWithPM<spherical::Position<C1, F1, U>>>
for CoordinateWithPM<spherical::Position<C2, F2, U>>
where
cartesian::Position<C1, F1, U>: Transform<cartesian::Position<C1, F2, U>>, cartesian::Position<C1, F2, U>: Transform<cartesian::Position<C2, F2, U>>, C1: ReferenceCenter,
C2: ReferenceCenter,
F1: ReferenceFrame,
F2: ReferenceFrame,
U: LengthUnit,
{
fn from(orig: &CoordinateWithPM<spherical::Position<C1, F1, U>>) -> Self {
Self::new_raw(
spherical::Position::from_cartesian(
&orig
.position
.to_cartesian()
.transform(orig.time)
.transform(orig.time),
),
orig.time,
orig.proper_motion.clone(),
)
}
}