This is trnsit.c in view mode; [Download] [Up]
/*****************************************/
/* trnsit.c */
/* */
/* Calculate time of transit assuming */
/* RA and Dec change uniformly with time */
/* */
/* -- S. L. Moshier */
/*****************************************/
/***** description
*
* $Id: trnsit.c,v 1.5 1993/04/30 18:11:31 craig Exp $
*
*/
/***** modification history
*
* $Log: trnsit.c,v $
* Revision 1.5 1993/04/30 18:11:31 craig
* Changed the output statements to output to a output file
* (which can be stdout) instead of stdout.
*
* Revision 1.4 1993/04/22 19:51:54 craig
* Minor changes.
*
* Revision 1.3 1993/04/21 21:59:47 craig
* Changed the path of the satellite.h include.
* Changed ecnsts to pcnsts.
*
* Revision 1.2 1993/04/21 15:55:38 craig
* First working version. Ran through indent and converted to ansi.
* Added hooks for working with the satellite programs
*
*
*/
#define COSSUN -0.014543897651582657 /* cosine of 90 degrees 50
minutes: */
#define COSZEN -9.8900378587411476e-3 /* cosine of 90 degrees 34
minutes: */
/***** include files *****/
#include <math.h>
#include "aaproto.h"
#include "satellite.h"
/***** global variables *****/
/* from cnstinit.c */
extern int objnum;
extern FILE *outfile;
extern double dradt;
extern double ddecdt;
extern double obpolar[3];
extern struct MCONSTANTS mcnsts;
extern struct PCONSTANTS pcnsts;
/* from kfiles.c */
extern double glat;
/**********/
/* trnsit */
/**********/
/* J = Julian date */
/* lha = local hour angle, radians */
/* dec = declination, radians */
int trnsit (double J, double lha, double dec)
{
double x, y, z, N, D;
double lhay, cosdec, sindec, coslat, sinlat;
/* observer's geodetic latitude, in radians */
x = glat * mcnsts.de2ra;
coslat = cos (x);
sinlat = sin (x);
cosdec = cos (dec);
sindec = sin (dec);
x = (J - floor (J - 0.5) - 0.5) * mcnsts.twopi;
/* adjust local hour angle */
y = lha;
while (y < -mcnsts.pi)
{
y += mcnsts.twopi;
}
while (y > mcnsts.pi)
{
y -= mcnsts.twopi;
}
lhay = y;
y = y / (-dradt / mcnsts.twopi + 1.00273790934);
N = x - y;
fprintf (outfile, "approx local meridian transit");
hms (outfile, N);
fprintf (outfile, "UT (date + %.5f)\n", N / mcnsts.twopi);
if ((coslat == 0.0) || (cosdec == 0.0))
{
return (0);
}
/* The time at which the upper limb of the body meets the horizon
depends on the body's angular diameter. */
switch (objnum)
{
case 0:
/* Sun */
N = COSSUN;
break;
case 3:
/* Moon, elevation = -34' - semidiameter + parallax semidiameter =
0.272453 * parallax + 0.0799" */
N = 1.0 / (pcnsts.rapau * obpolar[2]);
D = asin (N); /* the parallax */
N = -9.890199094634534e-3
+ (1.0 - 0.2725076) * D
- 3.874e-7;
N = sin (N);
break;
default:
/* Other object */
N = COSZEN;
break;
}
y = (N - sinlat * sindec) / (coslat * cosdec);
if ((y < 1.0) && (y > -1.0))
{
/* Derivative of y with respect to declination times rate of
change of declination: */
z = -ddecdt * (sinlat + COSZEN * sindec);
z /= mcnsts.twopi * coslat * cosdec * cosdec;
/* Derivative of acos(y): */
z /= sqrt (1.0 - y * y);
y = acos (y);
fprintf (outfile, "rises approx ");
D = -dradt / mcnsts.twopi + 1.00273790934;
N = x - (lhay + y) * (1.0 + z) / D;
hms (outfile, N);
fprintf (outfile, "UT, sets approx ");
N = x - (lhay - y) * (1.0 - z) / D;
hms (outfile, N);
fprintf (outfile, "UT\n");
}
return (0);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.