diff --git a/Julian.h b/Julian.h index ff332f9..aa7b6e7 100755 --- a/Julian.h +++ b/Julian.h @@ -28,16 +28,26 @@ public: bool operator>=(const Julian &date) const; bool operator<=(const Julian &date) const; + // asign Julian Julian & operator=(const Julian& b); + // assign double Julian & operator=(const double b); + // add Timespan Julian operator+(const Timespan& b) const; + // subtract Timespan Julian operator-(const Timespan& b) const; - + // subtracting two Julians produces a Timespan Timespan operator-(const Julian& b) const; friend std::ostream & operator<<(std::ostream& stream, const Julian& julian); struct DateTimeComponents { + + DateTimeComponents() + : years(0), months(0), days(0), + hours(0), minutes(0), seconds(0.0) { + } + int years; int months; int days; @@ -84,22 +94,6 @@ public: date_ += (sec / kSECONDS_PER_DAY); } - double SpanDay(const Julian& b) const { - return date_ - b.date_; - } - - double SpanHour(const Julian& b) const { - return SpanDay(b) * kHOURS_PER_DAY; - } - - double SpanMin(const Julian& b) const { - return SpanDay(b) * kMINUTES_PER_DAY; - } - - double SpanSec(const Julian& b) const { - return SpanDay(b) * kSECONDS_PER_DAY; - } - static bool IsLeapYear(int y) { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } diff --git a/Makefile b/Makefile index 4b65fcb..25f5f77 100755 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC=g++ AR=ar -CFLAGS=-c -Wall -O2 -pedantic -ansi +CFLAGS=-c -Wall -g -pedantic -ansi LDFLAGS= SOURCES=CoordGeodetic.cpp \ diff --git a/PassPredict.cpp b/PassPredict.cpp index e61132e..e332cd3 100755 --- a/PassPredict.cpp +++ b/PassPredict.cpp @@ -91,7 +91,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian Julian time1 = initial_time1; Julian time2 = initial_time2; - Julian middle_time = time1 + (time2.GetDate() - time1.GetDate()) / 2.0; + Julian middle_time = time1 + (time2 - time1) / 2.0; while (searching && loop_count < 25) { @@ -124,7 +124,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian searching = false; } - middle_time = time1 + (time2.GetDate() - time1.GetDate()) / 2.0; + middle_time = time1 + (time2 - time1) / 2.0; loop_count++; }; diff --git a/SGP4.cpp b/SGP4.cpp index 4933358..dfc879a 100755 --- a/SGP4.cpp +++ b/SGP4.cpp @@ -236,9 +236,9 @@ void SGP4::FindPosition(Eci* eci, double tsince) const { void SGP4::FindPosition(Eci* eci, const Julian& date) const { - const double tsince = date.SpanMin(Epoch()); + Timespan diff = date - Epoch(); - FindPosition(eci, tsince); + FindPosition(eci, diff.GetTotalMinutes()); } void SGP4::FindPositionSDP4(Eci* eci, double tsince) const { @@ -581,8 +581,9 @@ void SGP4::CalculateFinalPositionVelocity(Eci* eci, const double& tsince, const const double zdot = (rdotk * uz + rfdotk * vz) * kXKMPER / 60.0; Vector velocity(xdot, ydot, zdot); - Julian julian = Epoch(); - julian.AddMin(tsince); + Timespan diff; + diff.AddMinutes(tsince); + Julian julian = Epoch() + diff; (*eci) = Eci(julian, position, velocity); } diff --git a/Timespan.cpp b/Timespan.cpp old mode 100644 new mode 100755 index 7bb812d..55ebc17 --- a/Timespan.cpp +++ b/Timespan.cpp @@ -2,24 +2,38 @@ #include "Globals.h" -Timespan::Timespan(void) { +Timespan::Timespan() +: time_span_(0.0) { } -/* - * time_span is days and fraction of a day - */ -Timespan::Timespan(const double time_span) { - time_span_ = time_span; +Timespan::Timespan(const double b){ + + time_span_ = b; } Timespan::Timespan(const Timespan& b) { - time_span_ = b.time_span_; } Timespan::~Timespan(void) { } +void Timespan::AddDays(const double days) { + time_span_ += days; +} + +void Timespan::AddHours(const double hours) { + time_span_ += (hours / kHOURS_PER_DAY); +} + +void Timespan::AddMinutes(const double minutes) { + time_span_ += (minutes / kMINUTES_PER_DAY); +} + +void Timespan::AddSeconds(const double seconds) { + time_span_ += (seconds / kSECONDS_PER_DAY); +} + double Timespan::GetTotalDays() const { return time_span_; } @@ -40,49 +54,52 @@ Timespan& Timespan::operator =(const Timespan& b) { if (this != &b) { time_span_ = b.time_span_; - } return (*this); } Timespan Timespan::operator +(const Timespan& b) const { - Timespan result(*this); - result.time_span_ += b.GetTotalDays(); - return result; + return Timespan(*this) += b; } Timespan Timespan::operator -(const Timespan& b) const { - Timespan result(*this); - result.time_span_ -= b.GetTotalDays(); - return result; + return Timespan(*this) -= b; } -const Timespan & Timespan::operator+=(const Timespan& b) { +Timespan Timespan::operator/(const double b) const { + + return Timespan(*this) /= b; +} + +Timespan Timespan::operator*(const double b) const { + + return Timespan(*this) *= b; +} + +Timespan & Timespan::operator+=(const Timespan& b) { time_span_ += b.time_span_; return (*this); } -const Timespan & Timespan::operator-=(const Timespan& b) { +Timespan & Timespan::operator-=(const Timespan& b) { time_span_ -= b.time_span_; return (*this); } -Timespan Timespan::operator +() const { +Timespan & Timespan::operator/=(const double b) { - Timespan result(*this); - result.time_span_ = +result.time_span_; - return result; + time_span_ /= b; + return (*this); } -Timespan Timespan::operator -() const { +Timespan & Timespan::operator*=(const double b) { - Timespan result(*this); - result.time_span_ = -result.time_span_; - return result; + time_span_ *= b; + return (*this); } bool Timespan::operator ==(const Timespan& b) const { @@ -95,10 +112,7 @@ bool Timespan::operator ==(const Timespan& b) const { bool Timespan::operator !=(const Timespan& b) const { - if (time_span_ == b.time_span_) - return false; - else - return true; + return !(*this == b); } bool Timespan::operator>(const Timespan& b) const { diff --git a/Timespan.h b/Timespan.h old mode 100644 new mode 100755 index 6f7136f..e8ccff6 --- a/Timespan.h +++ b/Timespan.h @@ -3,26 +3,34 @@ class Timespan { public: - Timespan(void); - Timespan(const double time_span); + Timespan(); + Timespan(const double b); Timespan(const Timespan& b); virtual ~Timespan(void); + void AddDays(const double days); + void AddHours(const double hours); + void AddMinutes(const double minutes); + void AddSeconds(const double seconds); + double GetTotalDays() const; double GetTotalHours() const; double GetTotalMinutes() const; double GetTotalSeconds() const; - /* - * overloaded operators - */ + // assignment Timespan & operator=(const Timespan& b); + // arithmetic Timespan operator+(const Timespan& b) const; Timespan operator-(const Timespan& b) const; - Timespan operator+() const; - Timespan operator-() const; - const Timespan & operator+=(const Timespan& b); - const Timespan & operator-=(const Timespan& b); + Timespan operator/(const double b) const; + Timespan operator*(const double b) const; + // compound arithmetic + Timespan & operator+=(const Timespan& b); + Timespan & operator-=(const Timespan& b); + Timespan & operator/=(const double b); + Timespan & operator*=(const double b); + // comparison bool operator==(const Timespan& b) const; bool operator!=(const Timespan& b) const; bool operator>(const Timespan& b) const;