#ifndef _GeoCal_h #define _GeoCal_h #include #include #include "DVector.h" #include "DMatrix.h" //extern "C" { // #include "SCsabertime.h" //} class GeoCal { public: GeoCal(); // Calculate line of sight vector in Spacecraft Coords) DVector cal_SC_los_vector(double scanAng); void cal_ECIvector_SCtoMoon(int year,int month,double sec, DVector &, DVector &); void cal_ECI_lunar_vector (int year,int month,double sec, double &, double &, DVector &); // Calculate line of sight vector in Orbit Coords) DVector cal_ORB_los_vector(double scanAng,double roll,double pitch, double yaw); //Calculate horizontal elevation angle void cal_horizontal_elevation_angle(double scanAng, double roll,double pitch, double yaw, double &elevAngle); //Calculate trans matrix from SC coords to ECI coords DMatrix matrix_SCtoECI(double *quat); //Calculate trans matrix from ORB coords to ECF coords DMatrix matrix_ORBtoECF(DVector &velECF, DVector &posECF); DMatrix matrix_ORBtoECF2(DVector &velECF, DVector &posECF); //Convert unit vector in ORB to ECF int unitVectorORBtoECF(DMatrix &matrixORBtoECF,DVector &unitposORB, DVector &unitposECF,DVector &scVelECF); //Calculate line of sight vector in ECF Coords) DVector cal_ECF_los_vector(DMatrix &tran, DVector &losSC); //Calculate the mean greenwich sidereal time in radians (SUN.FOR) void cal_mean_greenwich_sidereal_time(int year,int doy,double sec, double &, double &,double &); //Cal mean greenwich sidereal time in radians void cal_mean_greenwich_sidereal_time(int year,int doy,double sec); //Calculate the true of date greenwich sidereal time in radians void cal_greenwich_sidereal_time(int year,int doy,double sec,double &, double &,double &,double &,double &,double &,double &); //Calculate solar zenith angle void cal_solar_zenith(double gstm,double sdec,double srasn, double rlat,double rlong, double &solarZenith); //Calculate solar zenith angle and solar local time //void cal_solar_zenith(double gstm,double sdec,double srasn, double rlat,double rlong, double &solarZenith, double &SolarLT); //Calculate solar zenith angle void cal_solar_zenith_method2(int day,double hours, double rlat, double rlong, double &solarZenith); void cal_solar_zenith(DVector &vECF, double dlat,double dlong, double &solarZenith); void cal_solarLT(double sec,double dlong,double &SolarLT); //void cal_solar_zenith_solarLT(double gstm,double sdec,double srasn, double dlat,double dlong, double &solarZenith,double &SolarLT); //Calculate julianCenturyEpoch1900 double julianCenturyEpoch1900(int yr,int doy,double sec); //Calculate sun-earth distance void cal_sun_earth(int year,int doy,double sec, double &rsun_e); double r2r(double x); //Convert ECI vector to ECF vector DVector convert_ECItoECF(int year,int doy,double sec, DVector &posECI); // DVector GeoCal::convert_ECItoECF(int year,int doy,double sec, // DVector &posECI); //DVector &posECI, DVector &velECI,int Velocity_req); //DVector GeoCal::convert_ECItoECF(SABER_TIME &utcTime,DVector &posECI); //DVector &velECI, int Velocity_req); //convert the result of atan2(y,x) from -pi to pi to the range //of 0 to 2pi double datan0(double y, double x); //Calculate tangent point in ECI DVector calTpECF(DVector &losECF, DVector &ORBposECF); //DVector calTpECI(DVector &losECI, DVector &SCposECI,int ¬an); DVector calTpECI(DVector &losECI, DVector &SCposECI, double gmst,double &lat,double &lon,double &altitude,int ¬an); void calCart2LLA_F1999(DVector &cartXYZ, double gmst, double &lat, double &lon, double &alt, int ¬an); double calDeltaT(double t, double p, double u, double v); DVector calTpECI(DVector &losECI, DVector &SCposECI, int ¬an); //Convert ECF to geodetic coordinates void calECF2Geodetic(DVector &TpECF, double &Tplat, double &Tplon, double &Tpalt); double Angle_los_moonScan(DVector &losECI,DVector &lunarECI); ~GeoCal(); // destructor protected: int size; void init(const double*, int); }; #endif