This is ojupiter.c in view mode; [Download] [Up]
/********************************************************/
/* ojupiter.c */
/* */
/* Orbital elements and perturbations for the planet */
/* Jupiter using formulas given by Meeus */
/********************************************************/
/***** description
*
* $Id: ojupiter.c,v 1.3 1993/04/21 21:29:45 craig Exp $
*
*/
/***** modification history
*
* $Log: ojupiter.c,v $
* Revision 1.3 1993/04/21 21:29:45 craig
* Changed the path of the satellite.h include.
* Changed ecnsts to pcnsts.
*
* Revision 1.2 1993/04/21 15:24:27 craig
* First working version. Ran through indent and converted to ansi.
* Added hooks for working with the satellite programs.
*
*
*/
/***** include files *****/
#include <math.h>
#include "aaproto.h"
#include "satellite.h"
/***** global variables *****/
extern struct MCONSTANTS mcnsts;
extern struct PCONSTANTS pcnsts;
/* from oearth.c */
extern double T;
/* from manoms.c */
extern double M5;
double f;
double P;
double Q;
double S;
double V;
double W;
double nu;
double ze;
double psi;
double cosQ;
double cos2Q;
double cos3Q;
double sinQ;
double sin2Q;
double sin3Q;
double cosV;
double cos2V;
double sinV;
double sin2V;
double cosze;
double cos2ze;
double cos3ze;
double cos4ze;
double cos5ze;
double sinze;
double sin2ze;
double sin3ze;
double sin4ze;
double sin5ze;
double sinW;
/***** local function prototypes *****/
static int djup (struct orbit * e);
/***************************************************/
/* pjup */
/* Calculations needed for Jupiter through Neptune */
/***************************************************/
int pjup (void)
{
nu = T / 5.0 + 0.1;
P = 237.47555 + 3034.9061 * T;
Q = 265.91650 + 1222.1139 * T;
S = 243.51721 + 428.4677 * T;
f = 5.0 * Q - 2.0 * P;
V = mod360 (f) * mcnsts.de2ra;
f = 2.0 * P - 6.0 * Q + 3.0 * S;
W = mod360 (f) * mcnsts.de2ra;
f = Q - P;
ze = mod360 (f) * mcnsts.de2ra;
f = S - Q;
psi = mod360 (f) * mcnsts.de2ra;
P = mod360 (P) * mcnsts.de2ra;
Q = mod360 (Q) * mcnsts.de2ra;
S = mod360 (S) * mcnsts.de2ra;
sinV = sin (V);
cosV = cos (V);
/* Use trigonometry to speed up sin, cos of multiple angles. This
reduces the relative accuracy, but we only need absolute accuracy
to about 8 places. */
sin2V = 2.0 * sinV * cosV;
cos2V = cosV * cosV - sinV * sinV;
sinW = sin (W);
cosze = cos (ze);
sinze = sin (ze);
sin2ze = 2.0 * sinze * cosze;
cos2ze = cosze * cosze - sinze * sinze;
sin3ze = sinze * cos2ze + cosze * sin2ze;
cos3ze = cosze * cos2ze - sinze * sin2ze;
sin4ze = sinze * cos3ze + cosze * sin3ze;
cos4ze = cosze * cos3ze - sinze * sin3ze;
sin5ze = sinze * cos4ze + cosze * sin4ze;
cos5ze = cosze * cos4ze - sinze * sin4ze;
sinQ = sin (Q);
cosQ = cos (Q);
sin2Q = 2.0 * sinQ * cosQ;
cos2Q = cosQ * cosQ - sinQ * sinQ;
sin3Q = sinQ * cos2Q + cosQ * sin2Q;
cos3Q = cosQ * cos2Q - sinQ * sin2Q;
return (0);
}
/******************************************/
/* ojupiter */
/* */
/* Elements and perturbations for Jupiter */
/******************************************/
int ojupiter (struct orbit * e, double J)
{
e->epoch = J;
manoms (J);
pjup ();
e->M = M5;
e->a = 5.202561;
e->ecc = ((-0.0000000017 * T - 0.0000004676) * T
+ 0.000164180) * T + 0.04833475;
e->equinox = pcnsts.J2000;
e->i = ((1.27e-7 * T + 2.942e-5) * T - 0.0022374) * T + 1.305288;
f = ((8.999e-6 * T - 0.00021857) * T + 0.0478404) * T + 273.829584;
e->w = mod360 (f);
f = ((-1.2460e-5 * T + 0.00096672) * T + 0.1659357) * T + 100.287838;
e->W = mod360 (f);
f = e->M + e->w + e->W;
e->L = mod360 (f);
djup (e);
return (0);
}
/********/
/* djup */
/********/
static int djup (struct orbit * e)
{
double p, q;
/* perturbations in mean longitude */
p = ((-0.004692 * nu - 0.010281) * nu + 0.331364) * sinV
+ ((0.002075 * nu - 0.064436) * nu + 0.003228) * cosV
- ((-0.000489 * nu + 0.000275) * nu + 0.003083) * sin2V
+ 0.002472 * sinW
+ 0.013619 * sinze
+ 0.018472 * sin2ze
+ 0.006717 * sin3ze
+ 0.002775 * sin4ze;
f = (0.007275 - 0.001253 * nu) * sinze
+ 0.006417 * sin2ze
+ 0.002439 * sin3ze
- (0.033839 + 0.001125 * nu) * cosze
- 0.003767 * cos2ze;
p += f * sinQ;
f = -(0.035681 + 0.001208 * nu) * sinze
- 0.004261 * sin2ze
+ 0.002178
+ (-0.006333 + 0.001161 * nu) * cosze
- 0.006675 * cos2ze
- 0.002664 * cos3ze;
p += f * cosQ;
f = -0.002572 * sinze - 0.003567 * sin2ze;
p += f * sin2Q;
f = 0.002094 * cosze + 0.003342 * cos2ze;
p += f * cos2Q;
/* perturbations in the perihelion */
q = (0.007192 - 0.003147 * nu) * sinV
+ ((0.000197 * nu - 0.000675) * nu - 0.020428) * cosV;
f = (0.007269 + 0.000672 * nu) * sinze
- 0.004344
+ 0.034036 * cosze
+ 0.005614 * cos2ze
+ 0.002964 * cos3ze;
q += f * sinQ;
f = 0.037761 * sinze
+ 0.006158 * sin2ze
- 0.006603 * cosze;
q += f * cosQ;
f = -0.005356 * sinze
+ 0.002722 * sin2ze
+ 0.004483 * cosze
- 0.002642 * cos2ze;
q += f * sin2Q;
f = 0.004403 * sinze
- 0.002536 * sin2ze
+ 0.005547 * cosze
- 0.002689 * cos2ze;
q += f * cos2Q;
e->w += q;
f = p - (q / (e->ecc));
e->M += f;
e->L += p;
/* perturbations in the eccentricity */
q = ((-.0000043 * nu + .0000130) * nu + .0003606) * sinV;
q += (.0001289 - .0000580 * nu) * cosV;
f = -0.0006764 * sinze
- 0.0001110 * sin2ze
- 0.0000224 * sin3ze
- 0.0000204
+ (0.0001284 + 0.0000116 * nu) * cosze
+ 0.0000188 * cos2ze;
q += f * sinQ;
f = (0.0001460 + 0.0000130 * nu) * sinze
+ 0.0000224 * sin2ze
- 0.0000817
+ 0.0006074 * cosze
+ 0.0000992 * cos2ze
+ 0.0000508 * cos3ze
+ 0.0000230 * cos4ze
+ 0.0000108 * cos5ze;
q += f * cosQ;
f = -(0.0000956 + 0.0000073 * nu) * sinze
+ 0.0000448 * sin2ze
+ 0.0000137 * sin3ze
+ (-0.0000997 + 0.0000108 * nu) * cosze
+ 0.0000480 * cos2ze
+ 0.0000148 * cos3ze;
q += f * sin2Q;
f = (-0.0000956 + 0.0000099 * nu) * sinze
+ 0.0000490 * sin2ze
+ 0.0000158 * sin3ze
+ 0.0000179
+ (0.0001024 + 0.0000075 * nu) * cosze
- 0.0000437 * cos2ze
- 0.0000132 * cos3ze;
q += f * cos2Q;
e->ecc += q;
/* perturbations in the semimajor axis */
q = -0.000263 * cosV
+ 0.000205 * cosze
+ 0.000693 * cos2ze
+ 0.000312 * cos3ze
+ 0.000147 * cos4ze;
f = 0.000299 * sinze
+ 0.000181 * cos2ze;
q += f * sinQ;
f = 0.000204 * sin2ze
+ 0.000111 * sin3ze
- 0.000337 * cosze
- 0.000111 * cos2ze;
q += f * cosQ;
e->a += q;
return (0);
}
/************/
/* cjupiter */
/************/
int cjupiter (struct orbit * e)
{
e->plat = 0.0;
return (0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.