54 #define MILLIARCSECx10_TO_RAD (PI / (180.0 * 3600.0 * 10000.0))
58 enum {TERM_X0, TERM_X1, TERM_X2, TERM_X3, TERM_X4, TERM_X_COUNT};
59 enum {TERM_PSI_A, TERM_PSI_B, TERM_EPS_C, TERM_EPS_D, TERM_PE_COUNT};
60 #define TERM_Y_COUNT TERM_X_COUNT
77 LOCAL const int Y_TERMS[Y_COUNT][TERM_Y_COUNT]=
144 LOCAL const double PE_TERMS[Y_COUNT][TERM_PE_COUNT]={
145 {-171996,-174.2,92025,8.9},
146 {-13187,-1.6,5736,-3.1},
147 {-2274,-0.2,977,-0.5},
270 double psiSum_masx10;
271 double epsSum_masx10;
280 d =
degToRad(297.85036 + t_cy * (445267.11148
282 + t_cy * (1.0/189474.0))));
286 lp =
degToRad(357.52772 + t_cy * (35999.05034
288 + t_cy * (-1.0/300000.0))));
292 l =
degToRad(134.96298 + t_cy * (477198.867398
294 + t_cy * (1.0/56250.0))));
299 f =
degToRad(93.27191 + t_cy * (483202.017538
301 + t_cy * (1.0/327270.0))));
305 om =
degToRad(125.04452 + t_cy * (-1934.136261
307 + t_cy * (1.0/450000.0))));
309 printf(
"Nutation Args: d (X0) = %f°, lp (X1) = %f°, l (X2) = %f°\n"
310 " f (X3) = %f°, om (X4) = %f°\n",
318 for (i = 0; i < Y_COUNT; i++) {
319 a_rad = d * Y_TERMS[i][0] + lp * Y_TERMS[i][1] + l * Y_TERMS[i][2]
320 + f * Y_TERMS[i][3] + om * Y_TERMS[i][4];
321 psiSum_masx10 += sin(a_rad) * (PE_TERMS[i][TERM_PSI_A]
322 + t_cy * PE_TERMS[i][TERM_PSI_B]);
323 epsSum_masx10 += cos(a_rad) * (PE_TERMS[i][TERM_EPS_C]
324 + t_cy * PE_TERMS[i][TERM_EPS_D]);
328 nut->
dPsi_rad = psiSum_masx10 * MILLIARCSECx10_TO_RAD;
329 nut->
dEps_rad = epsSum_masx10 * MILLIARCSECx10_TO_RAD;
369 double u = t_cy/100.0;
410 static const double B0 = 280.46061837 *
DEG2RAD;
411 static const double B1 = 360.98564736629 *
DEG2RAD;
412 static const double B2 = 0.000387933 *
DEG2RAD;
413 static const double B3 = (-1.0 / 38710000.0) *
DEG2RAD;
415 static const double B0d = 4.89496121274;
416 static const double B1d = 6.300388098984957;
417 static const double B2d = 6.77070812713916E-06;
418 static const double B3d = -4.50872966157151E-10;
425 gmst_rad = B0 + B1 * du + (tu * tu * (B2 + (tu * B3)));