1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include "astro.h"
void
geo(void)
{
/*
* uses alpha, delta, rp
*/
/*
* sets ra, decl, lha, decl2, az, el
*/
/*
* geo converts geocentric equatorial coordinates
* to topocentric equatorial and topocentric horizon
* coordinates.
* All are (usually) referred to the true equator.
*/
double sel, saz, caz;
double f;
double sa, ca, sd;
/*
* convert to local hour angle and declination
*/
lha = gst - alpha - wlong;
decl = delta;
/*
* compute diurnal parallax (requires geocentric latitude)
*/
sa = cos(decl)*sin(lha);
ca = cos(decl)*cos(lha) - erad*cos(glat)*sin(hp);
sd = sin(decl) - erad*sin(glat)*sin(hp);
lha = atan2(sa, ca);
decl2 = atan2(sd, sqrt(sa*sa+ca*ca));
f = sqrt(sa*sa+ca*ca+sd*sd);
semi2 = semi/f;
ra = gst - lha - wlong;
ra = pinorm(ra);
/*
* convert to horizon coordinates
*/
sel = sin(nlat)*sin(decl2) + cos(nlat)*cos(decl2)*cos(lha);
el = atan2(sel, pyth(sel));
saz = sin(lha)*cos(decl2);
caz = cos(nlat)*sin(decl2) - sin(nlat)*cos(decl2)*cos(lha);
az = pi + atan2(saz, -caz);
az /= radian;
el /= radian;
}
|