⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 altaz.c

📁 c源码
💻 C
字号:
/* Apply diurnal aberrations and calculate topocentric * altitude and azimuth, given the geocentric apparent * right ascension and declination. * * Ephemeris transit times can be obtained by modifying * aa.ini to declare TDT = UT. *  * This program assumes that deltaT, the difference * between Ephemeris Time (TDT) and Universal Time (UT), * has already been calculated.  The global variables * TDT and UT must already have been loaded with the * correct values of TDT and UT, respectively.  See deltat.c. * * Inputs are polar coordinates: * dist is the true geocentric distance in au. * ra and dec are in radians. * * J is the Julian date in UT measure. * * AA page B60 and D3. */#include "kep.h"extern double tlong, tlat, glat;int altaz( pol, J )double pol[3];double J;{double dec, cosdec, sindec, lha, coslha, sinlha;double ra, dist, last, alt, az, coslat, sinlat;double N, D, x, y, z, TPI;ra = pol[0];dec = pol[1];dist = pol[2];TPI = 2.0*PI;/* local apparent sidereal time, seconds converted to radians */last = sidrlt( J, tlong ) * DTR/240.0;lha = last - ra; /* local hour angle, radians */if( prtflg )	{	printf( "Local apparent sidereal time " );	hms( last );	printf( "\n" );	}/* Display rate at which ra and dec are changing *//* *if( prtflg ) *	{ *	x = RTS/24.0; *	N = x*dradt; *	D = x*ddecdt; *	if( N != 0.0 ) *		printf( "dRA/dt %.2f\"/h, dDec/dt %.2f\"/h\n", N, D ); *	} */diurab( last, &ra, &dec );/* Do rise, set, and transit times   trnsit.c takes diurnal parallax into account,   but not diurnal aberration.  */lha = last - ra;trnsit( J, lha, dec );/* Diurnal parallax */diurpx( last, &ra, &dec, dist );/* Diurnal aberration *//*diurab( last, &ra, &dec );*//* Convert ra and dec to altitude and azimuth */cosdec = cos(dec);sindec = sin(dec);lha = last - ra;coslha = cos(lha);sinlha = sin(lha);/* Use the geodetic latitude for altitude and azimuth */x = DTR * glat;coslat = cos(x);sinlat = sin(x);N = -cosdec * sinlha;D =  sindec * coslat  -  cosdec * coslha * sinlat;az = RTD * zatan2( D, N );alt = sindec * sinlat  +  cosdec * coslha * coslat;alt = RTD * asin(alt);/* Correction for atmospheric refraction * unit = degrees */D = refrac( alt );alt += D;/* Convert back to R.A. and Dec. */y = sin(DTR*alt);x = cos(DTR*alt);z = cos(DTR*az);sinlha = -x * sin(DTR*az);coslha = y*coslat - x*z*sinlat;sindec = y*sinlat + x*z*coslat;lha = zatan2( coslha, sinlha );y = ra; /* save previous values, before refrac() */z = dec;dec = asin( sindec );ra = last - lha;y = ra - y; /* change in ra */while( y < -PI )	y += TPI;while( y > PI )	y -= TPI;y = RTS*y/15.0;z = RTS*(dec - z);if( prtflg )	{	printf( "atmospheric refraction %.3f deg  dRA %.3fs dDec %.2f\"\n",		 D, y, z );	printf( "Topocentric:  Altitude %.3f deg, ", alt );	printf( "Azimuth %.3f deg\n", az );	printf( "Topocentric: R.A." );	hms( ra );	printf( " Dec." );	dms( dec );	printf( "\n" );	}return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -