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;
|
||||||
bool operator<=(const Julian &date) const;
|
bool operator<=(const Julian &date) const;
|
||||||
|
|
||||||
|
// asign Julian
|
||||||
Julian & operator=(const Julian& b);
|
Julian & operator=(const Julian& b);
|
||||||
|
// assign double
|
||||||
Julian & operator=(const double b);
|
Julian & operator=(const double b);
|
||||||
|
// add Timespan
|
||||||
Julian operator+(const Timespan& b) const;
|
Julian operator+(const Timespan& b) const;
|
||||||
|
// subtract Timespan
|
||||||
Julian operator-(const Timespan& b) const;
|
Julian operator-(const Timespan& b) const;
|
||||||
|
// subtracting two Julians produces a Timespan
|
||||||
Timespan operator-(const Julian& b) const;
|
Timespan operator-(const Julian& b) const;
|
||||||
|
|
||||||
friend std::ostream & operator<<(std::ostream& stream, const Julian& julian);
|
friend std::ostream & operator<<(std::ostream& stream, const Julian& julian);
|
||||||
|
|
||||||
struct DateTimeComponents {
|
struct DateTimeComponents {
|
||||||
|
|
||||||
|
DateTimeComponents()
|
||||||
|
: years(0), months(0), days(0),
|
||||||
|
hours(0), minutes(0), seconds(0.0) {
|
||||||
|
}
|
||||||
|
|
||||||
int years;
|
int years;
|
||||||
int months;
|
int months;
|
||||||
int days;
|
int days;
|
||||||
|
@ -84,22 +94,6 @@ public:
|
||||||
date_ += (sec / kSECONDS_PER_DAY);
|
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) {
|
static bool IsLeapYear(int y) {
|
||||||
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
|
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
|
||||||
}
|
}
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
||||||
CC=g++
|
CC=g++
|
||||||
AR=ar
|
AR=ar
|
||||||
CFLAGS=-c -Wall -O2 -pedantic -ansi
|
CFLAGS=-c -Wall -g -pedantic -ansi
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
|
|
||||||
SOURCES=CoordGeodetic.cpp \
|
SOURCES=CoordGeodetic.cpp \
|
||||||
|
|
|
@ -91,7 +91,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian
|
||||||
Julian time1 = initial_time1;
|
Julian time1 = initial_time1;
|
||||||
Julian time2 = initial_time2;
|
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) {
|
while (searching && loop_count < 25) {
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ Julian FindCrossingPoint(const CoordGeodetic& user_geo, SGP4& sgp4, const Julian
|
||||||
searching = false;
|
searching = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
middle_time = time1 + (time2.GetDate() - time1.GetDate()) / 2.0;
|
middle_time = time1 + (time2 - time1) / 2.0;
|
||||||
loop_count++;
|
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 {
|
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 {
|
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;
|
const double zdot = (rdotk * uz + rfdotk * vz) * kXKMPER / 60.0;
|
||||||
Vector velocity(xdot, ydot, zdot);
|
Vector velocity(xdot, ydot, zdot);
|
||||||
|
|
||||||
Julian julian = Epoch();
|
Timespan diff;
|
||||||
julian.AddMin(tsince);
|
diff.AddMinutes(tsince);
|
||||||
|
Julian julian = Epoch() + diff;
|
||||||
(*eci) = Eci(julian, position, velocity);
|
(*eci) = Eci(julian, position, velocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,24 +2,38 @@
|
||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
|
|
||||||
Timespan::Timespan(void) {
|
Timespan::Timespan()
|
||||||
|
: time_span_(0.0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
Timespan::Timespan(const double b){
|
||||||
* time_span is days and fraction of a day
|
|
||||||
*/
|
time_span_ = b;
|
||||||
Timespan::Timespan(const double time_span) {
|
|
||||||
time_span_ = time_span;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan::Timespan(const Timespan& b) {
|
Timespan::Timespan(const Timespan& b) {
|
||||||
|
|
||||||
time_span_ = b.time_span_;
|
time_span_ = b.time_span_;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan::~Timespan(void) {
|
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 {
|
double Timespan::GetTotalDays() const {
|
||||||
return time_span_;
|
return time_span_;
|
||||||
}
|
}
|
||||||
|
@ -40,49 +54,52 @@ Timespan& Timespan::operator =(const Timespan& b) {
|
||||||
|
|
||||||
if (this != &b) {
|
if (this != &b) {
|
||||||
time_span_ = b.time_span_;
|
time_span_ = b.time_span_;
|
||||||
|
|
||||||
}
|
}
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan Timespan::operator +(const Timespan& b) const {
|
Timespan Timespan::operator +(const Timespan& b) const {
|
||||||
|
|
||||||
Timespan result(*this);
|
return Timespan(*this) += b;
|
||||||
result.time_span_ += b.GetTotalDays();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan Timespan::operator -(const Timespan& b) const {
|
Timespan Timespan::operator -(const Timespan& b) const {
|
||||||
|
|
||||||
Timespan result(*this);
|
return Timespan(*this) -= b;
|
||||||
result.time_span_ -= b.GetTotalDays();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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_;
|
time_span_ += b.time_span_;
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Timespan & Timespan::operator-=(const Timespan& b) {
|
Timespan & Timespan::operator-=(const Timespan& b) {
|
||||||
|
|
||||||
time_span_ -= b.time_span_;
|
time_span_ -= b.time_span_;
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan Timespan::operator +() const {
|
Timespan & Timespan::operator/=(const double b) {
|
||||||
|
|
||||||
Timespan result(*this);
|
time_span_ /= b;
|
||||||
result.time_span_ = +result.time_span_;
|
return (*this);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Timespan Timespan::operator -() const {
|
Timespan & Timespan::operator*=(const double b) {
|
||||||
|
|
||||||
Timespan result(*this);
|
time_span_ *= b;
|
||||||
result.time_span_ = -result.time_span_;
|
return (*this);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Timespan::operator ==(const Timespan& b) const {
|
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 {
|
bool Timespan::operator !=(const Timespan& b) const {
|
||||||
|
|
||||||
if (time_span_ == b.time_span_)
|
return !(*this == b);
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Timespan::operator>(const Timespan& b) const {
|
bool Timespan::operator>(const Timespan& b) const {
|
||||||
|
|
|
@ -3,26 +3,34 @@
|
||||||
|
|
||||||
class Timespan {
|
class Timespan {
|
||||||
public:
|
public:
|
||||||
Timespan(void);
|
Timespan();
|
||||||
Timespan(const double time_span);
|
Timespan(const double b);
|
||||||
Timespan(const Timespan& b);
|
Timespan(const Timespan& b);
|
||||||
virtual ~Timespan(void);
|
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 GetTotalDays() const;
|
||||||
double GetTotalHours() const;
|
double GetTotalHours() const;
|
||||||
double GetTotalMinutes() const;
|
double GetTotalMinutes() const;
|
||||||
double GetTotalSeconds() const;
|
double GetTotalSeconds() const;
|
||||||
|
|
||||||
/*
|
// assignment
|
||||||
* overloaded operators
|
|
||||||
*/
|
|
||||||
Timespan & operator=(const Timespan& b);
|
Timespan & operator=(const Timespan& b);
|
||||||
|
// arithmetic
|
||||||
Timespan operator+(const Timespan& b) const;
|
Timespan operator+(const Timespan& b) const;
|
||||||
Timespan operator-(const Timespan& b) const;
|
Timespan operator-(const Timespan& b) const;
|
||||||
Timespan operator+() const;
|
Timespan operator/(const double b) const;
|
||||||
Timespan operator-() const;
|
Timespan operator*(const double b) const;
|
||||||
const Timespan & operator+=(const Timespan& b);
|
// compound arithmetic
|
||||||
const Timespan & operator-=(const Timespan& b);
|
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;
|
bool operator!=(const Timespan& b) const;
|
||||||
bool operator>(const Timespan& b) const;
|
bool operator>(const Timespan& b) const;
|
||||||
|
|
Loading…
Reference in New Issue