sgp4/Julian.h

112 lines
2.6 KiB
C
Raw Normal View History

2011-03-24 15:55:10 +00:00
#ifndef JULIAN_H_
#define JULIAN_H_
#include "Globals.h"
2011-04-07 13:56:02 +00:00
#include "Timespan.h"
2011-03-24 15:55:10 +00:00
#include <ctime>
2011-05-27 09:40:19 +00:00
#include <iostream>
2011-03-24 15:55:10 +00:00
class Julian {
public:
Julian();
Julian(const Julian& jul);
Julian(const time_t t);
Julian(int year, double day);
Julian(int year, int mon, int day, int hour, int min, double sec);
2011-05-27 09:40:19 +00:00
~Julian() {
};
2011-04-05 14:06:45 +00:00
/*
* comparison operators
*/
bool operator==(const Julian &date) const;
bool operator!=(const Julian &date) const;
2011-04-05 14:06:45 +00:00
bool operator>(const Julian &date) const;
bool operator<(const Julian &date) const;
bool operator>=(const Julian &date) const;
bool operator<=(const Julian &date) const;
2011-06-10 12:41:11 +00:00
// asign Julian
Julian & operator=(const Julian& b);
2011-06-10 12:41:11 +00:00
// assign double
Julian & operator=(const double b);
2011-06-10 12:41:11 +00:00
// add Timespan
Julian operator+(const Timespan& b) const;
2011-06-10 12:41:11 +00:00
// subtract Timespan
Julian operator-(const Timespan& b) const;
2011-06-10 12:41:11 +00:00
// subtracting two Julians produces a Timespan
Timespan operator-(const Julian& b) const;
2011-05-27 09:40:19 +00:00
friend std::ostream & operator<<(std::ostream& stream, const Julian& julian);
2011-03-24 15:55:10 +00:00
struct DateTimeComponents {
2011-06-10 12:41:11 +00:00
DateTimeComponents()
: years(0), months(0), days(0),
hours(0), minutes(0), seconds(0.0) {
}
int years;
int months;
int days;
int hours;
int minutes;
double seconds;
};
2011-05-28 19:05:46 +00:00
void ToGregorian(struct DateTimeComponents* datetime) const;
2011-03-24 15:55:10 +00:00
time_t ToTime() const;
double ToGreenwichSiderealTime() const;
double ToLocalMeanSiderealTime(const double& lon) const;
2011-03-24 15:55:10 +00:00
double FromJan1_00h_1900() const {
2011-05-20 21:09:23 +00:00
return date_ - kEPOCH_JAN1_00H_1900;
2011-03-24 15:55:10 +00:00
}
double FromJan1_12h_1900() const {
2011-05-20 21:09:23 +00:00
return date_ - kEPOCH_JAN1_12H_1900;
2011-03-24 15:55:10 +00:00
}
double FromJan1_12h_2000() const {
2011-05-20 21:09:23 +00:00
return date_ - kEPOCH_JAN1_12H_2000;
2011-03-24 15:55:10 +00:00
}
double GetDate() const {
return date_;
}
void AddDay(double day) {
date_ += day;
}
void AddHour(double hr) {
2011-05-20 21:09:23 +00:00
date_ += (hr / kHOURS_PER_DAY);
2011-03-24 15:55:10 +00:00
}
void AddMin(double min) {
2011-05-20 21:09:23 +00:00
date_ += (min / kMINUTES_PER_DAY);
2011-03-24 15:55:10 +00:00
}
void AddSec(double sec) {
2011-05-20 21:09:23 +00:00
date_ += (sec / kSECONDS_PER_DAY);
2011-03-24 15:55:10 +00:00
}
static bool IsLeapYear(int y) {
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
protected:
void Initialize(int year, double day);
void Initialize(int year, int mon, int day, int hour, int min, double sec);
/*
* the stored julian date
*/
double date_;
};
#endif