1 #ifndef PLANET_H 2 #define PLANET_H 3 4 #include <string> 5 6 #include "body.h" 7 8 class Ephemeris; 9 10 class Planet 11 { 12 public: 13 static body parseBodyName(char *name); 14 15 Planet(const double jd, const body this_body); 16 ~Planet(); 17 18 void calcHeliocentricEquatorial(); 19 void calcHeliocentricEquatorial(const bool relativeToSun); 20 21 void PlanetographicToXYZ(double &X, double &Y, double &Z, 22 double lat, double lon, 23 const double rad); 24 25 void PlanetocentricToXYZ(double &X, double &Y, double &Z, 26 const double lat, const double lon, 27 const double rad); 28 29 void XYZToPlanetocentric(const double X, const double Y, const double Z, 30 double &lat, double &lon); 31 32 void XYZToPlanetocentric(const double X, const double Y, const double Z, 33 double &lat, double &lon, double &rad); 34 35 void XYZToPlanetographic(const double X, const double Y, const double Z, 36 double &lat, double &lon); 37 38 void XYZToPlanetographic(const double X, const double Y, const double Z, 39 double &lat, double &lon, double &rad); 40 41 void XYZToPlanetaryXYZ(const double X, const double Y, const double Z, 42 double &pX, double &pY, double &pZ); 43 44 void PlanetaryXYZToXYZ(const double pX, const double pY, const double pZ, 45 double &X, double &Y, double &Z); 46 47 void PlanetocentricToPlanetographic(double &lat, double &lon) const; 48 void PlanetographicToPlanetocentric(double &lat, double &lon) const; 49 50 void getPosition(double &X, double &Y, double &Z) const; 51 52 void getBodyNorth(double &X, double &Y, double &Z) const; 53 void getOrbitalNorth(double &X, double &Y, double &Z) const; 54 55 double Illumination(const double oX, const double oY, const double oZ); 56 Index()57 body Index() const { return(index_); }; Primary()58 body Primary() const { return(primary_); }; 59 Flattening()60 double Flattening() const { return(flattening_); }; Flipped()61 int Flipped() const { return(flipped_); }; Period()62 double Period() const { return(period_); }; Radius()63 double Radius() const { return(radiusEq_); }; 64 double Radius(const double lat) const; 65 66 bool IsInMyShadow(const double x, const double y, const double z); 67 68 private: 69 body index_; 70 71 Ephemeris *ephem_; 72 bool ephemerisHigh_; 73 bool ephemerisSpice_; 74 75 double julianDay_; 76 double T2000_; // Julian centuries from 2000 77 double d2000_; // days from 2000 78 79 body primary_; 80 81 double alpha0_; // right ascension of the north pole 82 double delta0_; // declination of the north pole 83 84 double nullMeridian_; // orientation of zero longitude 85 double nullMeridian0_; // orientation of zero longitude at time 0 86 double wdot_; // rotation rate 87 88 double rot_[3][3]; // rotation matrix 89 double invRot_[3][3]; // inverse of e 90 bool needRotationMatrix_; 91 92 double period_; // orbital period, in days 93 double radiusEq_; // equatorial radius 94 double radiusPol_; // polar radius 95 double flattening_; // (Re - Rp)/Re 96 double omf2_; // (1 - flattening_)^2 97 98 bool needShadowCoeffs_; // used to compute shadows by ellipsoids 99 double sunX_, sunY_, sunZ_; 100 double ellipseCoeffC_; 101 102 /* 103 flipped = 1 if planet's longitude increases to the east 104 (e.g. earth), -1 if planet's longitude increases to the west 105 (e.g. Mars), 106 */ 107 int flipped_; 108 109 double X_, Y_, Z_; // Position vector 110 111 void CreateRotationMatrix(); 112 void ComputeShadowCoeffs(); 113 }; 114 115 #endif 116