#pragma once #include "Matrix.h" const double RS = 4.848136811095E-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 }; //матрица нутации Matrix m_GEC{ 3, 1 }; //геоцентрические эклептические координаты Matrix m_DEC{ 3, 1 }; //геоцентрические прямоугольные координаты precession_parameters m_pp{ 0,0,0 }; // параметры прецессии fundamental_arguments m_fa{ 0,0,0,0,0 }; // фундумнтальные аргументы //установка новго времени void settime(double input_TDB) { m_t = input_TDB; m_ts = (m_t - 51544.5) / double(36525); } //ввычисление параметров прецессии void calculatePrecessionParam(); //вычисление матрицы прецессии void calculateMatrixPrecession(); //вычисление угла наклона эклептики void calculateAngleInclination() { m_ε = RS * (84381.448 - (46.815 + (0.0059 - 0.001813 * m_ts) * m_ts) * m_ts); } //вычисление фундументальных аргументов void calculateFundamentalArguments(); //вычисление парамтров нутации void calculateNutationParameters(); //вычисление матрицы нутации void calculateMatrixNutation(); //перевод геоцентрических эклиптических координат в прямоугольные координаты в экватариальной системе void calculateDC(); public: //время в формате TDB ConvertSC(double input_time = 0) : m_t{ input_time } { recalc(m_t); }; ~ConvertSC() {}; //перерасчет void recalc(double input_TDB); double getΔψ() { return Δψ; } double getΔε() { return Δε; } double getε() { return m_ε; } const Matrix& getDC() { return m_DEC; } const Matrix& getGEC() { return m_GEC; } precession_parameters& getPP() { return m_pp; } fundamental_arguments& getfundumental() { return m_fa; } const Matrix& getMatrixPrecessinon() { return m_precession; } const Matrix& getMatrixNutation() { return m_nutation; } double get_ts() { return m_ts; }; friend std::ostream& operator<<(std::ostream& out, ConvertSC& input_CSC); friend std::ofstream& operator<<(std::ofstream& out, ConvertSC& input_CSC); }; Matrix Earth_rot_matrix(double GTST); 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);