;***************************************************************************************** ; Mega 128 Scope Controller Program ; (c) Martin Cibulski ;**************************************************************************************** ;void PrecessionMatrix (double ep0, double ep1) ;{ ; // arcseconds to radians ; const double DAS2R = 4.8481368110953599358991410235794797595635330237270e-6; ; double a, b; ; double sinz, cosz, sinth, costh, sin_zeta, cos_zeta; ; ; double t0; ; double t; ; double tas2r; ; double w; ; double zeta; ; double z; ; double theta; ; ; // Interval between basic epoch J2000.0 and beginning epoch (JC) ; t0 = ( ep0 - 2000.0 ) / 100.0; ; ; // Interval over which precession required (JC) ; t = ( ep1 - ep0 ) / 100.0; ; ; // Euler angles ; tas2r = t * DAS2R; ; ; w = 2306.2181 + ( ( 1.39656 - ( 0.000139 * t0 ) ) * t0 ); ; ; zeta = (w + ( ( 0.30188 - 0.000344 * t0 ) + 0.017998 * t ) * t ) * tas2r; ; ; z = (w + ( ( 1.09468 + 0.000066 * t0 ) + 0.018203 * t ) * t ) * tas2r; ; ; theta = ( ( 2004.3109 + ( - 0.85330 - 0.000217 * t0 ) * t0 ) ; + ( ( -0.42665 - 0.000217 * t0 ) - 0.041833 * t ) * t ) * tas2r; ; ; sinz = sin(z); ; cosz = cos(z); ; sinth = sin(theta); ; costh = cos(theta); ; sin_zeta = sin(zeta); ; cos_zeta = cos(zeta); ; ; a = costh * sin_zeta; ; b = costh * cos_zeta; ; ; mPrecession.x11 = -sinz * sin_zeta + cosz * b; ; mPrecession.x12 = -sinz * cos_zeta - cosz * a; ; mPrecession.x13 = -cosz * sinth; ; mPrecession.x21 = cosz * sin_zeta + sinz * b; ; mPrecession.x22 = cosz * cos_zeta - sinz * a; ; mPrecession.x23 = -sinz * sinth; ; mPrecession.x31 = sinth * cos_zeta; ; mPrecession.x32 = -sinth * sin_zeta; ; mPrecession.x33 = costh; ; ; mPrecessionInverted.Copy (mPrecession); ; mPrecessionInverted.Invert(); ;} ;**************************************************************************************** .CSEG prc_das2r: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;4.84813681109536e-6 prc_2306_2181: .db 0x40,0xA2,0x04,0x6F,0xAA,0xCD,0x9E,0x84 ;2306.2181 prc_1_39656: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;1.39656 prc_0_000139: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.000139 prc_0_30188: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.30188 prc_0_000344: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.000344 prc_0_017998: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.017998 prc_1_09468: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;1.09468 prc_0_000066: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.000066 prc_0_018203: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.018203 prc_2004_3109: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;2004.3109 prc_0_85330: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.85330 prc_0_000217: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.000217 prc_0_42665: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.42665 prc_0_041833: .db 0x3E,0xD4,0x55,0xA5,0xB2,0xFF,0x8F,0x9D ;0.041833 .DSEG ;precession matrices prc_matrix: .byte 9*FLT_SIZE prc_matrix_inv: .byte 9*FLT_SIZE ;**************************************************************************************** .CSEG prc_calc_matrices: ret ;****************************************************************************************