libpredict  0.1.0
A satellite orbit prediction library
include/predict/predict.h
Go to the documentation of this file.
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 0
00012 #define PREDICT_VERSION_MINOR 1
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 "0.1.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(const 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 
00382 double predict_refraction(double el);
00383 
00395 double predict_refraction_ext(double el, double pressure, double temp);
00396 
00406 double predict_refraction_from_apparent(double apparent_el);
00407 
00419 double predict_refraction_from_apparent_ext(double apparent_el, double pressure, double temp);
00420 
00429 double predict_refraction_rate(double el, double el_rate);
00430 
00443 double predict_refraction_rate_ext(double el, double el_rate, double pressure, double temp);
00444 
00452 double predict_apparent_elevation(double el);
00453 
00465 double predict_apparent_elevation_ext(double el, double pressure, double temp);
00466 
00475 double predict_apparent_elevation_rate(double el, double el_rate);
00476 
00489 double predict_apparent_elevation_rate_ext(double el, double el_rate, double pressure, double temp);
00490 
00491 #ifdef __cplusplus
00492 }
00493 #endif
00494 
00495 #endif //_PREDICT_H_
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines