Newer
Older
#pragma once
#include "Matrix.h"
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 Δψ{ 0 };
double Δε{ 0 };
double m_t{ 0 }, m_ts{ 0 };
Matrix m_precession{ 3,3 }; // матрица прецессии
Matrix m_nutation{ 3,3 }; //матрица нутации
GASpiridonov
committed
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& 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);