275 lines
6.4 KiB
C++
275 lines
6.4 KiB
C++
#ifndef SGDP4_H_
|
|
#define SGDP4_H_
|
|
|
|
#include "Tle.h"
|
|
#include "Eci.h"
|
|
|
|
class SGP4 {
|
|
public:
|
|
SGP4(void);
|
|
virtual ~SGP4(void);
|
|
|
|
void SetTle(const Tle& tle);
|
|
void FindPosition(Eci* eci, double tsince) const;
|
|
void FindPosition(Eci* eci, const Julian& date) const;
|
|
|
|
/*
|
|
* XMO
|
|
*/
|
|
double MeanAnomoly() const {
|
|
return mean_anomoly_;
|
|
}
|
|
|
|
/*
|
|
* XNODEO
|
|
*/
|
|
double AscendingNode() const {
|
|
return ascending_node_;
|
|
}
|
|
|
|
/*
|
|
* OMEGAO
|
|
*/
|
|
double ArgumentPerigee() const {
|
|
return argument_perigee_;
|
|
}
|
|
|
|
/*
|
|
* EO
|
|
*/
|
|
double Eccentricity() const {
|
|
return eccentricity_;
|
|
}
|
|
|
|
/*
|
|
* XINCL
|
|
*/
|
|
double Inclination() const {
|
|
return inclination_;
|
|
}
|
|
|
|
/*
|
|
* XNO
|
|
*/
|
|
double MeanMotion() const {
|
|
return mean_motion_;
|
|
}
|
|
|
|
/*
|
|
* BSTAR
|
|
*/
|
|
double BStar() const {
|
|
return bstar_;
|
|
}
|
|
|
|
/*
|
|
* AODP
|
|
*/
|
|
double RecoveredSemiMajorAxis() const {
|
|
return recovered_semi_major_axis_;
|
|
}
|
|
|
|
/*
|
|
* XNODP
|
|
*/
|
|
double RecoveredMeanMotion() const {
|
|
return recovered_mean_motion_;
|
|
}
|
|
|
|
/*
|
|
* PERIGE
|
|
*/
|
|
double Perigee() const {
|
|
return perigee_;
|
|
}
|
|
|
|
double Period() const {
|
|
return period_;
|
|
}
|
|
|
|
/*
|
|
* EPOCH
|
|
*/
|
|
Julian Epoch() const {
|
|
return epoch_;
|
|
}
|
|
|
|
unsigned int OrbitNumber() const {
|
|
return orbit_number_;
|
|
}
|
|
|
|
private:
|
|
void Initialize(const double& theta2, const double& betao2, const double& betao, const double& eosq);
|
|
void DeepSpaceInitialize(const double& eosq, const double& sinio, const double& cosio, const double& betao,
|
|
const double& theta2, const double& betao2,
|
|
const double& xmdot, const double& omgdot, const double& xnodot);
|
|
void DeepSpaceCalculateLunarSolarTerms(const double t, double* pe, double* pinc,
|
|
double* pl, double* pgh, double* ph) const;
|
|
void DeepSpacePeriodics(const double& t, double* em, double* xinc,
|
|
double* omgasm, double* xnodes, double* xll) const;
|
|
void DeepSpaceSecular(const double& t, double* xll, double* omgasm,
|
|
double* xnodes, double* em, double* xinc, double* xn) const;
|
|
void FindPositionSDP4(Eci* eci, double tsince) const;
|
|
void FindPositionSGP4(Eci* eci, double tsince) const;
|
|
void CalculateFinalPositionVelocity(Eci* eci, const double& tsince, const double& e,
|
|
const double& a, const double& omega, const double& xl, const double& xnode,
|
|
const double& xincl, const double& xlcof, const double& aycof,
|
|
const double& x3thm1, const double& x1mth2, const double& x7thm1,
|
|
const double& cosio, const double& sinio) const;
|
|
void DeepSpaceCalcDotTerms(double* xndot, double* xnddt, double* xldot) const;
|
|
void DeepSpaceIntegrator(const double delt, const double step2,
|
|
const double xndot, const double xnddt, const double xldot)const;
|
|
void ResetGlobalVariables();
|
|
|
|
bool first_run_;
|
|
bool use_simple_model_;
|
|
bool use_deep_space_;
|
|
|
|
/*
|
|
* variables are constants that wont be modified outside init
|
|
*/
|
|
double i_cosio_;
|
|
double i_sinio_;
|
|
double i_eta_;
|
|
double i_t2cof_;
|
|
double i_a3ovk2_;
|
|
double i_x1mth2_;
|
|
double i_x3thm1_;
|
|
double i_x7thm1_;
|
|
double i_aycof_;
|
|
double i_xlcof_;
|
|
double i_xnodcf_;
|
|
double i_c1_;
|
|
double i_c4_;
|
|
double i_omgdot_; // secular rate of omega (radians/sec)
|
|
double i_xnodot_; // secular rate of xnode (radians/sec)
|
|
double i_xmdot_; // secular rate of xmo (radians/sec)
|
|
/*
|
|
* sgp4 constant
|
|
*/
|
|
double n_c5_;
|
|
double n_omgcof_;
|
|
double n_xmcof_;
|
|
double n_delmo_;
|
|
double n_sinmo_;
|
|
double n_d2_;
|
|
double n_d3_;
|
|
double n_d4_;
|
|
double n_t3cof_;
|
|
double n_t4cof_;
|
|
double n_t5cof_;
|
|
/*
|
|
* sdp4 constant
|
|
*/
|
|
double d_gsto_;
|
|
double d_zmol_;
|
|
double d_zmos_;
|
|
/*
|
|
* whether the deep space orbit is
|
|
* geopotential resonance for 12 hour orbits
|
|
*/
|
|
bool d_resonance_flag_;
|
|
/*
|
|
* whether the deep space orbit is
|
|
* 24h synchronous resonance
|
|
*/
|
|
bool d_synchronous_flag_;
|
|
/*
|
|
* lunar / solar constants for epoch
|
|
* applied during DeepSpaceSecular()
|
|
*/
|
|
double d_sse_;
|
|
double d_ssi_;
|
|
double d_ssl_;
|
|
double d_ssg_;
|
|
double d_ssh_;
|
|
/*
|
|
* lunar / solar constants
|
|
* used during DeepSpaceCalculateLunarSolarTerms()
|
|
*/
|
|
double d_se2_;
|
|
double d_si2_;
|
|
double d_sl2_;
|
|
double d_sgh2_;
|
|
double d_sh2_;
|
|
double d_se3_;
|
|
double d_si3_;
|
|
double d_sl3_;
|
|
double d_sgh3_;
|
|
double d_sh3_;
|
|
double d_sl4_;
|
|
double d_sgh4_;
|
|
double d_ee2_;
|
|
double d_e3_;
|
|
double d_xi2_;
|
|
double d_xi3_;
|
|
double d_xl2_;
|
|
double d_xl3_;
|
|
double d_xl4_;
|
|
double d_xgh2_;
|
|
double d_xgh3_;
|
|
double d_xgh4_;
|
|
double d_xh2_;
|
|
double d_xh3_;
|
|
/*
|
|
* used during DeepSpaceCalcDotTerms()
|
|
*/
|
|
double d_d2201_;
|
|
double d_d2211_;
|
|
double d_d3210_;
|
|
double d_d3222_;
|
|
double d_d4410_;
|
|
double d_d4422_;
|
|
double d_d5220_;
|
|
double d_d5232_;
|
|
double d_d5421_;
|
|
double d_d5433_;
|
|
double d_del1_;
|
|
double d_del2_;
|
|
double d_del3_;
|
|
/*
|
|
* integrator constants
|
|
*/
|
|
double d_xfact_;
|
|
double d_xlamo_;
|
|
/*
|
|
* integrator values
|
|
*/
|
|
mutable double d_xli_;
|
|
mutable double d_xni_;
|
|
mutable double d_atime_;
|
|
/*
|
|
* integrator values for epoch
|
|
*/
|
|
double d_xndot_0_;
|
|
double d_xnddt_0_;
|
|
double d_xldot_0_;
|
|
/*
|
|
* itegrator values for current d_atime_
|
|
*/
|
|
mutable double d_xndot_t_;
|
|
mutable double d_xnddt_t_;
|
|
mutable double d_xldot_t_;
|
|
|
|
/*
|
|
* these variables are set at the very start
|
|
* and should not be changed after that
|
|
*/
|
|
double mean_anomoly_;
|
|
double ascending_node_;
|
|
double argument_perigee_;
|
|
double eccentricity_;
|
|
double inclination_;
|
|
double mean_motion_;
|
|
double bstar_;
|
|
double recovered_semi_major_axis_;
|
|
double recovered_mean_motion_;
|
|
double perigee_;
|
|
double period_;
|
|
Julian epoch_;
|
|
unsigned int orbit_number_;
|
|
};
|
|
|
|
#endif
|
|
|