Skip to content
Snippets Groups Projects
SystemCoords.cpp 7.01 KiB
Newer Older
#include "SystemCoords.h"
int ConvertSC::calculatePrecessionParam() {
	m_pp.m_ζα = RS * (2306.2181 + (0.30188 + 0.017998 * m_ts) * m_ts) * m_ts;
	m_pp.m_θα = RS * (2004.3109 - (0.42665 + 0.041833 * m_ts) * m_ts) * m_ts;
	m_pp.m_zα = RS * (2306.2181 + (1.09468 + 0.018203 * m_ts) * m_ts) * m_ts;
	Matrix a = Matrix::RotationOY(m_pp.m_θα);
	Matrix b = Matrix::RotationOZ(-m_pp.m_ζα);
	Matrix c = Matrix::RotationOZ(-m_pp.m_zα);
	Matrix R = a * b;
	m_precession = c * R;
	return 0;
}

	m_fa.λ = m_rg * (218.31643250 + (481267.8812772222 - (0.00161167 - 0.00000528 * m_ts) * m_ts) * m_ts);
	m_fa.l = m_rg * (134.96298139 + (477198.8673980556 + (0.00869722 + 0.00001778 * m_ts) * m_ts) * m_ts);
	m_fa.L = m_rg * (357.52772333 + (35999.05034 - (0.00016028 + 0.00000333 * m_ts) * m_ts) * m_ts);
	m_fa.F = m_rg * (93.27191028 + (483202.0175380555 - (0.00368250 - 0.00000306 * m_ts) * m_ts) * m_ts);
	m_fa.D = m_rg * (297.85036306 + (445267.11148 - (0.00191417 - 0.00000528 * m_ts) * m_ts) * m_ts);
	return 0;
}

int ConvertSC::calculateNutationParameters() {
	Δψ = RS * ((-17.1996 - 0.01742 * m_ts) * sin(m_fa.λ - m_fa.F) + (0.2062 + 0.00002 * m_ts) * sin(2 * m_fa.λ - 2 * m_fa.F) +
		0.0046 * sin(m_fa.λ - 2 * m_fa.l + m_fa.F) + 0.0011 * sin(2 * m_fa.l - 2 * m_fa.F) -
		(1.3187 + 0.00016 * m_ts) * sin(2 * m_fa.λ - 2 * m_fa.D) + (0.1426 - 0.00034 * m_ts) * sin(m_fa.L) -
		(0.0517 - 0.00012 * m_ts) * sin(2 * m_fa.λ + m_fa.L - 2 * m_fa.D) + (0.0217 - 0.00005 * m_ts) *
		sin(2 * m_fa.λ - m_fa.L - 2 * m_fa.D) + (0.0129 + 0.00001 * m_ts) * sin(m_fa.λ + m_fa.F - 2 * m_fa.D) +
		0.0048 * sin(2 * m_fa.l - 2 * m_fa.D) - 0.0022 * sin(2 * m_fa.F - 2 * m_fa.D) + (0.0017 - 0.00001 * m_ts) * sin(2 * m_fa.L) -
		(0.0016 - 0.00001 * m_ts) * sin(2 * m_fa.λ + 2 * m_fa.L - 2 * m_fa.D) - 0.0015 * sin(m_fa.λ + m_fa.L - m_fa.F) -
		0.0012 * sin(m_fa.λ - m_fa.L - m_fa.F));

	Δψ += RS * ((-0.2274 - 0.00002 * m_ts) * sin(2 * m_fa.λ) + (0.0712 + 0.00001 * m_ts) * sin(m_fa.l) -
		(0.0386 + 0.00004 * m_ts) * sin(m_fa.λ + m_fa.F) - 0.0301 * sin(2 * m_fa.λ + m_fa.l) - 0.0158 * sin(m_fa.l - 2 * m_fa.D) +
		0.0123 * sin(2 * m_fa.λ - m_fa.l) + 0.0063 * sin(2 * m_fa.D) + (0.0063 + 0.00001 * m_ts) * sin(m_fa.λ + m_fa.l - m_fa.F) -
		(0.0058 + 0.00001 * m_ts) * sin(m_fa.λ - m_fa.l - m_fa.F) - 0.0059 * sin(2 * m_fa.λ - m_fa.l + 2 * m_fa.D) -
		0.0051 * sin(m_fa.λ + m_fa.l + m_fa.F) - 0.0038 * sin(2 * m_fa.λ + 2 * m_fa.D) + 0.0029 * sin(2 * m_fa.l) +
		0.0029 * sin(2 * m_fa.λ + m_fa.l - 2 * m_fa.D) - 0.0031 * sin(2 * m_fa.λ + 2 * m_fa.l) + 0.0026 * sin(2 * m_fa.F) +
		0.0021 * sin(m_fa.λ - m_fa.l + m_fa.F) + 0.0016 * sin(m_fa.λ - m_fa.l - m_fa.F + 2 * m_fa.D) -
		0.0013 * sin(m_fa.λ + m_fa.l - m_fa.F - 2 * m_fa.D) - 0.0010 * sin(m_fa.λ - m_fa.l + m_fa.F + 2 * m_fa.D));
	Δε = RS * ((9.2025 + 0.00089 * m_ts) * cos(m_fa.λ - m_fa.F) - (0.0895 - 0.00005 * m_ts) * cos(2 * m_fa.λ - 2 * m_fa.F) -
		0.0024 * cos(m_fa.λ - 2 * m_fa.l + m_fa.F) + (0.5736 - 0.00031 * m_ts) * cos(2 * m_fa.λ - 2 * m_fa.D) +
		(0.0054 - 0.00001 * m_ts) * cos(m_fa.L) + (0.0224 - 0.00006 * m_ts) * cos(2 * m_fa.λ + m_fa.L - 2 * m_fa.D) -
		(0.0095 - 0.00003 * m_ts) * cos(2 * m_fa.λ - m_fa.L - 2 * m_fa.D) - 0.0070 * cos(m_fa.λ + m_fa.F - 2 * m_fa.D));
	Δε += RS * ((0.0977 - 0.00005 * m_ts) * cos(2 * m_fa.λ) + 0.0200 * cos(m_fa.λ + m_fa.F) + (0.0129 - 0.00001 * m_ts) *
		cos(2 * m_fa.λ + 2 * m_fa.l) - 0.0053 * cos(2 * m_fa.λ - m_fa.l) - 0.0033 * cos(m_fa.λ + m_fa.l - m_fa.F) +
		0.0032 * cos(m_fa.λ - m_fa.l - m_fa.F) + 0.0026 * cos(2 * m_fa.λ - m_fa.l + 2 * m_fa.D) + 0.0027 * cos(m_fa.λ + m_fa.l + m_fa.F) +
		0.0016 * cos(2 * m_fa.λ + 2 * m_fa.D) - 0.0012 * cos(2 * m_fa.λ + m_fa.l - 2 * m_fa.D) + 0.0013 * cos(2 * m_fa.λ + 2 * m_fa.l) -
		0.0010 * cos(m_fa.λ - m_fa.l + m_fa.F));
	return 0;
};

	Matrix a = Matrix::RotationOZ(-Δψ);
	Matrix b = Matrix::RotationOX(m_ε);
	Matrix c = Matrix::RotationOX(-m_ε - Δε);
	Matrix buff = a * b;
	m_nutation = c * buff;
	return 0;
}

	calculateTime();
	calculatePrecessionParam();
	calculateMatrixPrecession();
	calculateAngleInclination();
	calculateFundamentalArguments();
	calculateNutationParameters();
	calculateMatrixNutation();
	return 0;
