#pragma once #include "Matrix.h" const double RS = 4.848136811095 * pow(10, -6); struct precession_parameters { double m_ζα; double m_θα; double m_zα; friend std::ostream& operator<<(std::ostream& out, precession_parameters& input_pp); friend std::ofstream& operator<<(std::ofstream& out, precession_parameters& input_pp); }; struct fundamental_arguments { double λ; double l; double L; double F; double D; friend std::ostream& operator<<(std::ostream& out, fundamental_arguments& input_fa); friend std::ofstream& operator<<(std::ofstream& out, fundamental_arguments& input_fa); }; class ConvertSC { protected: const double m_rg = 0.017453292519943296; double m_ε{ 0 }; double Δψ{ 0 }; double Δε{ 0 }; double m_t{ 0 }, m_ts{ 0 }; Matrix m_precession{ 3,3 }; Matrix m_nutation{ 3,3 }; precession_parameters m_pp{ 0,0,0 }; fundamental_arguments m_fa{ 0,0,0,0,0 }; public: ConvertSC(double input_time = 0) : m_t{ input_time } { rewrite(); }; ~ConvertSC() {}; int settime(double input_TDB, bool i_rewrite = true) { m_t = input_TDB; if (i_rewrite) rewrite(); return 0; } int calculateTime() { m_ts = (m_t - 51544.5) / double(36525); return 0; } int calculatePrecessionParam(); int calculateMatrixPrecession(); int calculateAngleInclination() { m_ε = RS * (84381.448 - (46.815 + (0.0059 - 0.001813 * m_t) * m_t) * m_t); return 0; } int calculateFundamentalArguments(); int calculateNutationParameters(); int calculateMatrixNutation(); int rewrite(); double getΔψ() { return Δψ; } double getε() { return m_ε; } friend std::ostream& operator<<(std::ostream& out, ConvertSC& input_CSC); friend std::ofstream& operator<<(std::ofstream& out, ConvertSC& input_CSC); }; Matrix AEC_to_CC(Matrix &Precession); Matrix CC_to_TEC(Matrix& Precession, Matrix& Nutation); Matrix TEC_to_CC(Matrix& TEC); Matrix CC_to_TC(Matrix& Precession, Matrix& Nutation, Matrix& ERM); Matrix TC_to_CC(Matrix& CC_to_TC); Matrix SC_to_DC(Matrix& GEC);