#ifndef _CALENDAR_H_ #define _CALENDAR_H_ #include #include #include #include #include #include using namespace std; // 哈尔滨南岗地方经纬度 #define M_PI 3.14159265358979323846 #define LONGITUDE 126.66854 * M_PI / 180 #define LATITUDE 45.75996 * M_PI / 180 typedef struct tm Date; string radToDMS(int lowerBound, int upperBound, double radians); class Julian { private: static double d[23][5]; double dt_ext(int y, double jsd); public: // 计算儒略日 double getJulianDay(time_t time); // 计算儒略千年数 double getJulianKiloYear(time_t time); //儒略千年数转时间戳 time_t kiloYearToTime(double t, int year); //计算力学时与世界时之差,传入年份 double delta_t(int y); }; class parameter { private: // 计算地球日心黄经 double get_longitude(vector l, double t); // 计算太阳地心黄纬 double get_latitude(vector b, double t); double get_R(vector r, double t); // 转换FK5误差,返回弧度制 double delta_FK5(double L, double B, double T); //获取章动有关角 vector get_angle(double T); //章动修正 double nutation(double T); //光行差修正,返回弧度制 double aberration(double R); // 获取地日运行参数,L为地球日心黄经,B为地球日心黄纬,R为地日距离 vector> get_parameters(double t); public: pair sun_longitude(double t); double get_epsilon(double T); // 计算时角,返回弧度制 double getHourAngle(double julianKiloYear, double longitude, double latitude, double alpha); }; extern Julian julian; extern parameter p; extern double epsilon; #endif