[1457] | 1 | #include <math.h>
|
---|
| 2 |
|
---|
| 3 | #include "astro.h"
|
---|
| 4 |
|
---|
[2551] | 5 | /* given a modified Julian date, mj, and a set of heliocentric parabolic
|
---|
| 6 | * orbital elements referred to the epoch of date (mj):
|
---|
[1457] | 7 | * ep: epoch of perihelion,
|
---|
| 8 | * inc: inclination,
|
---|
| 9 | * ap: argument of perihelion (equals the longitude of perihelion minus the
|
---|
| 10 | * longitude of ascending node)
|
---|
| 11 | * qp: perihelion distance,
|
---|
| 12 | * om: longitude of ascending node;
|
---|
| 13 | * find:
|
---|
| 14 | * lpd: heliocentric longitude,
|
---|
| 15 | * psi: heliocentric latitude,
|
---|
| 16 | * rp: distance from the sun to the planet,
|
---|
| 17 | * rho: distance from the Earth to the planet,
|
---|
| 18 | * lam: geocentric ecliptic longitude,
|
---|
| 19 | * bet: geocentric ecliptic latitude,
|
---|
| 20 | * none are corrected for light time, ie, they are the true values for
|
---|
| 21 | * the given instant.
|
---|
| 22 | *
|
---|
| 23 | * all angles are in radians, all distances in AU.
|
---|
| 24 | * mutual perturbation corrections with other solar system objects are not
|
---|
| 25 | * applied. corrections for nutation and abberation must be made by the caller.
|
---|
| 26 | * The RA and DEC calculated from the fully-corrected ecliptic coordinates are
|
---|
| 27 | * then the apparent geocentric coordinates. Further corrections can be made,
|
---|
| 28 | * if required, for atmospheric refraction and geocentric parallax.
|
---|
| 29 | */
|
---|
| 30 | void
|
---|
[2551] | 31 | comet (double mj, double ep, double inc, double ap, double qp, double om,
|
---|
| 32 | double *lpd, double *psi, double *rp, double *rho, double *lam, double *bet)
|
---|
[1457] | 33 | {
|
---|
| 34 | double w, s, s2;
|
---|
| 35 | double l, sl, cl, y;
|
---|
| 36 | double spsi, cpsi;
|
---|
| 37 | double rd, lsn, rsn;
|
---|
| 38 | double lg, re, ll;
|
---|
| 39 | double cll, sll;
|
---|
| 40 | double nu;
|
---|
| 41 |
|
---|
| 42 | #define ERRLMT 0.0001
|
---|
[2551] | 43 | w = ((mj-ep)*3.649116e-02)/(qp*sqrt(qp));
|
---|
[1457] | 44 | s = w/3;
|
---|
| 45 | for (;;) {
|
---|
| 46 | double d;
|
---|
| 47 | s2 = s*s;
|
---|
| 48 | d = (s2+3)*s-w;
|
---|
| 49 | if (fabs(d) <= ERRLMT)
|
---|
| 50 | break;
|
---|
| 51 | s = ((2*s*s2)+w)/(3*(s2+1));
|
---|
| 52 | }
|
---|
| 53 |
|
---|
| 54 | nu = 2*atan(s);
|
---|
| 55 | *rp = qp*(1+s2);
|
---|
| 56 | l = nu+ap;
|
---|
| 57 | sl = sin(l);
|
---|
| 58 | cl = cos(l);
|
---|
| 59 | spsi = sl*sin(inc);
|
---|
| 60 | *psi = asin(spsi);
|
---|
| 61 | y = sl*cos(inc);
|
---|
| 62 | *lpd = atan(y/cl)+om;
|
---|
| 63 | cpsi = cos(*psi);
|
---|
| 64 | if (cl<0) *lpd += PI;
|
---|
| 65 | range (lpd, 2*PI);
|
---|
| 66 | rd = *rp * cpsi;
|
---|
[2551] | 67 | sunpos (mj, &lsn, &rsn, 0);
|
---|
[1457] | 68 | lg = lsn+PI;
|
---|
| 69 | re = rsn;
|
---|
| 70 | ll = *lpd - lg;
|
---|
| 71 | cll = cos(ll);
|
---|
| 72 | sll = sin(ll);
|
---|
| 73 | *rho = sqrt((re * re)+(*rp * *rp)-(2*re*rd*cll));
|
---|
| 74 | if (rd<re)
|
---|
| 75 | *lam = atan((-1*rd*sll)/(re-(rd*cll)))+lg+PI;
|
---|
| 76 | else
|
---|
| 77 | *lam = atan((re*sll)/(rd-(re*cll)))+*lpd;
|
---|
| 78 | range (lam, 2*PI);
|
---|
| 79 | *bet = atan((rd*spsi*sin(*lam-*lpd))/(cpsi*re*sll));
|
---|
| 80 | }
|
---|
| 81 |
|
---|
| 82 | /* For RCS Only -- Do Not Edit */
|
---|
[4017] | 83 | static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: comet.c,v $ $Date: 2011-09-21 16:17:48 $ $Revision: 1.9 $ $Name: not supported by cvs2svn $"};
|
---|