/* This program reduces catalogue coordinates of a star
* to apparent place.
*
* - S. L. Moshier, November, 1987
*/
#include "kep.h"
int rstar( el )
struct star *el;
{
double p[3], q[3], e[3], m[3], temp[3], polar[3];
double T, vpi, epoch;
double cosdec, sindec, cosra, sinra;
int i;
double log();
/* Convert from RA and Dec to equatorial rectangular direction
*/
loop:
cosdec = cos( el->dec );
sindec = sin( el->dec );
cosra = cos( el->ra );
sinra = sin( el->ra );
q[0] = cosra * cosdec;
q[1] = sinra * cosdec;
q[2] = sindec;
/* space motion */
vpi = 21.094952663 * el->v * el->px;
m[0] = -el->mura * cosdec * sinra
- el->mudec * sindec * cosra
+ vpi * q[0];
m[1] = el->mura * cosdec * cosra
- el->mudec * sindec * sinra
+ vpi * q[1];
m[2] = el->mudec * cosdec
+ vpi * q[2];
epoch = el->epoch;
/* Convert FK4 to FK5 catalogue */
if( epoch == B1950 )
{
fk4fk5( q, m, el );
goto loop;
}
for( i=0; i<3; i++ )
e[i] = rearth[i];
/* precess the earth to the star epoch */
precess( e, epoch, -1 );
/* Correct for proper motion and parallax
*/
T = (TDT - epoch)/36525.0;
for( i=0; i<3; i++ )
{
p[i] = q[i] + T * m[i] - el->px * e[i];
}
/* precess the star to J2000 */
precess( p, epoch, 1 );
/* reset the earth to J2000 */
for( i=0; i<3; i++ )
e[i] = rearth[i];
/* Find Euclidean vectors between earth, object, and the sun
* angles( p, q, e );
*/
angles( p, p, e );
/* Find unit vector from earth in direction of object
*/
for( i=0; i<3; i++ )
{
p[i] /= EO;
temp[i] = p[i];
}
if( prtflg )
{
printf( "approx. visual magnitude %.1f\n", el->mag );
/* Report astrometric position
*/
showrd( "Astrometric J2000.0:", p, polar );
/* Also in 1950 coordinates
*/
precess( temp, B1950, -1 );
showrd( "Astrometric B1950.0:", temp, polar );
/* For equinox of date: */
for( i=0; i<3; i++ )
temp[i] = p[i];
precess( temp, TDT, -1 );
showrd( "Astrometric of date:", temp, polar );
}
/* Correct position for light deflection
* relativity( p, q, e );
*/
relativity( p, p, e );
/* Correct for annual aberration
*/
annuab( p );
/* Precession of the equinox and ecliptic
* from J2000.0 to ephemeris date
*/
precess( p, TDT, -1 );
/* Ajust for nutation
* at current ecliptic.
*/
epsiln( TDT );
nutate( TDT, p );
/* Display the final apparent R.A. and Dec.
* for equinox of date.
*/
showrd( " Apparent:", p, polar );
/* Go do topocentric reductions.
*/
dradt = 0.0;
ddecdt = 0.0;
polar[2] = 1.0e38; /* make it ignore diurnal parallax */
altaz( polar, UT );
return(0);
}
/* Compute stellar ephemeris for ELOBJECT at time TDT. */
extern struct orbit *elobject;
int dostar ()
{
rstar( (struct star *) elobject );
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1