mirror of https://github.com/XEphem/XEphem.git
76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
/* function to convert between alt/az and ha/dec.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
|
|
#include "astro.h"
|
|
|
|
static void aaha_aux (double lt, double x, double y, double *p, double *q);
|
|
|
|
/* given geographical latitude (n+, radians), lt, altitude (up+, radians),
|
|
* alt, and azimuth (angle round to the east from north+, radians),
|
|
* return hour angle (radians), ha, and declination (radians), dec.
|
|
*/
|
|
void
|
|
aa_hadec (
|
|
double lt,
|
|
double alt, double az,
|
|
double *ha, double *dec)
|
|
{
|
|
aaha_aux (lt, az, alt, ha, dec);
|
|
if (*ha > PI)
|
|
*ha -= 2*PI;
|
|
}
|
|
|
|
/* given geographical (n+, radians), lt, hour angle (radians), ha, and
|
|
* declination (radians), dec, return altitude (up+, radians), alt, and
|
|
* azimuth (angle round to the east from north+, radians),
|
|
*/
|
|
void
|
|
hadec_aa (
|
|
double lt,
|
|
double ha, double dec,
|
|
double *alt, double *az)
|
|
{
|
|
aaha_aux (lt, ha, dec, az, alt);
|
|
}
|
|
|
|
#ifdef NEED_GEOC
|
|
/* given a geographic (surface-normal) latitude, phi, return the geocentric
|
|
* latitude, psi.
|
|
*/
|
|
double
|
|
geoc_lat (
|
|
double phi)
|
|
{
|
|
#define MAXLAT degrad(89.9999) /* avoid tan() greater than this */
|
|
return (fabs(phi)>MAXLAT ? phi : atan(tan(phi)/1.00674));
|
|
}
|
|
#endif
|
|
|
|
/* the actual formula is the same for both transformation directions so
|
|
* do it here once for each way.
|
|
* N.B. all arguments are in radians.
|
|
*/
|
|
static void
|
|
aaha_aux (
|
|
double lt,
|
|
double x, double y,
|
|
double *p, double *q)
|
|
{
|
|
static double last_lt = -3434, slt, clt;
|
|
double cap, B;
|
|
|
|
if (lt != last_lt) {
|
|
slt = sin(lt);
|
|
clt = cos(lt);
|
|
last_lt = lt;
|
|
}
|
|
|
|
solve_sphere (-x, PI/2-y, slt, clt, &cap, &B);
|
|
*p = B;
|
|
*q = PI/2 - acos(cap);
|
|
}
|
|
|