blob: 3d6bc2b2a473ab6d1d610ab699e5a8eed0505c0e [file] [log] [blame]
#include "astro.h"
#define MAXE (.999) /* cant do hyperbolas */
struct elem
{
double t; /* time of perihelion */
double q; /* perihelion distance */
double e; /* eccentricity */
double i; /* inclination */
double w; /* argument of perihelion */
double o; /* longitude of ascending node */
};
struct elem
mkelem(double t, double q, double e, double i, double w, double o)
{
struct elem el;
el.t = t;
el.q = q;
el.e = e;
el.i = i;
el.w = w;
el.o = o;
return el;
}
void
comet(void)
{
double pturbl, pturbb, pturbr;
double lograd;
double dele, enom, vnom, nd, sl;
struct elem elem;
/* elem = (struct elem)
{
etdate(1990, 5, 19.293),
0.9362731,
0.6940149,
11.41096,
198.77059,
69.27130,
}; /* p/schwassmann-wachmann 3, 1989d */
/* elem = (struct elem)
{
etdate(1990, 4, 9.9761),
0.349957,
1.00038,
58.9596,
61.5546,
75.2132,
}; /* austin 3, 1989c */
/* elem = (struct elem)
{
etdate(1990, 10, 24.36),
0.9385,
1.00038,
131.62,
242.58,
138.57,
}; /* levy 6 , 1990c */
/* elem=(struct elem)
{
etdate(1996, 5, 1.3965),
0.230035,
0.999662,
124.9098,
130.2102,
188.0430,
}; /* C/1996 B2 (Hyakutake) */
/* elem=(struct elem)
{
etdate(1997, 4, 1.13413),
0.9141047,
0.9950989,
89.42932,
130.59066,
282.47069,
}; /*C/1995 O1 (Hale-Bopp) */
/* elem=(struct elem)
{
etdate(2000, 7, 26.1754),
0.765126,
0.999356,
149.3904,
151.0510,
83.1909,
}; /*C/1999 S4 (Linear) */
elem = mkelem(
etdate(2002, 3, 18.9784),
0.5070601,
0.990111,
28.12106,
34.6666,
93.1206
); /*C/2002 C1 (Ikeya-Zhang) */
ecc = elem.e;
if(ecc > MAXE)
ecc = MAXE;
incl = elem.i * radian;
node = (elem.o + 0.4593) * radian;
argp = (elem.w + elem.o + 0.4066) * radian;
mrad = elem.q / (1-ecc);
motion = .01720209895 * sqrt(1/(mrad*mrad*mrad))/radian;
anom = (eday - (elem.t - 2415020)) * motion * radian;
enom = anom + ecc*sin(anom);
do {
dele = (anom - enom + ecc * sin(enom)) /
(1 - ecc*cos(enom));
enom += dele;
} while(fabs(dele) > converge);
vnom = 2*atan2(
sqrt((1+ecc)/(1-ecc))*sin(enom/2),
cos(enom/2));
rad = mrad*(1-ecc*cos(enom));
lambda = vnom + argp;
pturbl = 0;
lambda += pturbl*radsec;
pturbb = 0;
pturbr = 0;
/*
* reduce to the ecliptic
*/
nd = lambda - node;
lambda = node + atan2(sin(nd)*cos(incl),cos(nd));
sl = sin(incl)*sin(nd) + pturbb*radsec;
beta = atan2(sl, sqrt(1-sl*sl));
lograd = pturbr*2.30258509;
rad *= 1 + lograd;
motion *= radian*mrad*mrad/(rad*rad);
semi = 0;
mag = 5.47 + 6.1/2.303*log(rad);
helio();
geo();
}