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 }