Newer
Older
#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 };
GASpiridonov
committed
Matrix m_GEC{ 3, 1 }; //геоцентрические эклептические координаты
Matrix m_DC{ 3, 1 }; //прямоугольные координаты в небесной СК
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_ε;
}
int calculateDC();
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);