13e12c5d1SDavid du Colombier #include "astro.h"
23e12c5d1SDavid du Colombier
33e12c5d1SDavid du Colombier Obj2* objlst[] =
43e12c5d1SDavid du Colombier {
53e12c5d1SDavid du Colombier &osun,
63e12c5d1SDavid du Colombier &omoon,
73e12c5d1SDavid du Colombier &oshad,
83e12c5d1SDavid du Colombier &omerc,
93e12c5d1SDavid du Colombier &ovenus,
103e12c5d1SDavid du Colombier &omars,
113e12c5d1SDavid du Colombier &ojup,
123e12c5d1SDavid du Colombier &osat,
13*59cc4ca5SDavid du Colombier &ouran,
14*59cc4ca5SDavid du Colombier &onept,
15*59cc4ca5SDavid du Colombier &oplut,
163e12c5d1SDavid du Colombier &ocomet,
173e12c5d1SDavid du Colombier 0,
183e12c5d1SDavid du Colombier };
193e12c5d1SDavid du Colombier
203e12c5d1SDavid du Colombier struct idata
213e12c5d1SDavid du Colombier {
223e12c5d1SDavid du Colombier char* name;
237dd7cddfSDavid du Colombier char* name1;
243e12c5d1SDavid du Colombier void (*obj)(void);
253e12c5d1SDavid du Colombier } idata[] =
263e12c5d1SDavid du Colombier {
277dd7cddfSDavid du Colombier "The sun", "sun", fsun,
287dd7cddfSDavid du Colombier "The moon", "moon", moon,
297dd7cddfSDavid du Colombier "The shadow", "shadow", shad,
307dd7cddfSDavid du Colombier "Mercury", "mercury", merc,
317dd7cddfSDavid du Colombier "Venus", "venus", venus,
327dd7cddfSDavid du Colombier "Mars", "mars", mars,
337dd7cddfSDavid du Colombier "Jupiter", "jupiter", jup,
347dd7cddfSDavid du Colombier "Saturn", "saturn", sat,
35*59cc4ca5SDavid du Colombier "Uranus", "uranus", uran,
36*59cc4ca5SDavid du Colombier "Neptune", "neptune", nept,
37*59cc4ca5SDavid du Colombier "Pluto", "pluto", plut,
387dd7cddfSDavid du Colombier "Comet", "comet", comet,
393e12c5d1SDavid du Colombier };
403e12c5d1SDavid du Colombier
413e12c5d1SDavid du Colombier void
init(void)423e12c5d1SDavid du Colombier init(void)
433e12c5d1SDavid du Colombier {
443e12c5d1SDavid du Colombier Obj2 *q;
453e12c5d1SDavid du Colombier int i;
463e12c5d1SDavid du Colombier
473e12c5d1SDavid du Colombier glat = nlat - (692.74*radsec)*sin(2.*nlat)
483e12c5d1SDavid du Colombier + (1.16*radsec)*sin(4.*nlat);
493e12c5d1SDavid du Colombier erad = .99832707e0 + .00167644e0*cos(2.*nlat)
503e12c5d1SDavid du Colombier - 0.352e-5*cos(4.*nlat)
513e12c5d1SDavid du Colombier + 0.001e-5*cos(6.*nlat)
523e12c5d1SDavid du Colombier + 0.1568e-6*elev;
533e12c5d1SDavid du Colombier
543e12c5d1SDavid du Colombier for(i=0; q=objlst[i]; i++) {
553e12c5d1SDavid du Colombier q->name = idata[i].name;
567dd7cddfSDavid du Colombier q->name1 = idata[i].name1;
573e12c5d1SDavid du Colombier q->obj = idata[i].obj;
583e12c5d1SDavid du Colombier }
593e12c5d1SDavid du Colombier ostar.obj = fstar;
603e12c5d1SDavid du Colombier ostar.name = "star";
613e12c5d1SDavid du Colombier }
623e12c5d1SDavid du Colombier
633e12c5d1SDavid du Colombier void
setime(double d)643e12c5d1SDavid du Colombier setime(double d)
653e12c5d1SDavid du Colombier {
663e12c5d1SDavid du Colombier double x, xm, ym, zm;
673e12c5d1SDavid du Colombier
683e12c5d1SDavid du Colombier eday = d + deltat/86400.;
693e12c5d1SDavid du Colombier wlong = awlong + 15.*deltat*radsec;
703e12c5d1SDavid du Colombier
71*59cc4ca5SDavid du Colombier capt = eday/36524.220e0;
723e12c5d1SDavid du Colombier capt2 = capt*capt;
733e12c5d1SDavid du Colombier capt3 = capt*capt2;
743e12c5d1SDavid du Colombier nutate();
753e12c5d1SDavid du Colombier eday += .1;
763e12c5d1SDavid du Colombier sun();
773e12c5d1SDavid du Colombier srad = rad;
783e12c5d1SDavid du Colombier xm = rad*cos(beta)*cos(lambda);
793e12c5d1SDavid du Colombier ym = rad*cos(beta)*sin(lambda);
803e12c5d1SDavid du Colombier zm = rad*sin(beta);
813e12c5d1SDavid du Colombier eday -= .1;
823e12c5d1SDavid du Colombier sun();
833e12c5d1SDavid du Colombier xms = rad*cos(beta)*cos(lambda);
843e12c5d1SDavid du Colombier yms = rad*cos(beta)*sin(lambda);
853e12c5d1SDavid du Colombier zms = rad*sin(beta);
863e12c5d1SDavid du Colombier x = .057756;
873e12c5d1SDavid du Colombier xdot = x*(xm-xms);
883e12c5d1SDavid du Colombier ydot = x*(ym-yms);
893e12c5d1SDavid du Colombier zdot = x*(zm-zms);
903e12c5d1SDavid du Colombier }
913e12c5d1SDavid du Colombier
923e12c5d1SDavid du Colombier void
setobj(Obj1 * op)933e12c5d1SDavid du Colombier setobj(Obj1 *op)
943e12c5d1SDavid du Colombier {
953e12c5d1SDavid du Colombier Obj1 *p;
963e12c5d1SDavid du Colombier
973e12c5d1SDavid du Colombier p = op;
983e12c5d1SDavid du Colombier p->ra = ra;
993e12c5d1SDavid du Colombier p->decl2 = decl2;
1003e12c5d1SDavid du Colombier p->semi2 = semi2;
1013e12c5d1SDavid du Colombier p->az = az;
1023e12c5d1SDavid du Colombier p->el = el;
1033e12c5d1SDavid du Colombier p->mag = mag;
1043e12c5d1SDavid du Colombier }
1053e12c5d1SDavid du Colombier
1063e12c5d1SDavid du Colombier long starsao = 0;
1073e12c5d1SDavid du Colombier
1083e12c5d1SDavid du Colombier void
fstar(void)1093e12c5d1SDavid du Colombier fstar(void)
1103e12c5d1SDavid du Colombier {
1113e12c5d1SDavid du Colombier
1123e12c5d1SDavid du Colombier ra = ostar.point[0].ra;
1133e12c5d1SDavid du Colombier decl2 = ostar.point[0].decl2;
1143e12c5d1SDavid du Colombier semi2 = ostar.point[0].semi2;
1153e12c5d1SDavid du Colombier az = ostar.point[0].az;
1163e12c5d1SDavid du Colombier el = ostar.point[0].el;
1173e12c5d1SDavid du Colombier mag = ostar.point[0].mag;
1183e12c5d1SDavid du Colombier }
1193e12c5d1SDavid du Colombier
1203e12c5d1SDavid du Colombier void
fsun(void)1213e12c5d1SDavid du Colombier fsun(void)
1223e12c5d1SDavid du Colombier {
1233e12c5d1SDavid du Colombier
1243e12c5d1SDavid du Colombier beta = 0;
1253e12c5d1SDavid du Colombier rad = 0;
1263e12c5d1SDavid du Colombier lambda = 0;
1273e12c5d1SDavid du Colombier motion = 0;
1283e12c5d1SDavid du Colombier helio();
1293e12c5d1SDavid du Colombier geo();
1303e12c5d1SDavid du Colombier seday = eday;
1313e12c5d1SDavid du Colombier salph = alpha;
1323e12c5d1SDavid du Colombier sdelt = delta;
1333e12c5d1SDavid du Colombier mag = lmb2;
1343e12c5d1SDavid du Colombier }
1353e12c5d1SDavid du Colombier
1363e12c5d1SDavid du Colombier void
shad(void)1373e12c5d1SDavid du Colombier shad(void)
1383e12c5d1SDavid du Colombier {
1393e12c5d1SDavid du Colombier
1403e12c5d1SDavid du Colombier if(seday != eday)
1413e12c5d1SDavid du Colombier fsun();
1423e12c5d1SDavid du Colombier if(meday != eday)
1433e12c5d1SDavid du Colombier moon();
1443e12c5d1SDavid du Colombier alpha = fmod(salph+pi, pipi);
1453e12c5d1SDavid du Colombier delta = -sdelt;
1463e12c5d1SDavid du Colombier hp = mhp;
1473e12c5d1SDavid du Colombier semi = 1.0183*mhp/radsec - 969.85/srad;
1483e12c5d1SDavid du Colombier geo();
1493e12c5d1SDavid du Colombier }
150