plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

init.c (2133B)


      1 #include "astro.h"
      2 
      3 Obj2*	objlst[] =
      4 {
      5 	&osun,
      6 	&omoon,
      7 	&oshad,
      8 	&omerc,
      9 	&ovenus,
     10 	&omars,
     11 	&ojup,
     12 	&osat,
     13 	&ouran,
     14 	&onept,
     15 	&oplut,
     16 	&ocomet,
     17 	0
     18 };
     19 
     20 struct	idata
     21 {
     22 	char*	name;
     23 	char*	name1;
     24 	void	(*obj)(void);
     25 } idata[] =
     26 {
     27 	"The sun",	"sun",		fsun,
     28 	"The moon",	"moon",		moon,
     29 	"The shadow",	"shadow",	shad,
     30 	"Mercury",	"mercury",	merc,
     31 	"Venus",	"venus",	venus,
     32 	"Mars",		"mars",		mars,
     33 	"Jupiter",	"jupiter",	jup,
     34 	"Saturn",	"saturn",	sat,
     35 	"Uranus",	"uranus",	uran,
     36 	"Neptune",	"neptune",	nept,
     37 	"Pluto",	"pluto",	plut,
     38 	"Comet",	"comet",	comet
     39 };
     40 
     41 void
     42 init(void)
     43 {
     44 	Obj2 *q;
     45 	int i;
     46 
     47 	glat = nlat - (692.74*radsec)*sin(2.*nlat)
     48 		 + (1.16*radsec)*sin(4.*nlat);
     49 	erad = .99832707e0 + .00167644e0*cos(2.*nlat)
     50 		 - 0.352e-5*cos(4.*nlat)
     51 		 + 0.001e-5*cos(6.*nlat)
     52 		 + 0.1568e-6*elev;
     53 
     54 	for(i=0; q=objlst[i]; i++) {
     55 		q->name = idata[i].name;
     56 		q->name1 = idata[i].name1;
     57 		q->obj = idata[i].obj;
     58 	}
     59 	ostar.obj = fstar;
     60 	ostar.name = "star";
     61 }
     62 
     63 void
     64 setime(double d)
     65 {
     66 	double x, xm, ym, zm;
     67 
     68 	eday = d + deltat/86400.;
     69 	wlong = awlong + 15.*deltat*radsec;
     70 
     71 	capt = eday/36524.220e0;
     72 	capt2 = capt*capt;
     73 	capt3 = capt*capt2;
     74 	nutate();
     75 	eday += .1;
     76 	sun();
     77 	srad = rad;
     78 	xm = rad*cos(beta)*cos(lambda);
     79 	ym = rad*cos(beta)*sin(lambda);
     80 	zm = rad*sin(beta);
     81 	eday -= .1;
     82 	sun();
     83 	xms = rad*cos(beta)*cos(lambda);
     84 	yms = rad*cos(beta)*sin(lambda);
     85 	zms = rad*sin(beta);
     86 	x = .057756;
     87 	xdot = x*(xm-xms);
     88 	ydot = x*(ym-yms);
     89 	zdot = x*(zm-zms);
     90 }
     91 
     92 void
     93 setobj(Obj1 *op)
     94 {
     95 	Obj1 *p;
     96 
     97 	p = op;
     98 	p->ra = ra;
     99 	p->decl2 = decl2;
    100 	p->semi2 = semi2;
    101 	p->az = az;
    102 	p->el = el;
    103 	p->mag = mag;
    104 }
    105 
    106 long	starsao = 0;
    107 
    108 void
    109 fstar(void)
    110 {
    111 
    112 	ra = ostar.point[0].ra;
    113 	decl2 = ostar.point[0].decl2;
    114 	semi2 = ostar.point[0].semi2;
    115 	az = ostar.point[0].az;
    116 	el = ostar.point[0].el;
    117 	mag = ostar.point[0].mag;
    118 }
    119 
    120 void
    121 fsun(void)
    122 {
    123 
    124 	beta = 0;
    125 	rad = 0;
    126 	lambda = 0;
    127 	motion = 0;
    128 	helio();
    129 	geo();
    130 	seday = eday;
    131 	salph = alpha;
    132 	sdelt = delta;
    133 	mag = lmb2;
    134 }
    135 
    136 void
    137 shad(void)
    138 {
    139 
    140 	if(seday != eday)
    141 		fsun();
    142 	if(meday != eday)
    143 		moon();
    144 	alpha = fmod(salph+pi, pipi);
    145 	delta = -sdelt;
    146 	hp = mhp;
    147 	semi = 1.0183*mhp/radsec - 969.85/srad;
    148 	geo();
    149 }