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
init(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
setime(double d)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
setobj(Obj1 * op)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
fstar(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
fsun(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
shad(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 }
150