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