Updated THDT constant. Calculate real tsince

feature/19
Daniel Warner 2011-04-02 23:37:01 +01:00
parent ba84b41b60
commit ae8383d316
3 changed files with 23 additions and 16 deletions

View File

@ -212,7 +212,8 @@ time_t Julian::ToTime() const {
* Greenwich Mean Sidereal Time * Greenwich Mean Sidereal Time
*/ */
double Julian::ToGMST() const { double Julian::ToGMST() const {
double value;
double theta;
double tut1; double tut1;
// tut1 = Julian centuries from 2000 Jan. 1 12h UT1 (since J2000 which is 2451545.0) // tut1 = Julian centuries from 2000 Jan. 1 12h UT1 (since J2000 which is 2451545.0)
@ -220,16 +221,18 @@ double Julian::ToGMST() const {
tut1 = (date_ - 2451545.0) / 36525.0; tut1 = (date_ - 2451545.0) / 36525.0;
// Rotation angle in arcseconds // Rotation angle in arcseconds
value = 67310.54841 + (876600.0 * 3600.0 + 8640184.812866) * tut1 + 0.093104 * pow(tut1, 2.0) - 0.0000062 * pow(tut1, 3.0); theta = 67310.54841 + (876600.0 * 3600.0 + 8640184.812866) * tut1 + 0.093104 * pow(tut1, 2.0) - 0.0000062 * pow(tut1, 3.0);
// 360.0 / 86400.0 = 1.0 / 240.0 // 360.0 / 86400.0 = 1.0 / 240.0
value = fmod(Globals::Deg2Rad(value / 240.0), Globals::TWOPI()); theta = fmod(Globals::Deg2Rad(theta / 240.0), Globals::TWOPI());
// check quadrants /*
if (value < 0.0) * check quadrants
value += Globals::TWOPI(); */
if (theta < 0.0)
theta += Globals::TWOPI();
return value; return theta;
} }
/* /*

View File

@ -247,10 +247,14 @@ void SGDP4::Initialize(const double& theta2, const double& betao2, const double&
void SGDP4::FindPosition(Eci& eci, double tsince) { void SGDP4::FindPosition(Eci& eci, double tsince) {
Julian tsince_epoch = Epoch();
tsince_epoch.AddMin(tsince);
double actual_tsince = tsince_epoch.SpanMin(Epoch());
if (i_use_deep_space_) if (i_use_deep_space_)
FindPositionSDP4(eci, tsince); FindPositionSDP4(eci, actual_tsince);
else else
FindPositionSGP4(eci, tsince); FindPositionSGP4(eci, actual_tsince);
} }
void SGDP4::FindPositionSDP4(Eci& eci, double tsince) { void SGDP4::FindPositionSDP4(Eci& eci, double tsince) {
@ -622,7 +626,7 @@ void SGDP4::DeepSpaceInitialize(const double& eosq, const double& sinio, const d
static const double ROOT44 = 7.3636953E-9; static const double ROOT44 = 7.3636953E-9;
static const double ROOT52 = 1.1428639E-7; static const double ROOT52 = 1.1428639E-7;
static const double ROOT54 = 2.1765803E-9; static const double ROOT54 = 2.1765803E-9;
static const double THDT = 4.3752691E-3; static const double THDT = 4.37526908801129966e-3;
const double aqnv = 1.0 / RecoveredSemiMajorAxis(); const double aqnv = 1.0 / RecoveredSemiMajorAxis();
const double xpidot = omgdot + xnodot; const double xpidot = omgdot + xnodot;
@ -812,7 +816,7 @@ void SGDP4::DeepSpaceInitialize(const double& eosq, const double& sinio, const d
d_fasx4_ = 2.8843198; d_fasx4_ = 2.8843198;
d_fasx6_ = 0.37448087; d_fasx6_ = 0.37448087;
d_xlamo_ = fmod(MeanAnomoly() + AscendingNode() + ArgumentPerigee() - d_gsto_, Globals::TWOPI()); d_xlamo_ = MeanAnomoly() + AscendingNode() + ArgumentPerigee() - d_gsto_;
bfact = xmdot + xpidot - THDT; bfact = xmdot + xpidot - THDT;
bfact += d_ssl_ + d_ssg_ + d_ssh_; bfact += d_ssl_ + d_ssg_ + d_ssh_;
@ -909,7 +913,7 @@ void SGDP4::DeepSpaceInitialize(const double& eosq, const double& sinio, const d
d_d5421_ = temp * f542 * g521; d_d5421_ = temp * f542 * g521;
d_d5433_ = temp * f543 * g533; d_d5433_ = temp * f543 * g533;
d_xlamo_ = fmod(MeanAnomoly() + AscendingNode() + AscendingNode() - d_gsto_ - d_gsto_, Globals::TWOPI()); d_xlamo_ = MeanAnomoly() + AscendingNode() + AscendingNode() - d_gsto_ - d_gsto_;
bfact = xmdot + xnodot + xnodot - THDT - THDT; bfact = xmdot + xnodot + xnodot - THDT - THDT;
bfact = bfact + d_ssl_ + d_ssh_ + d_ssh_; bfact = bfact + d_ssl_ + d_ssh_ + d_ssh_;
} }
@ -1012,7 +1016,7 @@ void SGDP4::DeepSpacePeriodics(const double& t, double& em,
const double sinis = sin(xinc); const double sinis = sin(xinc);
const double cosis = cos(xinc); const double cosis = cos(xinc);
if (xinc >= 0.2) { if (Inclination() >= 0.2) {
/* /*
* apply periodics directly * apply periodics directly
*/ */

View File

@ -144,7 +144,7 @@ void RunTle(Tle tle, double start, double end, double inc) {
void RunTest() { void RunTest() {
#if 0 //#if 0
/* /*
# ------------------ Verification test cases ---------------------- # ------------------ Verification test cases ----------------------
@ -177,7 +177,7 @@ void RunTest() {
"1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985", "1 06251U 62025E 06176.82412014 .00008885 00000-0 12808-3 0 3985",
"2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774"), 0.0, 2880.0, 120.0); "2 06251 58.0579 54.0425 0030035 139.1568 221.1854 15.56387291 6774"), 0.0, 2880.0, 120.0);
#endif //#endif
/* /*
# MOLNIYA 2-14 # 12h resonant ecc in 0.65 to 0.7 range # MOLNIYA 2-14 # 12h resonant ecc in 0.65 to 0.7 range
1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813 1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813
@ -187,7 +187,7 @@ void RunTest() {
"1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813", "1 08195U 75081A 06176.33215444 .00000099 00000-0 11873-3 0 813",
"2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656"), 0.0, 2880.0, 120.0); "2 08195 64.1586 279.0717 6877146 264.7651 20.2257 2.00491383225656"), 0.0, 2880.0, 120.0);
return; //return;
/* /*
# MOLNIYA 1-36 ## fig 12h resonant ecc in 0.7 to 0.715 range # MOLNIYA 1-36 ## fig 12h resonant ecc in 0.7 to 0.715 range
1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814 1 09880U 77021A 06176.56157475 .00000421 00000-0 10000-3 0 9814