Program Listing for File frame_conversions.h¶
↰ Return to documentation for file (conversions/frame_conversions.h)
#pragma once
#include "lupnt/core/constants.h"
#include "lupnt/interfaces/spice_cheby.h"
namespace lupnt {
Vec6 ItrfToGcrf(Real t_tdb, const Vec6& rv_itrf);
Vec3 ItrfToGcrf(Real t_tdb, const Vec3& rv_itrf);
Vec6 GcrfToItrf(Real t_tdb, const Vec6& rv_gcrf);
Vec3 GcrfToItrf(Real t_tdb, const Vec3& rv_gcrf);
Vec6 GcrfToEme(const Vec6& rv_gcrf);
Vec3 GcrfToEme(const Vec3& rv_gcrf);
Vec6 EmeToGcrf(const Vec6& rv_eme);
Vec3 EmeToGcrf(const Vec3& rv_eme);
Vec6 GcrfToIcrf(Real t_tdb, const Vec6& rv_gcrf);
Vec3 GcrfToIcrf(Real t_tdb, const Vec3& rv_gcrf);
Vec6 IcrfToGcrf(Real t_tdb, const Vec6& rv_icrf);
Vec3 IcrfToGcrf(Real t_tdb, const Vec3& rv_icrf);
Vec6 GcrfToMoonCi(Real t_tdb, const Vec6& rv_gcrf);
Vec3 GcrfToMoonCi(Real t_tdb, const Vec3& rv_gcrf);
Vec6 MoonCiToGcrf(Real t_tdb, const Vec6& rv_mi);
Vec3 MoonCiToGcrf(Real t_tdb, const Vec3& rv_mi);
Vec6 MoonCiToPa(Real t_tdb, const Vec6& rv_mi);
Vec3 MoonCiToPa(Real t_tdb, const Vec3& rv_mi);
Vec6 MoonPaToCi(Real t_tdb, const Vec6& rv_pa);
Vec3 MoonPaToCi(Real t_tdb, const Vec3& rv_pa);
Vec6 MoonPaToMe(const Vec6& rv_pa);
Vec3 MoonPaToMe(const Vec3& rv_pa);
Vec6 MoonMeToPa(const Vec6& rv_me);
Vec3 MoonMeToPa(const Vec3& rv_me);
Vec6 GcrfToEmr(Real t_tdb, const Vec6& rv_gcrf);
Vec3 GcrfToEmr(Real t_tdb, const Vec3& rv_gcrf);
Vec6 EmrToGcrf(Real t_tdb, const Vec6& rv_emr);
Vec3 EmrToGcrf(Real t_tdb, const Vec3& rv_emr);
Vec6 MoonCiToOp(Real t_tdb, const Vec6& rv_ci);
Vec3 MoonCiToOp(Real t_tdb, const Vec3& rv_ci);
Vec6 MoonOpToCi(Real t_tdb, const Vec6& rv_op);
Vec3 MoonOpToCi(Real t_tdb, const Vec3& rv_op);
// Rotations
Mat3 RotPrecessionNutation(Real t_tdb);
Mat3 RotSideralMotion(Real t_tdb);
Mat3 RotSideralMotionDot(Real t_tdb);
Mat3 RotPolarMotion(Real t_tdb);
Mat3d RotGcrfToEme();
Mat3d RotGcrfToEmeFirstOrder();
Mat3d RotGcrfToEmeSecondOrder();
Mat3 RotMoonCiToPa(Real t_tdb, Mat3* R_mi2pa_dot = nullptr);
Mat3d RotMoonPaToMe();
Mat3 RotMoonOpToCi(Real t_tdb);
// ---------------------------------------------------------------------
// SPICE-derived Earth orientation parameters (EOP)
// ---------------------------------------------------------------------
struct SpiceEopParams {
Real x_pole;
Real y_pole;
Real ut1_utc;
};
SpiceEopParams ComputeEopFromSpice(Real t_tdb);
// ---------------------------------------------------------------------
// SPICE-fitted high-accuracy Earth/lunar orientation (initialization)
// ---------------------------------------------------------------------
void InitFrameConversionFromSpice(Real t_start_tdb, Real t_end_tdb,
Real segment_length_s = 86400.0, int num_coeffs = 13);
void ClearFrameConversionFit();
bool HasFittedEarthOrientation(Real t_tdb);
bool HasFittedLunarOrientation(Real t_tdb);
} // namespace lupnt