/*
*+
* Name:
* palDe2h
* Purpose:
* Equatorial to horizon coordinates: HA,Dec to Az,E
* Language:
* Starlink ANSI C
* Type of Module:
* Library routine
* Invocation:
* palDe2h( double ha, double dec, double phi, double * az, double * el );
* Arguments:
* ha = double * (Given)
* Hour angle (radians)
* dec = double * (Given)
* Declination (radians)
* phi = double (Given)
* Observatory latitude (radians)
* az = double * (Returned)
* Azimuth (radians)
* el = double * (Returned)
* Elevation (radians)
* Description:
* Convert equatorial to horizon coordinates.
* Authors:
* PTW: Pat Wallace (STFC)
* TIMJ: Tim Jenness (JAC, Hawaii)
* {enter_new_authors_here}
* Notes:
* - All the arguments are angles in radians.
* - Azimuth is returned in the range 0-2pi; north is zero,
* and east is +pi/2. Elevation is returned in the range
* +/-pi/2.
* - The latitude must be geodetic. In critical applications,
* corrections for polar motion should be applied.
* - In some applications it will be important to specify the
* correct type of hour angle and declination in order to
* produce the required type of azimuth and elevation. In
* particular, it may be important to distinguish between
* elevation as affected by refraction, which would
* require the "observed" HA,Dec, and the elevation
* in vacuo, which would require the "topocentric" HA,Dec.
* If the effects of diurnal aberration can be neglected, the
* "apparent" HA,Dec may be used instead of the topocentric
* HA,Dec.
* - No range checking of arguments is carried out.
* - In applications which involve many such calculations, rather
* than calling the present routine it will be more efficient to
* use inline code, having previously computed fixed terms such
* as sine and cosine of latitude, and (for tracking a star)
* sine and cosine of declination.
* History:
* 2012-02-08 (TIMJ):
* Initial version with documentation taken from Fortran SLA
* Adapted with permission from the Fortran SLALIB library.
* {enter_further_changes_here}
* Copyright:
* Copyright (C) 1995 Rutherford Appleton Laboratory
* Copyright (C) 2012 Science and Technology Facilities Council.
* All Rights Reserved.
* Licence:
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* License along with this program. If not, see
* .
* Bugs:
* {note_any_bugs_here}
*-
*/
#include "pal.h"
#include "palmac.h"
#include
void
palDe2h ( double ha, double dec, double phi, double *az, double *el) {
double sh;
double ch;
double sd;
double cd;
double sp;
double cp;
double a;
double x;
double y;
double z;
double r;
/* Useful trig functions */
sh = sin(ha);
ch = cos(ha);
sd = sin(dec);
cd = cos(dec);
sp = sin(phi);
cp = cos(phi);
/* Az,El as x,y,z */
x = -ch * cd * sp + sd * cp;
y = -sh * cd;
z = ch * cd * cp + sd * sp;
/* To spherical */
r = sqrt(x * x + y * y);
if (r == 0.) {
a = 0.;
} else {
a = atan2(y, x);
}
if (a < 0.) {
a += PAL__D2PI;
}
*az = a;
*el = atan2(z, r);
return;
}