|
libpredict
1.0.0
A satellite orbit prediction library
|
00001 #ifndef _PREDICT_H_ 00002 #define _PREDICT_H_ 00003 00004 #ifdef __cplusplus 00005 extern "C" { 00006 #endif 00007 00008 #include <time.h> 00009 #include <stdbool.h> 00010 00011 #define PREDICT_VERSION_MAJOR 1 00012 #define PREDICT_VERSION_MINOR 0 00013 #define PREDICT_VERSION_PATCH 0 00014 #define PREDICT_VERSION (PREDICT_VERSION_MAJOR * 100 * 100 + PREDICT_VERSION_MINOR * 100 + PREDICT_VERSION_PATCH) 00015 #define PREDICT_VERSION_STRING "1.0.0" 00016 00022 int predict_version_major(); 00023 00029 int predict_version_minor(); 00030 00036 int predict_version_patch(); 00037 00043 int predict_version(); 00044 00050 char *predict_version_string(); 00051 00055 typedef double predict_julian_date_t; 00056 00063 predict_julian_date_t predict_to_julian(time_t time); 00064 00071 time_t predict_from_julian(predict_julian_date_t date); 00072 00076 typedef struct { 00077 double epoch; 00078 double xndt2o; 00079 double xndd6o; 00080 double bstar; 00081 double xincl; 00082 double xnodeo; 00083 double eo; 00084 double omegao; 00085 double xmo; 00086 double xno; 00087 int catnum; 00088 int elset; 00089 int revnum; 00090 } predict_tle_t; 00091 00095 enum predict_ephemeris { 00096 EPHEMERIS_SGP4 = 0, 00097 EPHEMERIS_SDP4 = 1, 00098 EPHEMERIS_SGP8 = 2, 00099 EPHEMERIS_SDP8 = 3 00100 }; 00101 00105 typedef struct { 00107 char name[128]; 00108 00110 predict_julian_date_t time; 00112 double position[3]; 00114 double velocity[3]; 00115 00117 double latitude; 00119 double longitude; 00121 double altitude; 00123 int eclipsed; 00125 double eclipse_depth; 00127 enum predict_ephemeris ephemeris; 00129 char line1[70]; 00131 char line2[70]; 00133 predict_tle_t tle; 00134 00136 int catnum; 00138 long setnum; 00140 char designator[10]; 00142 int year; 00144 double refepoch; 00146 double incl; 00148 double raan; 00150 double eccn; 00152 double argper; 00154 double meanan; 00156 double meanmo; 00158 double drag; 00160 double nddot6; 00162 double bstar; 00164 int orbitnum; 00165 00167 void *ephemeris_data; 00168 } predict_orbit_t; 00169 00170 00177 predict_orbit_t *predict_create_orbit(char *tle[]); 00178 00183 void predict_destroy_orbit(predict_orbit_t *orbit); 00184 00192 int predict_orbit(predict_orbit_t *x, predict_julian_date_t time); 00193 00201 bool predict_is_geostationary(const predict_orbit_t *x); 00202 00210 double predict_apogee(const predict_orbit_t *x); 00211 00219 double predict_perigee(const predict_orbit_t *x); 00220 00229 bool predict_aos_happens(const predict_orbit_t *x, double latitude); 00230 00238 bool predict_decayed(const predict_orbit_t *x); 00239 00246 bool predict_is_eclipsed(const predict_orbit_t *x); 00247 00254 double predict_eclipse_depth(const predict_orbit_t *x); 00255 00259 typedef struct { 00261 char name[128]; 00263 double latitude; 00265 double longitude; 00267 double altitude; 00268 } predict_observer_t; 00269 00273 struct predict_observation { 00275 predict_julian_date_t time; 00277 double azimuth; 00279 double azimuth_rate; 00281 double elevation; 00283 double elevation_rate; 00285 double range; 00287 double range_x, range_y, range_z; 00289 double range_rate; 00290 }; 00291 00301 predict_observer_t *predict_create_observer(const char *name, double lat, double lon, double alt); 00302 00308 void predict_destroy_observer(predict_observer_t *obs); 00309 00318 void predict_observe_orbit(const predict_observer_t *observer, const predict_orbit_t *orbit, struct predict_observation *obs); 00319 00328 void predict_observe_moon(const predict_observer_t *observer, predict_julian_date_t time, struct predict_observation *obs); 00329 00338 void predict_observe_sun(const predict_observer_t *observer, predict_julian_date_t time, struct predict_observation *obs); 00339 00349 predict_julian_date_t predict_next_aos(const predict_observer_t *observer, predict_orbit_t *orbit, predict_julian_date_t start_time); 00350 00360 predict_julian_date_t predict_next_los(const predict_observer_t *observer, predict_orbit_t *orbit, predict_julian_date_t start_time); 00361 00371 double predict_doppler_shift(const predict_observer_t *observer, const predict_orbit_t *orbit, double downlink_frequency); 00372 00385 double predict_squint_angle(const predict_observer_t *observer, const predict_orbit_t *orbit, double alon, double alat); 00386 00396 double predict_refraction(double el); 00397 00409 double predict_refraction_ext(double el, double pressure, double temp); 00410 00420 double predict_refraction_from_apparent(double apparent_el); 00421 00433 double predict_refraction_from_apparent_ext(double apparent_el, double pressure, double temp); 00434 00443 double predict_refraction_rate(double el, double el_rate); 00444 00457 double predict_refraction_rate_ext(double el, double el_rate, double pressure, double temp); 00458 00466 double predict_apparent_elevation(double el); 00467 00479 double predict_apparent_elevation_ext(double el, double pressure, double temp); 00480 00489 double predict_apparent_elevation_rate(double el, double el_rate); 00490 00503 double predict_apparent_elevation_rate_ext(double el, double el_rate, double pressure, double temp); 00504 00505 #ifdef __cplusplus 00506 } 00507 #endif 00508 00509 #endif //_PREDICT_H_
1.7.6.1