-
GASpiridonov authoredGASpiridonov authored
Planets.h 7.13 KiB
#pragma once
#include "SystemCoords.h"
#include "m_time.h"
static Ot _MJDt;
class Moon : public ConvertSC {
private:
const double gravitational_parameter_Moon{ 4902.799 }; // гравитационный парметр луны
const double m_scalefactor{ 6378.43817285 }; //масштабный множитель для исправления неточности господина Брауна
double m_sin_πс{ 0 }; // синус паралакса
double m_Δλ_c{ 0 };
double m_β{ 0 };
double m_Rm{ 0 }; // расстояние до луны в текущий момент времени
double m_Ro{ 0 }; // расстояние от луны до объекта в ткущий момент времени
std::vector<double> m_s{ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
std::vector<double> m_r{ 0.0, 0.0, 0.0, 0.0, 0.0 };
fundamental_arguments m_cfa{ 0.0, 0.0, 0.0, 0.0, 0.0 };
Matrix m_F{ 3, 1 }; // вектор ускорения вызванного гравитацией луны
int calculate_s();
int calculate_r();
int calculateСorrecteFundamentalArg();
int calculate_sin_πс();
int calculate_Δλ_c();
int calculate_β();
int calculateRm();
int calculateRo(const Matrix& DC_coord_object);
public:
//время в формате TDB
Moon(double input_MJD) :ConvertSC{ _MJDt.convert_MJD_to_TDB(input_MJD) } {
calculateDC();
};
~Moon() {};
int calculateGEC(double input_MJD);
Matrix calculateFm(const Matrix& DC_coord_object, double input_MJD);
friend std::ostream& operator<<(std::ostream& out, Moon& i_moon);
friend std::ofstream& operator<<(std::ofstream& out, Moon& i_moon);
};
// Параметры спутника такие как масса, поперечное сечение, эмперический коэффициент отражения
struct satellite_parameters {
double mass; //масса
double cross_sectional_radius; //площадь поперечного сечения
double reflection_coefficient; //эмперический коэффициент отражения
};
class Sun :private ConvertSC {
private:
const double AU{ 149597870.691 }; // астрономическая единица
const double gravitational_parameter_Sun{ 132712438000 }; // гравитационный параметр солнца
const double light_pressure{ 4.5606e-6 };
double m_Rs{ 0 }; // расстояние до солнца в текущий момент времени
double m_Ro{ 0 }; // расстояний от солнца до обхекта в текщий момент времени
std::vector<double> m_M{ 0.0,0.0,0.0,0.0,0.0 };
Matrix m_perturbation{ 3,1 }; // возмущение в эклептической долготе, возмущение в эклептической широте, возмущение в расстоянии до Солнца
Matrix m_F{ 3, 1 }; //вектор ускорения вызванного притяжением солнца
Matrix m_P{ 3, 1 }; // вектор ускрения возванного давлением солнечного свет