Direct frame-rotation pairs and identity rotations.
#include <iomanip>
#include <iostream>
using U = qtty::AstronomicalUnit;
template <typename F1, typename F2>
auto out = src.template to_frame<F2>(jd);
auto back = out.template to_frame<F1>(jd);
auto err = (src - back).magnitude();
<< std::noshowpos << ") roundtrip=" << std::scientific << std::setprecision(3) << err
<< std::fixed << std::endl;
}
int main() {
std::cout << std::fixed;
std::cout << "Frame conversion demo at JD(TT) = " << std::setprecision(1) << jd << std::endl;
auto p_icrf = p_icrs.to_frame<
ICRF>(jd);
show_frame_conversion<ICRS, ICRS>(jd, p_icrs);
show_frame_conversion<ICRF, ICRF>(jd, p_icrf);
show_frame_conversion<EclipticMeanJ2000, EclipticMeanJ2000>(jd, p_ecl);
show_frame_conversion<EquatorialMeanJ2000, EquatorialMeanJ2000>(jd, p_eq_j2000);
show_frame_conversion<EquatorialMeanOfDate, EquatorialMeanOfDate>(jd, p_eq_mod);
show_frame_conversion<EquatorialTrueOfDate, EquatorialTrueOfDate>(jd, p_eq_tod);
show_frame_conversion<ICRS, EclipticMeanJ2000>(jd, p_icrs);
show_frame_conversion<EclipticMeanJ2000, ICRS>(jd, p_ecl);
show_frame_conversion<ICRS, EquatorialMeanJ2000>(jd, p_icrs);
show_frame_conversion<EquatorialMeanJ2000, ICRS>(jd, p_eq_j2000);
show_frame_conversion<EquatorialMeanJ2000, EclipticMeanJ2000>(jd, p_eq_j2000);
show_frame_conversion<EclipticMeanJ2000, EquatorialMeanJ2000>(jd, p_ecl);
show_frame_conversion<EquatorialMeanJ2000, EquatorialMeanOfDate>(jd, p_eq_j2000);
show_frame_conversion<EquatorialMeanOfDate, EquatorialMeanJ2000>(jd, p_eq_mod);
show_frame_conversion<EquatorialMeanOfDate, EquatorialTrueOfDate>(jd, p_eq_mod);
show_frame_conversion<EquatorialTrueOfDate, EquatorialMeanOfDate>(jd, p_eq_tod);
show_frame_conversion<EquatorialMeanJ2000, EquatorialTrueOfDate>(jd, p_eq_j2000);
show_frame_conversion<EquatorialTrueOfDate, EquatorialMeanJ2000>(jd, p_eq_tod);
show_frame_conversion<ICRS, EquatorialMeanOfDate>(jd, p_icrs);
show_frame_conversion<EquatorialMeanOfDate, ICRS>(jd, p_eq_mod);
show_frame_conversion<ICRS, EquatorialTrueOfDate>(jd, p_icrs);
show_frame_conversion<EquatorialTrueOfDate, ICRS>(jd, p_eq_tod);
show_frame_conversion<ICRF, ICRS>(jd, p_icrf);
show_frame_conversion<ICRS, ICRF>(jd, p_icrs);
show_frame_conversion<ICRF, EquatorialMeanJ2000>(jd, p_icrf);
show_frame_conversion<EquatorialMeanJ2000, ICRF>(jd, p_eq_j2000);
show_frame_conversion<ICRF, EclipticMeanJ2000>(jd, p_icrf);
show_frame_conversion<EclipticMeanJ2000, ICRF>(jd, p_ecl);
show_frame_conversion<ICRF, EquatorialMeanOfDate>(jd, p_icrf);
show_frame_conversion<EquatorialMeanOfDate, ICRF>(jd, p_eq_mod);
show_frame_conversion<ICRF, EquatorialTrueOfDate>(jd, p_icrf);
show_frame_conversion<EquatorialTrueOfDate, ICRF>(jd, p_eq_tod);
return 0;
}
tempoch::EncodedTime< Scale, Format > Time
Umbrella header for the siderust C++ wrapper library.
A 3D Cartesian position, compile-time tagged by center, frame, unit.
Solar-system barycenter (zero-cost, Params = void).
Mean ecliptic & equinox of J2000.0.
Mean equatorial of J2000.0 (FK5-aligned).
Mean equatorial of date (precessed, no nutation).
True equatorial of date (precessed + nutated).
SFINAE helper: every frame tag must provide these static members.
International Celestial Reference Frame (treated ≡ ICRS).