int ConvertSC::recalc(double input_TDB)
{
	settime(input_TDB);
	calculateDC();
	return 0;
}

int ConvertSC::calculateDC()
{
	Matrix buff1 = AEC_to_CC(m_precession);
	Matrix buff2 = Matrix::RotationOX(-m_ε);
	Matrix R = buff1 * buff2;
	m_DC = SC_to_DC(m_GEC);
	m_DC = R * m_DC;
	return 0;
}

Matrix Earth_rot_matrix(double GTST) {
	return Matrix::RotationOZ(GTST);
}
//
//std::ostream& operator<<(std::ostream& out, precession_parameters& input_pp)
//{
//	out << "-------------------------------------------------------------"
//		<< "\nPrecession parameters\n" << "ζα = " << input_pp.m_ζα
//		<< "\nθα = " << input_pp.m_θα << "\nm_zα = " << input_pp.m_zα
//		<< "\n-------------------------------------------------------------";
//	return out;
//}
//
//std::ofstream& operator<<(std::ofstream& out, precession_parameters& input_pp)
//{
//	out << input_pp;
//	return out;
//}
//
//std::ostream& operator<<(std::ostream& out, fundamental_arguments& input_fa)
//{
//	out << "\n-------------------------------------------------------------"
//		<< "\nfundamental arguments"
//		<< "\nλ = " << input_fa.λ << "\nl = " << input_fa.l
//		<< "\nL = " << input_fa.L << "\nF = " << input_fa.F
//		<< "\nD = " << input_fa.D
//		<< "\n-------------------------------------------------------------";
//	return out;
//}
//
//std::ofstream& operator<<(std::ofstream& out, fundamental_arguments& input_fa)
//{
//	out << input_fa;
//	return out;
//}
//
//std::ostream& operator<<(std::ostream& out, ConvertSC& input_CSC)
//{
//	out << "\n*************************************************************"
//		<< "\nFields of the ConvertCS class"
//		<< "\nm_ε = " << input_CSC.m_ε << "\nΔψ = " << input_CSC.Δψ
//		<< "\nm_Δε = " << input_CSC.Δε << "\nm_t = " << input_CSC.m_t
//		<< "\nm_ts = " << input_CSC.m_ts << "\nprecession parameters = " << input_CSC.m_pp
//		<< "\nprecession matrix = " << input_CSC.m_precession << "\nnutation matrix = " << input_CSC.m_nutation
//		<< "\nfundamental arguments = " << input_CSC.m_fa;
//	return out;
//}

std::ofstream& operator<<(std::ofstream& out, ConvertSC& input_CSC)
{
	out << input_CSC;
	return out;
}

Matrix AEC_to_CC(Matrix& Precession) {
	return (Precession.Transpose());
}

Matrix CC_to_TEC(Matrix& Precession, Matrix& Nutation)
{
	return (Nutation * Precession);
}

Matrix TEC_to_CC(Matrix& TEC)
{
	return TEC.Transpose();
}

Matrix CC_to_TC(Matrix& Precession, Matrix& Nutation, Matrix& ERM)
{
	Matrix buf = CC_to_TEC(Precession, Nutation);
}

Matrix TC_to_CC(Matrix& CC_to_TC)
{
	return CC_to_TC.Transpose();
}

Matrix SC_to_DC(Matrix& GEC) {
	return(Matrix{ 3, 1, {GEC(2,0) * cos(GEC(1, 0)) * cos(GEC(0,0)),
						  GEC(2,0) * cos(GEC(1, 0)) * sin(GEC(0,0)),
						  GEC(2,0) * sin(GEC(1, 0)) } });
};