118 lines
3.7 KiB
C
118 lines
3.7 KiB
C
#ifndef _sgp4unit_
|
|
#define _sgp4unit_
|
|
/* ----------------------------------------------------------------
|
|
*
|
|
* sgp4unit.h
|
|
*
|
|
* this file contains the sgp4 procedures for analytical propagation
|
|
* of a satellite. the code was originally released in the 1980 and 1986
|
|
* spacetrack papers. a detailed discussion of the theory and history
|
|
* may be found in the 2006 aiaa paper by vallado, crawford, hujsak,
|
|
* and kelso.
|
|
*
|
|
* companion code for
|
|
* fundamentals of astrodynamics and applications
|
|
* 2007
|
|
* by david vallado
|
|
*
|
|
* (w) 719-573-2600, email dvallado@agi.com
|
|
*
|
|
* current :
|
|
* 20 apr 07 david vallado
|
|
* misc fixes for constants
|
|
* changes :
|
|
* 11 aug 06 david vallado
|
|
* chg lyddane choice back to strn3, constants, misc doc
|
|
* 15 dec 05 david vallado
|
|
* misc fixes
|
|
* 26 jul 05 david vallado
|
|
* fixes for paper
|
|
* note that each fix is preceded by a
|
|
* comment with "sgp4fix" and an explanation of
|
|
* what was changed
|
|
* 10 aug 04 david vallado
|
|
* 2nd printing baseline working
|
|
* 14 may 01 david vallado
|
|
* 2nd edition baseline
|
|
* 80 norad
|
|
* original baseline
|
|
* ---------------------------------------------------------------- */
|
|
|
|
#include <math.h>
|
|
#include <stdio.h>
|
|
|
|
// -------------------------- structure declarations ----------------------------
|
|
typedef enum
|
|
{
|
|
wgs72old,
|
|
wgs72,
|
|
wgs84
|
|
} gravconsttype;
|
|
|
|
typedef struct elsetrec
|
|
{
|
|
long int satnum;
|
|
int epochyr, epochtynumrev;
|
|
int error;
|
|
char init, method;
|
|
|
|
/* Near Earth */
|
|
int isimp;
|
|
double aycof , con41 , cc1 , cc4 , cc5 , d2 , d3 , d4 ,
|
|
delmo , eta , argpdot, omgcof , sinmao , t , t2cof, t3cof ,
|
|
t4cof , t5cof , x1mth2 , x7thm1 , mdot , nodedot, xlcof , xmcof ,
|
|
nodecf;
|
|
|
|
/* Deep Space */
|
|
int irez;
|
|
double d2201 , d2211 , d3210 , d3222 , d4410 , d4422 , d5220 , d5232 ,
|
|
d5421 , d5433 , dedt , del1 , del2 , del3 , didt , dmdt ,
|
|
dnodt , domdt , e3 , ee2 , peo , pgho , pho , pinco ,
|
|
plo , se2 , se3 , sgh2 , sgh3 , sgh4 , sh2 , sh3 ,
|
|
si2 , si3 , sl2 , sl3 , sl4 , gsto , xfact , xgh2 ,
|
|
xgh3 , xgh4 , xh2 , xh3 , xi2 , xi3 , xl2 , xl3 ,
|
|
xl4 , xlamo , zmol , zmos , atime , xli , xni;
|
|
|
|
double a , altp , alta , epochdays, jdsatepoch , nddot , ndot ,
|
|
bstar , rcse , inclo , nodeo , ecco , argpo , mo ,
|
|
no;
|
|
} elsetrec;
|
|
|
|
// --------------------------- function declarations ----------------------------
|
|
int sgp4init
|
|
(
|
|
gravconsttype whichconst, const int satn, const double epoch,
|
|
const double xbstar, const double xecco, const double xargpo,
|
|
const double xinclo, const double xmo, const double xno,
|
|
const double xnodeo,
|
|
elsetrec& satrec
|
|
);
|
|
|
|
int sgp4
|
|
(
|
|
gravconsttype whichconst,
|
|
elsetrec& satrec, double tsince,
|
|
double r[], double v[]
|
|
);
|
|
|
|
double gstime
|
|
(
|
|
double
|
|
);
|
|
|
|
void getgravconst
|
|
(
|
|
gravconsttype,
|
|
double&,
|
|
double&,
|
|
double&,
|
|
double&,
|
|
double&,
|
|
double&,
|
|
double&,
|
|
double&
|
|
);
|
|
|
|
#endif
|
|
|