13e12c5d1SDavid du Colombier #include "astro.h"
23e12c5d1SDavid du Colombier
37dd7cddfSDavid du Colombier #define MAXE (.999) /* cant do hyperbolas */
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier void
comet(void)63e12c5d1SDavid du Colombier comet(void)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier double pturbl, pturbb, pturbr;
93e12c5d1SDavid du Colombier double lograd;
103e12c5d1SDavid du Colombier double dele, enom, vnom, nd, sl;
113e12c5d1SDavid du Colombier
123e12c5d1SDavid du Colombier struct elem
133e12c5d1SDavid du Colombier {
143e12c5d1SDavid du Colombier double t; /* time of perihelion */
153e12c5d1SDavid du Colombier double q; /* perihelion distance */
163e12c5d1SDavid du Colombier double e; /* eccentricity */
173e12c5d1SDavid du Colombier double i; /* inclination */
183e12c5d1SDavid du Colombier double w; /* argument of perihelion */
193e12c5d1SDavid du Colombier double o; /* longitude of ascending node */
203e12c5d1SDavid du Colombier } elem;
213e12c5d1SDavid du Colombier
223e12c5d1SDavid du Colombier /* elem = (struct elem)
233e12c5d1SDavid du Colombier {
243e12c5d1SDavid du Colombier etdate(1990, 5, 19.293),
253e12c5d1SDavid du Colombier 0.9362731,
263e12c5d1SDavid du Colombier 0.6940149,
273e12c5d1SDavid du Colombier 11.41096,
283e12c5d1SDavid du Colombier 198.77059,
293e12c5d1SDavid du Colombier 69.27130,
303e12c5d1SDavid du Colombier }; /* p/schwassmann-wachmann 3, 1989d */
313e12c5d1SDavid du Colombier /* elem = (struct elem)
323e12c5d1SDavid du Colombier {
333e12c5d1SDavid du Colombier etdate(1990, 4, 9.9761),
343e12c5d1SDavid du Colombier 0.349957,
353e12c5d1SDavid du Colombier 1.00038,
363e12c5d1SDavid du Colombier 58.9596,
373e12c5d1SDavid du Colombier 61.5546,
383e12c5d1SDavid du Colombier 75.2132,
393e12c5d1SDavid du Colombier }; /* austin 3, 1989c */
407dd7cddfSDavid du Colombier /* elem = (struct elem)
413e12c5d1SDavid du Colombier {
423e12c5d1SDavid du Colombier etdate(1990, 10, 24.36),
433e12c5d1SDavid du Colombier 0.9385,
443e12c5d1SDavid du Colombier 1.00038,
453e12c5d1SDavid du Colombier 131.62,
463e12c5d1SDavid du Colombier 242.58,
473e12c5d1SDavid du Colombier 138.57,
483e12c5d1SDavid du Colombier }; /* levy 6 , 1990c */
497dd7cddfSDavid du Colombier /* elem=(struct elem)
507dd7cddfSDavid du Colombier {
517dd7cddfSDavid du Colombier etdate(1996, 5, 1.3965),
527dd7cddfSDavid du Colombier 0.230035,
537dd7cddfSDavid du Colombier 0.999662,
547dd7cddfSDavid du Colombier 124.9098,
557dd7cddfSDavid du Colombier 130.2102,
567dd7cddfSDavid du Colombier 188.0430,
577dd7cddfSDavid du Colombier }; /* C/1996 B2 (Hyakutake) */
5859cc4ca5SDavid du Colombier /* elem=(struct elem)
597dd7cddfSDavid du Colombier {
607dd7cddfSDavid du Colombier etdate(1997, 4, 1.13413),
617dd7cddfSDavid du Colombier 0.9141047,
627dd7cddfSDavid du Colombier 0.9950989,
637dd7cddfSDavid du Colombier 89.42932,
647dd7cddfSDavid du Colombier 130.59066,
657dd7cddfSDavid du Colombier 282.47069,
667dd7cddfSDavid du Colombier }; /*C/1995 O1 (Hale-Bopp) */
67*9a747e4fSDavid du Colombier /* elem=(struct elem)
6859cc4ca5SDavid du Colombier {
6959cc4ca5SDavid du Colombier etdate(2000, 7, 26.1754),
7059cc4ca5SDavid du Colombier 0.765126,
7159cc4ca5SDavid du Colombier 0.999356,
7259cc4ca5SDavid du Colombier 149.3904,
7359cc4ca5SDavid du Colombier 151.0510,
7459cc4ca5SDavid du Colombier 83.1909,
7559cc4ca5SDavid du Colombier }; /*C/1999 S4 (Linear) */
76*9a747e4fSDavid du Colombier elem=(struct elem)
77*9a747e4fSDavid du Colombier {
78*9a747e4fSDavid du Colombier etdate(2002, 3, 18.9784),
79*9a747e4fSDavid du Colombier 0.5070601,
80*9a747e4fSDavid du Colombier 0.990111,
81*9a747e4fSDavid du Colombier 28.12106,
82*9a747e4fSDavid du Colombier 34.6666,
83*9a747e4fSDavid du Colombier 93.1206,
84*9a747e4fSDavid du Colombier }; /*C/2002 C1 (Ikeya-Zhang) */
853e12c5d1SDavid du Colombier
863e12c5d1SDavid du Colombier ecc = elem.e;
873e12c5d1SDavid du Colombier if(ecc > MAXE)
883e12c5d1SDavid du Colombier ecc = MAXE;
893e12c5d1SDavid du Colombier incl = elem.i * radian;
903e12c5d1SDavid du Colombier node = (elem.o + 0.4593) * radian;
913e12c5d1SDavid du Colombier argp = (elem.w + elem.o + 0.4066) * radian;
923e12c5d1SDavid du Colombier mrad = elem.q / (1-ecc);
933e12c5d1SDavid du Colombier motion = .01720209895 * sqrt(1/(mrad*mrad*mrad))/radian;
943e12c5d1SDavid du Colombier anom = (eday - (elem.t - 2415020)) * motion * radian;
953e12c5d1SDavid du Colombier enom = anom + ecc*sin(anom);
963e12c5d1SDavid du Colombier
973e12c5d1SDavid du Colombier do {
983e12c5d1SDavid du Colombier dele = (anom - enom + ecc * sin(enom)) /
993e12c5d1SDavid du Colombier (1 - ecc*cos(enom));
1003e12c5d1SDavid du Colombier enom += dele;
1017dd7cddfSDavid du Colombier } while(fabs(dele) > converge);
1023e12c5d1SDavid du Colombier
1033e12c5d1SDavid du Colombier vnom = 2*atan2(
1043e12c5d1SDavid du Colombier sqrt((1+ecc)/(1-ecc))*sin(enom/2),
1053e12c5d1SDavid du Colombier cos(enom/2));
1063e12c5d1SDavid du Colombier rad = mrad*(1-ecc*cos(enom));
1073e12c5d1SDavid du Colombier lambda = vnom + argp;
1083e12c5d1SDavid du Colombier pturbl = 0;
1093e12c5d1SDavid du Colombier lambda += pturbl*radsec;
1103e12c5d1SDavid du Colombier pturbb = 0;
1113e12c5d1SDavid du Colombier pturbr = 0;
1123e12c5d1SDavid du Colombier
1133e12c5d1SDavid du Colombier /*
1143e12c5d1SDavid du Colombier * reduce to the ecliptic
1153e12c5d1SDavid du Colombier */
1163e12c5d1SDavid du Colombier nd = lambda - node;
1173e12c5d1SDavid du Colombier lambda = node + atan2(sin(nd)*cos(incl),cos(nd));
1183e12c5d1SDavid du Colombier
1193e12c5d1SDavid du Colombier sl = sin(incl)*sin(nd) + pturbb*radsec;
1203e12c5d1SDavid du Colombier beta = atan2(sl, sqrt(1-sl*sl));
1213e12c5d1SDavid du Colombier
1223e12c5d1SDavid du Colombier lograd = pturbr*2.30258509;
1233e12c5d1SDavid du Colombier rad *= 1 + lograd;
1243e12c5d1SDavid du Colombier
1253e12c5d1SDavid du Colombier motion *= radian*mrad*mrad/(rad*rad);
1263e12c5d1SDavid du Colombier semi = 0;
1273e12c5d1SDavid du Colombier
1283e12c5d1SDavid du Colombier mag = 5.47 + 6.1/2.303*log(rad);
1293e12c5d1SDavid du Colombier
1303e12c5d1SDavid du Colombier helio();
1313e12c5d1SDavid du Colombier geo();
1323e12c5d1SDavid du Colombier }
133