#include "astro.h"
Obj2* objlst[] =
{
&osun,
&omoon,
&oshad,
&omerc,
&ovenus,
&omars,
&ojup,
&osat,
&ouran,
&onept,
&oplut,
&ocomet,
0,
};
struct idata
{
char* name;
char* name1;
void (*obj)(void);
} idata[] =
{
"The sun", "sun", fsun,
"The moon", "moon", moon,
"The shadow", "shadow", shad,
"Mercury", "mercury", merc,
"Venus", "venus", venus,
"Mars", "mars", mars,
"Jupiter", "jupiter", jup,
"Saturn", "saturn", sat,
"Uranus", "uranus", uran,
"Neptune", "neptune", nept,
"Pluto", "pluto", plut,
"Comet", "comet", comet,
};
void
init(void)
{
Obj2 *q;
int i;
glat = nlat - (692.74*radsec)*sin(2.*nlat)
+ (1.16*radsec)*sin(4.*nlat);
erad = .99832707e0 + .00167644e0*cos(2.*nlat)
- 0.352e-5*cos(4.*nlat)
+ 0.001e-5*cos(6.*nlat)
+ 0.1568e-6*elev;
for(i=0; q=objlst[i]; i++) {
q->name = idata[i].name;
q->name1 = idata[i].name1;
q->obj = idata[i].obj;
}
ostar.obj = fstar;
ostar.name = "star";
}
void
setime(double d)
{
double x, xm, ym, zm;
eday = d + deltat/86400.;
wlong = awlong + 15.*deltat*radsec;
capt = eday/36524.220e0;
capt2 = capt*capt;
capt3 = capt*capt2;
nutate();
eday += .1;
sun();
srad = rad;
xm = rad*cos(beta)*cos(lambda);
ym = rad*cos(beta)*sin(lambda);
zm = rad*sin(beta);
eday -= .1;
sun();
xms = rad*cos(beta)*cos(lambda);
yms = rad*cos(beta)*sin(lambda);
zms = rad*sin(beta);
x = .057756;
xdot = x*(xm-xms);
ydot = x*(ym-yms);
zdot = x*(zm-zms);
}
void
setobj(Obj1 *op)
{
Obj1 *p;
p = op;
p->ra = ra;
p->decl2 = decl2;
p->semi2 = semi2;
p->az = az;
p->el = el;
p->mag = mag;
}
long starsao = 0;
void
fstar(void)
{
ra = ostar.point[0].ra;
decl2 = ostar.point[0].decl2;
semi2 = ostar.point[0].semi2;
az = ostar.point[0].az;
el = ostar.point[0].el;
mag = ostar.point[0].mag;
}
void
fsun(void)
{
beta = 0;
rad = 0;
lambda = 0;
motion = 0;
helio();
geo();
seday = eday;
salph = alpha;
sdelt = delta;
mag = lmb2;
}
void
shad(void)
{
if(seday != eday)
fsun();
if(meday != eday)
moon();
alpha = fmod(salph+pi, pipi);
delta = -sdelt;
hp = mhp;
semi = 1.0183*mhp/radsec - 969.85/srad;
geo();
}
|