This is rplanet.c in view mode; [Download] [Up]
/****************************************************************/ /* rplanet.c */ /* */ /* The following program reduces the heliocentric equatorial */ /* rectangular coordinates of the earth and object that */ /* were computed by kepler() and produces apparent geocentric */ /* right ascension and declination. */ /****************************************************************/ /***** description * * $Id: rplanet.c,v 1.6 1993/04/30 18:15:49 craig Exp $ * */ /***** modification history * * $Log: rplanet.c,v $ * Revision 1.6 1993/04/30 18:15:49 craig * Changed the output calls from sending the output to stdout to * sending the output to the file outfile (which can be stdout). * * Revision 1.5 1993/04/29 16:09:37 craig * Changed call to altaz as it now returns the topocentric alt, * az, ra, and dec of the planet. The topocentric coordinates * are now printed here. * * Revision 1.4 1993/04/22 19:48:43 craig * Minor changes. * * Revision 1.3 1993/04/21 21:51:13 craig * Changed the path of the satellite.h include. * Changed ecnsts to pcnsts. * * Revision 1.2 1993/04/21 15:36:16 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 *****/ /* from cnstinit.c */ extern int prtflg; extern FILE *outfile; extern double TDT; extern double UT; extern struct PCONSTANTS pcnsts; /* from angles.c */ extern double EO; extern double SO; extern double pq; /**********/ /* reduce */ /**********/ /* elemnt = orbital elements of q */ /* q[], e[] = heliocentric coordinates */ int reduce (struct orbit *elemnt, double q[3], double e[3]) { int i; double p[3], temp[3], polar[3]; double a, b, s; double oalt, oaz, ora, odec; /* Save the geometric coordinates at TDT */ for (i = 0; i < 3; i++) { temp[i] = q[i]; } /* Display ecliptic longitude and latitude */ if (prtflg) { lonlat (q, TDT, polar); } /* Adjust for light time (planetary aberration) */ lightt (elemnt, q, e); /* Find Euclidean vectors between earth, object, and the sun */ for (i = 0; i < 3; i++) { p[i] = q[i] - e[i]; } angles (p, q, e); if (prtflg) { a = 0.0; for (i = 0; i < 3; i++) { b = temp[i] - e[i]; a += b * b; } a = sqrt (a); fprintf (outfile, "true geocentric distance %.7f au ", a); /* was EO */ fprintf (outfile, "equatorial diameter %.2f\"\n", 2.0 * elemnt->sdiam / EO); /* Calculate visual magnitude. "Visual" refers to the spectrum of visible light. Phase = 0.5(1+pq) = geometric fraction of disc illuminated. where pq = cos( sun-object-earth angle ) The magnitude is V(1,0) + 2.5 log10( SE^2 SO^2 / Phase) where V(1,0) = elemnt->mag is the magnitude at 1au from both earth and sun and 100% illumination. */ a = 0.5 * (1.0 + pq); /* Fudge the phase for light leakage in magnitude estimation. Note this phase term estimate does not reflect reality well. Calculated magnitudes of Mercury and Venus are inaccurate. */ b = 0.5 * (1.01 + 0.99 * pq); s = elemnt->mag + 2.1715 * log (EO * SO) - 1.085 * log (b); fprintf (outfile, "approx. visual magnitude %.1f, phase %.3f\n", s, a); } /* Find unit vector from earth in direction of object */ for (i = 0; i < 3; i++) { p[i] /= EO; temp[i] = p[i]; } if (prtflg) { /* Report astrometric position */ showrd ("Astrometric J2000.0:", p, polar); /* Also in 1950 coordinates */ precess (temp, pcnsts.B1950, -1); showrd ("Astrometric B1950.0:", temp, polar); } /* Correct position for light deflection */ relativity (p, q, e); /* Correct for annual aberration */ annuab (p); /* Precession of the equinox and ecliptic from J2000.0 to ephemeris date */ precess (p, TDT, -1); /* Ajust for nutation at current ecliptic. */ epsiln (TDT); nutate (TDT, p); /* Display the final apparent R.A. and Dec. for equinox of date. */ showrd (" Apparent:", p, polar); /* Go do topocentric reductions. */ polar[2] = EO; altaz (polar, UT, &oalt, &oaz, &ora, &odec); fprintf (outfile, "Topocentric Coordinates:\n"); fprintf (outfile, "\tAltitude: %.3f deg, Azimuth %.3f deg\n", oalt, oaz); fprintf (outfile, "\tR.A."); hms (outfile, ora); fprintf (outfile, "Dec."); dms (outfile, odec); fprintf (outfile, "\n"); return (0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.