xref: /plan9/sys/src/cmd/astro/init.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
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