Updated Timespan / Julian
parent
a53f06ebbf
commit
0f69c839b7
28
Julian.h
28
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);
|
||||
}
|
||||
|
|
2
Makefile
2
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 \
|
||||
|
|
|
@ -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++;
|
||||
};
|
||||
|
||||
|
|
9
SGP4.cpp
9
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue