#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,}; voidinit(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";} voidsetime(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);} voidsetobj(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; voidfstar(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;} voidfsun(void){ beta = 0; rad = 0; lambda = 0; motion = 0; helio(); geo(); seday = eday; salph = alpha; sdelt = delta; mag = lmb2;} voidshad(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();}
#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();
}