/*
*+
* Name:
* palDh2e
* Purpose:
* Horizon to equatorial coordinates: Az,El to HA,Dec
* Language:
* Starlink ANSI C
* Type of Module:
* Library routine
* Invocation:
* palDh2e( double az, double el, double phi, double * ha, double * dec );
* Arguments:
* az = double (Given)
* Azimuth (radians)
* el = double (Given)
* Elevation (radians)
* phi = double (Given)
* Observatory latitude (radians)
* ha = double * (Returned)
* Hour angle (radians)
* dec = double * (Returned)
* Declination (radians)
* Description:
* Convert horizon to equatorial coordinates.
* Authors:
* PTW: Pat Wallace (STFC)
* TIMJ: Tim Jenness (JAC, Hawaii)
* {enter_new_authors_here}
* Notes:
* - All the arguments are angles in radians.
* - The sign convention for azimuth is north zero, east +pi/2.
* - HA is returned in the range +/-pi. Declination is returned
* in the range +/-pi/2.
* - The latitude is (in principle) geodetic. In critical
* applications, corrections for polar motion should be applied.
* - In some applications it will be important to specify the
* correct type of elevation in order to produce the required
* type of HA,Dec. In particular, it may be important to
* distinguish between the elevation as affected by refraction,
* which will yield the "observed" HA,Dec, and the elevation
* in vacuo, which will yield the "topocentric" HA,Dec. If the
* effects of diurnal aberration can be neglected, the
* topocentric HA,Dec may be used as an approximation to the
* "apparent" HA,Dec.
* - No range checking of arguments is done.
* - 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.
* 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) 1996 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
void
palDh2e ( double az, double el, double phi, double *ha, double *dec) {
double sa;
double ca;
double se;
double ce;
double sp;
double cp;
double x;
double y;
double z;
double r;
/* Useful trig functions */
sa = sin(az);
ca = cos(az);
se = sin(el);
ce = cos(el);
sp = sin(phi);
cp = cos(phi);
/* HA,Dec as x,y,z */
x = -ca * ce * sp + se * cp;
y = -sa * ce;
z = ca * ce * cp + se * sp;
/* To HA,Dec */
r = sqrt(x * x + y * y);
if (r == 0.) {
*ha = 0.;
} else {
*ha = atan2(y, x);
}
*dec = atan2(z, r);
return;
}