More updates to Timespan and Julian
parent
0f69c839b7
commit
8cba7f685f
34
Julian.cpp
34
Julian.cpp
|
@ -97,7 +97,7 @@ bool Julian::operator==(const Julian &date) const {
|
||||||
|
|
||||||
bool Julian::operator!=(const Julian &date) const {
|
bool Julian::operator!=(const Julian &date) const {
|
||||||
|
|
||||||
return date_ == date.date_ ? false : true;
|
return !(*this == date);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Julian::operator>(const Julian &date) const {
|
bool Julian::operator>(const Julian &date) const {
|
||||||
|
@ -140,24 +140,34 @@ Julian& Julian::operator=(const double b) {
|
||||||
/*
|
/*
|
||||||
* arithmetic
|
* arithmetic
|
||||||
*/
|
*/
|
||||||
Julian Julian::operator+(const Timespan& b) const {
|
Julian Julian::operator +(const Timespan& b) const {
|
||||||
|
|
||||||
Julian result(*this);
|
return Julian(*this) += b;
|
||||||
result.date_ += b.GetTotalDays();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Julian Julian::operator-(const Timespan& b) const {
|
Julian Julian::operator-(const Timespan& b) const {
|
||||||
|
|
||||||
Julian result(*this);
|
return Julian(*this) -= b;
|
||||||
result.date_ -= b.GetTotalDays();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan Julian::operator-(const Julian& b) const {
|
Timespan Julian::operator-(const Julian& b) const {
|
||||||
|
|
||||||
Timespan result(date_ - b.date_);
|
return Timespan(date_ - b.date_);
|
||||||
return result;
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* compound assignment
|
||||||
|
*/
|
||||||
|
Julian & Julian::operator +=(const Timespan& b) {
|
||||||
|
|
||||||
|
date_ += b;
|
||||||
|
return (*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Julian & Julian::operator -=(const Timespan& b) {
|
||||||
|
|
||||||
|
date_ -= b;
|
||||||
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream & operator<<(std::ostream& stream, const Julian& julian) {
|
std::ostream & operator<<(std::ostream& stream, const Julian& julian) {
|
||||||
|
@ -165,13 +175,13 @@ std::ostream & operator<<(std::ostream& stream, const Julian& julian) {
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
struct Julian::DateTimeComponents datetime;
|
struct Julian::DateTimeComponents datetime;
|
||||||
julian.ToGregorian(&datetime);
|
julian.ToGregorian(&datetime);
|
||||||
out << std::right << std::fixed << std::setprecision(3) << std::setfill('0');
|
out << std::right << std::fixed << std::setprecision(6) << std::setfill('0');
|
||||||
out << std::setw(4) << datetime.years << "-";
|
out << std::setw(4) << datetime.years << "-";
|
||||||
out << std::setw(2) << datetime.months << "-";
|
out << std::setw(2) << datetime.months << "-";
|
||||||
out << std::setw(2) << datetime.days << " ";
|
out << std::setw(2) << datetime.days << " ";
|
||||||
out << std::setw(2) << datetime.hours << ":";
|
out << std::setw(2) << datetime.hours << ":";
|
||||||
out << std::setw(2) << datetime.minutes << ":";
|
out << std::setw(2) << datetime.minutes << ":";
|
||||||
out << std::setw(6) << datetime.seconds << " UTC";
|
out << std::setw(9) << datetime.seconds << " UTC";
|
||||||
stream << out.str();
|
stream << out.str();
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
24
Julian.h
24
Julian.h
|
@ -18,9 +18,7 @@ public:
|
||||||
~Julian() {
|
~Julian() {
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
// comparison operators
|
||||||
* comparison operators
|
|
||||||
*/
|
|
||||||
bool operator==(const Julian &date) const;
|
bool operator==(const Julian &date) const;
|
||||||
bool operator!=(const Julian &date) const;
|
bool operator!=(const Julian &date) const;
|
||||||
bool operator>(const Julian &date) const;
|
bool operator>(const Julian &date) const;
|
||||||
|
@ -28,16 +26,16 @@ public:
|
||||||
bool operator>=(const Julian &date) const;
|
bool operator>=(const Julian &date) const;
|
||||||
bool operator<=(const Julian &date) const;
|
bool operator<=(const Julian &date) const;
|
||||||
|
|
||||||
// asign Julian
|
// assignment
|
||||||
Julian & operator=(const Julian& b);
|
Julian& operator =(const Julian& b);
|
||||||
// assign double
|
Julian& operator =(const double b);
|
||||||
Julian & operator=(const double b);
|
// arithmetic
|
||||||
// add Timespan
|
Julian operator +(const Timespan& b) const;
|
||||||
Julian operator+(const Timespan& b) const;
|
Julian operator -(const Timespan& b) const;
|
||||||
// subtract Timespan
|
Timespan operator -(const Julian& b) const;
|
||||||
Julian operator-(const Timespan& b) const;
|
// compound assignment
|
||||||
// subtracting two Julians produces a Timespan
|
Julian & operator +=(const Timespan& b);
|
||||||
Timespan operator-(const Julian& b) const;
|
Julian & operator -=(const Timespan& b);
|
||||||
|
|
||||||
friend std::ostream & operator<<(std::ostream& stream, const Julian& julian);
|
friend std::ostream & operator<<(std::ostream& stream, const Julian& julian);
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
const int kPASS_TIME_STEP = 180; // time step in seconds, when searching for aos/los
|
||||||
|
|
||||||
double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& aos, const Julian& los) {
|
double FindMaxElevation(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& aos, const Julian& los) {
|
||||||
|
|
||||||
Observer obs(user_geo);
|
Observer obs(user_geo);
|
||||||
|
@ -120,7 +122,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian
|
||||||
/*
|
/*
|
||||||
* when two times are within a second, stop
|
* when two times are within a second, stop
|
||||||
*/
|
*/
|
||||||
if (((time2.GetDate() - time1.GetDate()) * kSECONDS_PER_DAY) < 1.0) {
|
if (((time2.GetDate() - time1.GetDate()) * kSECONDS_PER_DAY) < 0.5) {
|
||||||
searching = false;
|
searching = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,6 +138,9 @@ void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time,
|
||||||
Observer obs(user_geo);
|
Observer obs(user_geo);
|
||||||
Eci eci;
|
Eci eci;
|
||||||
|
|
||||||
|
Timespan time_step;
|
||||||
|
time_step.AddMinutes(kPASS_TIME_STEP);
|
||||||
|
|
||||||
bool first_run = true;
|
bool first_run = true;
|
||||||
Julian previous_time = start_time;
|
Julian previous_time = start_time;
|
||||||
|
|
||||||
|
@ -147,6 +152,7 @@ void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time,
|
||||||
Julian current_time = start_time;
|
Julian current_time = start_time;
|
||||||
while (current_time < end_time) {
|
while (current_time < end_time) {
|
||||||
|
|
||||||
|
// find position
|
||||||
sgp4.FindPosition(&eci, current_time);
|
sgp4.FindPosition(&eci, current_time);
|
||||||
CoordTopographic topo = obs.GetLookAngle(eci);
|
CoordTopographic topo = obs.GetLookAngle(eci);
|
||||||
|
|
||||||
|
@ -189,7 +195,7 @@ void AOSLOS(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian& start_time,
|
||||||
first_run = false;
|
first_run = false;
|
||||||
previous_time = current_time;
|
previous_time = current_time;
|
||||||
|
|
||||||
current_time.AddMin(1.0);
|
current_time += time_step;
|
||||||
if (current_time > end_time)
|
if (current_time > end_time)
|
||||||
current_time = end_time;
|
current_time = end_time;
|
||||||
};
|
};
|
||||||
|
|
14
Timespan.cpp
14
Timespan.cpp
|
@ -6,7 +6,7 @@ Timespan::Timespan()
|
||||||
: time_span_(0.0) {
|
: time_span_(0.0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan::Timespan(const double b){
|
Timespan::Timespan(const double b) {
|
||||||
|
|
||||||
time_span_ = b;
|
time_span_ = b;
|
||||||
}
|
}
|
||||||
|
@ -146,3 +146,15 @@ bool Timespan::operator <=(const Timespan & b) const {
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double& operator +=(double& a, const Timespan& b) {
|
||||||
|
|
||||||
|
a += b.time_span_;
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
double& operator -=(double& a, const Timespan& b) {
|
||||||
|
|
||||||
|
a -= b.time_span_;
|
||||||
|
return a;
|
||||||
|
}
|
|
@ -38,6 +38,9 @@ public:
|
||||||
bool operator>=(const Timespan& b) const;
|
bool operator>=(const Timespan& b) const;
|
||||||
bool operator<=(const Timespan& b) const;
|
bool operator<=(const Timespan& b) const;
|
||||||
|
|
||||||
|
friend double& operator +=(double& a, const Timespan& b);
|
||||||
|
friend double& operator -=(double& a, const Timespan& b);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*
|
/*
|
||||||
* stores value in minutes
|
* stores value in minutes
|
||||||
|
|
Loading…
Reference in New Issue