Updated Timespan / Julian

feature/19
Daniel Warner 2011-06-10 12:41:11 +00:00
parent a53f06ebbf
commit 0f69c839b7
6 changed files with 78 additions and 61 deletions

View File

@ -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);
}

View File

@ -1,6 +1,6 @@
CC=g++
AR=ar
CFLAGS=-c -Wall -O2 -pedantic -ansi
CFLAGS=-c -Wall -g -pedantic -ansi
LDFLAGS=
SOURCES=CoordGeodetic.cpp \

View File

@ -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++;
};

View File

@ -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);
}

70
Timespan.cpp Normal file → Executable file
View File

@ -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 {

26
Timespan.h Normal file → Executable file
View File

@ -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;