V10/cmd/sky/star.c

#include "sky.h"

star()
{
	double capt0, capt1, capt12, capt13;
	double sl, sb, cl;
	double zt, zee, tht;
	double sa, ca, sd;

	capt0 = epoch/36524.220;
	capt1 = (eday - epoch)/36524.220;
	capt12 = capt1*capt1;
	capt13 = capt12*capt1;

	da = da*radsec*15.*100.;
	dd = dd*radsec*100.;

/*
 *	remove E-terms of aberration
 *	except when finding catalog mean places
 *	See Exp. Supp. p. 144 and 48
 *
 *	I have omitted an unimportant time dependence which depends
 *	in essence on the change in the eccentricity
 *	and the perihelion position of the earths orbit.
 */

	alpha = alpha + .341*radsec*sin(alpha+168.8*radian)
	  /cos(delta);
	delta = delta + .341*radsec*cos(alpha+168.8*radian)
	  *sin(delta) + .029*radsec*cos(delta);

/*
 *	Correct for proper motion.
 *
 *	This computation is a second order approximation which
 *	causes no perciptible error in a millenium.
 */

	alpha = alpha + capt1*da
	 + da*dd*sin(delta)/cos(delta)*capt1*capt1;
	delta = delta + capt1*dd
	 - 0.25*da*da*sin(2.*delta)*capt1*capt1;

/*
 *	The effect of radial velocity has been omitted.
 *	The only bright stars perceptibly affected are
 *	Sirius, alpha Cent, and Altair.
 */

/*
 *	convert mean places at epoch of startable to current
 *	epoch (i.e. compute relevant precession)
 *	Coefficients are from Exp. Supp. p. 30.
 */

	zt = (2304.250 + 1.396*capt0)*capt1 + 0.302*capt12
	 + 0.018*capt13;
	zee = zt + 0.791*capt12;
	tht = (2004.682 - 0.853*capt0)*capt1 - 0.426*capt12
	 - 0.042*capt13;

	zt = zt*radsec;
	zee = zee*radsec;
	tht = tht*radsec;

	sa = cos(delta)*sin(alpha+zt);
	ca = cos(tht)*cos(delta)*cos(alpha+zt) - sin(tht)*sin(delta);
	sd = cos(tht)*sin(delta) + sin(tht)*cos(delta)*cos(alpha+zt);

	alpha = atan2(sa,ca) + zee;
	delta = atan2(sd, sqrt(sa*sa+ca*ca));

/*
 *	convert to mean ecliptic system of date
 */

	cl = cos(delta)*cos(alpha);
	sl = cos(delta)*sin(alpha)*cos(obliq) + sin(delta)*sin(obliq);
	sb = -cos(delta)*sin(alpha)*sin(obliq) + sin(delta)*cos(obliq);
	lambda = atan2(sl,cl);
	beta = atan2(sb,sqrt(cl*cl+sl*sl));
	if(px > 1.0) px = 0.;
	if(px != 0.) rad = 1./(radsec*px);
	if(px <= 0.) rad = 1.e9;
	semi = 0.;
	ldot = 0.;
	bdot = 0.;
	rdot = 0.;

	helio();
	geo();
}