149 lines
2.1 KiB
C
149 lines
2.1 KiB
C
#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();
|
|
}
|