Skip to content
Snippets Groups Projects
SystemCoords.h 2.21 KiB
Newer Older
	friend std::ostream& operator<<(std::ostream& out, precession_parameters& input_pp);
	friend std::ofstream& operator<<(std::ofstream& out, precession_parameters& input_pp);
	friend std::ostream& operator<<(std::ostream& out, fundamental_arguments& input_fa);
	friend std::ofstream& operator<<(std::ofstream& out, fundamental_arguments& input_fa);
	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_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();
	int recalc(double input_TDB = 0);
	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);