This is osaturn.c in view mode; [Download] [Up]
/****************************************************************/ /* osaturn.c */ /* */ /* Elements of the orbit of the planet Saturn */ /* using formulas given by Meeus. */ /* */ /* This program seems to have much larger errors than */ /* the ones for the other planets. Error of 90 arc seconds */ /* in R.A. and 15 arc seconds in Dec observed re 1986 tables. */ /****************************************************************/ /***** description * * $Id: osaturn.c,v 1.3 1993/04/21 21:38:02 craig Exp $ * */ /***** modification history * * $Log: osaturn.c,v $ * Revision 1.3 1993/04/21 21:38:02 craig * Changed the path of the satellite.h include. * Changed ecnsts to pcnsts. * * Revision 1.2 1993/04/21 15:28:33 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 M6; /* from ojupiter.c */ extern double f; extern double nu; extern double psi; extern double cosQ; extern double cos2Q; extern double cos3Q; extern double sinQ; extern double sin2Q; extern double sin3Q; extern double cosV; extern double cos2V; extern double sinV; extern double sin2V; extern double sinW; extern double cosze; extern double cos2ze; extern double cos3ze; extern double cos4ze; extern double cos5ze; extern double sinze; extern double sin2ze; extern double sin3ze; extern double sin4ze; extern double sin5ze; /***** local variables *****/ static double sinpsi = 0.0; static double cospsi = 0.0; static double sin2psi = 0.0; static double cos2psi = 0.0; static double sin3psi = 0.0; static double cos3psi = 0.0; /***** local function prototypes */ static int asat (struct orbit * e); static int esat (struct orbit * e); /***********/ /* osaturn */ /***********/ int osaturn (struct orbit * e, double J) { double p, q; e->epoch = J; manoms (J); pjup (); sinpsi = sin (psi); cospsi = cos (psi); sin2psi = 2.0 * sinpsi * cospsi; cos2psi = cospsi * cospsi - sinpsi * sinpsi; sin3psi = sinpsi * cos2psi + cospsi * sin2psi; cos3psi = cospsi * cos2psi - sinpsi * sin2psi; e->M = M6; e->equinox = pcnsts.J2000; /* inclination */ e->i = ((2e-9 * T - 5.017e-5) * T + 0.0024449) * T + 2.486204; /* arg perihelion */ f = ((6.177e-6 * T + 0.00070747) * T + 0.8220515) * T + 338.571353; e->w = mod360 (f); /* ascending node */ f = ((-1.589e-6 * T - 0.00018997) * T - 0.2599254) * T + 113.923406; e->W = mod360 (f); /* mean longitude */ f = e->M + e->w + e->W; e->L = mod360 (f); /* eccentricity */ e->ecc = ((0.00000000074 * T - 0.000000728) * T - 0.00034550) * T + 0.05589232; /* mean distance */ e->a = 9.554747; /* perturbations in the mean longitude */ p = ((0.016714 * nu + 0.018150) * nu - 0.814181) * sinV + ((-0.004100 * nu + 0.160906) * nu - 0.010497) * cosV + 0.007581 * sin2V - 0.007986 * sinW; p = p - 0.148811 * sinze - 0.040786 * sin2ze - 0.015208 * sin3ze - 0.006339 * sin4ze; f = -0.006244 + (0.008931 + 0.002728 * nu) * sinze - 0.016500 * sin2ze - 0.005775 * sin3ze + (0.081344 + 0.003206 * nu) * cosze + 0.015019 * cos2ze; p += f * sinQ; f = (0.085581 + 0.002494 * nu) * sinze + (0.025328 - 0.003117 * nu) * cosze + 0.014394 * cos2ze + 0.006319 * cos3ze; p += f * cosQ; f = 0.006369 * sinze + 0.009156 * sin2ze + 0.007525 * sin3psi; p += f * sin2Q; f = -0.005236 * cosze - 0.007736 * cos2ze - 0.007528 * cos3psi; p += f * cos2Q; e->L += p; /* perturbations in the perihelion */ q = ((-0.001533 * nu + 0.007186) * nu + 0.077108) * sinV + ((-0.000536 * nu - 0.014766) * nu + 0.045803) * cosV - 0.007075 * sinze; f = -0.075825 * sinze - 0.024839 * sin2ze - 0.008631 * sin3ze; q += f * sinQ; f = -0.072586 - 0.150383 * cosze + 0.026897 * cos2ze + 0.010053 * cos3ze; q += f * cosQ; f = -(0.013597 + 0.001719 * nu) * sinze + (-0.007742 + 0.001517 * nu) * cosze + (0.013586 - 0.001375 * nu) * cos2ze; q += f * sin2Q; f = (-0.013667 + 0.001239 * nu) * sinze + 0.011981 * sin2ze + (0.014861 + 0.001136 * nu) * cosze - (0.013064 + 0.001628 * nu) * cos2ze; q += f * cos2Q; e->w += q; f = p - q / (e->ecc); e->M += f; esat (e); asat (e); return (0); } /********/ /* esat */ /********/ static int esat (struct orbit * e) { double sin4Q, cos4Q; double q; /* perturbations in the eccentricity */ q = ((0.0000091 * nu + 0.0002548) * nu - 0.0007927) * sinV; q += ((-0.0000253 * nu + 0.0001226) * nu + 0.0013381) * cosV; q += (-0.0000121 * nu + 0.0000248) * sin2V; q -= (0.0000091 * nu + 0.0000305) * cos2V; q += 0.0000412 * sin2ze; f = 0.0012415 + (0.0000390 - 0.0000617 * nu) * sinze + (0.0000165 - 0.0000204 * nu) * sin2ze; f = f + 0.0026599 * cosze - 0.0004687 * cos2ze - 0.0001870 * cos3ze - 0.0000821 * cos4ze - 0.0000377 * cos5ze; f = f + 0.0000497 * cos2psi; q += f * sinQ; f = 0.0000163 - 0.0000611 * nu - 0.0012696 * sinze - 0.0004200 * sin2ze - 0.0001503 * sin3ze - 0.0000619 * sin4ze - 0.0000268 * sin5ze; f = f - (0.0000282 + 0.0001306 * nu) * cosze + (-0.0000086 + 0.0000230 * nu) * cos2ze; f = f + 0.0000461 * sin2psi; q += f * cosQ; f = -0.0000350 + (0.0002211 - 0.0000286 * nu) * sinze - 0.0002208 * sin2ze - 0.0000568 * sin3ze - 0.0000346 * sin4ze; f = f - (0.0002780 + 0.0000222 * nu) * cosze + (0.0002022 + 0.0000263 * nu) * cos2ze + 0.0000248 * cos3ze + 0.0000242 * sin3psi + 0.0000467 * cos3psi; q += f * sin2Q; f = -0.0000490 - (0.0002842 + 0.0000279 * nu) * sinze + (0.0000128 + 0.0000226 * nu) * sin2ze; f = f + 0.0000224 * sin3ze + (-0.0001594 + 0.0000282 * nu) * cosze + (0.0002162 - 0.0000207 * nu) * cos2ze; f = f + 0.0000561 * cos3ze + 0.0000343 * cos4ze + 0.0000469 * sin3psi - 0.0000242 * cos3psi; q += f * cos2Q; f = -0.0000205 * sinze + 0.0000262 * sin3ze; q += f * sin3Q; f = 0.0000208 * cosze - 0.0000271 * cos3ze; q += f * cos3Q; sin4Q = 2.0 * sin2Q * cos2Q; cos4Q = cos2Q * cos2Q - sin2Q * sin2Q; q = q - 0.0000382 * cos3ze * sin4Q - 0.0000376 * sin3ze * cos4Q; e->ecc += q; return (0); } /********/ /* asat */ /********/ static int asat (struct orbit * e) { double q; /* perturbations in the semimajor axis */ q = 0.000572 * nu * sinV + 0.002933 * cosV + 0.033629 * cosze - 0.003081 * cos2ze - 0.001423 * cos3ze - 0.000671 * cos4ze - 0.000320 * cos5ze; f = 0.001098 - 0.002812 * sinze + 0.000688 * sin2ze - 0.000393 * sin3ze - 0.000228 * sin4ze + 0.002138 * cosze - 0.000999 * cos2ze - 0.000642 * cos3ze - 0.000325 * cos4ze; q += f * sinQ; f = -0.000890 + 0.002206 * sinze - 0.001590 * sin2ze - 0.000647 * sin3ze - 0.000344 * sin4ze + 0.002885 * cosze + (0.002172 + 0.000102 * nu) * cos2ze + 0.000296 * cos3ze; q += f * cosQ; f = -0.000267 * sin2ze - 0.000778 * cosze + 0.000495 * cos2ze + 0.000250 * cos3ze; q += f * sin2Q; f = -0.000856 * sinze + 0.000441 * sin2ze + 0.000296 * cos2ze + 0.000211 * cos3ze; q += f * cos2Q; f = -0.000427 * sinze + 0.000398 * sin3ze; q += f * sin3Q; f = 0.000344 * cosze - 0.000427 * cos3ze; q += f * cos3Q; e->a += q; return (0); } /************************************************/ /* csaturn */ /* */ /* Corrections to the position to be applied */ /* after solving Kepler's equation */ /************************************************/ int csaturn (struct orbit * e) { double p; /* perturbations to the heliocentric latitude */ f = 0.000747 * sinQ + 0.001069 * cosQ; p = f * cosze; f = 0.002108 * sin2ze + 0.001261 * cos2ze; p = p + f * sin2Q; f = 0.001236 * sin2ze - 0.002075 * cos2ze; p = p + f * cos2Q; e->plat = p * mcnsts.de2ra; return (0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.