1 | #include "slalib.h"
|
---|
2 | #include "slamac.h"
|
---|
3 | void slaE2h ( float ha, float dec, float phi, float *az, float *el )
|
---|
4 | /*
|
---|
5 | ** - - - - - - -
|
---|
6 | ** s l a E 2 h
|
---|
7 | ** - - - - - - -
|
---|
8 | **
|
---|
9 | ** Equatorial to horizon coordinates: HA,Dec to Az,El
|
---|
10 | **
|
---|
11 | ** (single precision)
|
---|
12 | **
|
---|
13 | ** Given:
|
---|
14 | ** ha float hour angle
|
---|
15 | ** dec float declination
|
---|
16 | ** phi float observatory latitude
|
---|
17 | **
|
---|
18 | ** Returned:
|
---|
19 | ** *az float azimuth
|
---|
20 | ** *el float elevation
|
---|
21 | **
|
---|
22 | ** Notes:
|
---|
23 | **
|
---|
24 | ** 1) All the arguments are angles in radians.
|
---|
25 | **
|
---|
26 | ** 2) Azimuth is returned in the range 0-2pi; north is zero,
|
---|
27 | ** and east is +pi/2. Elevation is returned in the range
|
---|
28 | ** +/-pi/2.
|
---|
29 | **
|
---|
30 | ** 3) The latitude must be geodetic. In critical applications,
|
---|
31 | ** corrections for polar motion should be applied.
|
---|
32 | **
|
---|
33 | ** 4) In some applications it will be important to specify the
|
---|
34 | ** correct type of hour angle and declination in order to
|
---|
35 | ** produce the required type of azimuth and elevation. In
|
---|
36 | ** particular, it may be important to distinguish between
|
---|
37 | ** elevation as affected by refraction, which would
|
---|
38 | ** require the "observed" HA,Dec, and the elevation
|
---|
39 | ** in vacuo, which would require the "topocentric" HA,Dec.
|
---|
40 | ** If the effects of diurnal aberration can be neglected, the
|
---|
41 | ** "apparent" HA,Dec may be used instead of the topocentric
|
---|
42 | ** HA,Dec.
|
---|
43 | **
|
---|
44 | ** 5) No range checking of arguments is carried out.
|
---|
45 | **
|
---|
46 | ** 6) In applications which involve many such calculations, rather
|
---|
47 | ** than calling the present routine it will be more efficient to
|
---|
48 | ** use inline code, having previously computed fixed terms such
|
---|
49 | ** as sine and cosine of latitude, and (for tracking a star)
|
---|
50 | ** sine and cosine of declination.
|
---|
51 | **
|
---|
52 | ** Defined in slamac.h: D2PI
|
---|
53 | **
|
---|
54 | ** Last revision: 10 July 1994
|
---|
55 | **
|
---|
56 | ** Copyright P.T.Wallace. All rights reserved.
|
---|
57 | */
|
---|
58 | {
|
---|
59 | float sh, ch, sd, cd, sp, cp, x, y, z, r, a;
|
---|
60 |
|
---|
61 | /* Useful trig functions */
|
---|
62 | sh = (float) sin ( ha );
|
---|
63 | ch = (float) cos ( ha );
|
---|
64 | sd = (float) sin ( dec );
|
---|
65 | cd = (float) cos ( dec );
|
---|
66 | sp = (float) sin ( phi );
|
---|
67 | cp = (float) cos ( phi );
|
---|
68 |
|
---|
69 | /* Az,El as x,y,z */
|
---|
70 | x = - ch * cd * sp + sd * cp;
|
---|
71 | y = - sh * cd;
|
---|
72 | z = ch * cd * cp + sd * sp;
|
---|
73 |
|
---|
74 | /* To spherical */
|
---|
75 | r = (float) sqrt ( x * x + y * y );
|
---|
76 | a = ( r == 0.0f ) ? 0.0f : (float) atan2 ( y, x ) ;
|
---|
77 | *az = ( a < 0.0f ) ? (float) ( (double) a + D2PI ) : a;
|
---|
78 | *el = (float) atan2 ( z, r );
|
---|
79 | }
|
---|