public static void getAstroValuesByDay( double julianDay, final Location loc, Astro astro, Astro topAstro) { AstroDay ad = new AstroDay(); if (astro.getJd() == julianDay - 1) { astro.getRa()[0] = astro.getRa()[1]; astro.getRa()[1] = astro.getRa()[2]; astro.getDec()[0] = astro.getDec()[1]; astro.getDec()[1] = astro.getDec()[2]; astro.getSid()[0] = astro.getSid()[1]; astro.getSid()[1] = astro.getSid()[2]; astro.getDra()[0] = astro.getDra()[1]; astro.getDra()[1] = astro.getDra()[2]; astro.getRsum()[0] = astro.getRsum()[1]; astro.getRsum()[1] = astro.getRsum()[2]; computeAstroDay(julianDay + 1, ad); astro.getRa()[2] = ad.getRa(); astro.getDec()[2] = ad.getDec(); astro.getSid()[2] = ad.getSidtime(); astro.getDra()[2] = ad.getDra(); astro.getRsum()[2] = ad.getRsum(); } else if (astro.getJd() == julianDay + 1) { astro.getRa()[2] = astro.getRa()[1]; astro.getRa()[1] = astro.getRa()[0]; astro.getDec()[2] = astro.getDec()[1]; astro.getDec()[1] = astro.getDec()[0]; astro.getSid()[2] = astro.getSid()[1]; astro.getSid()[1] = astro.getSid()[0]; astro.getDra()[2] = astro.getDra()[1]; astro.getDra()[1] = astro.getDra()[0]; astro.getRsum()[2] = astro.getRsum()[1]; astro.getRsum()[1] = astro.getRsum()[0]; computeAstroDay(julianDay - 1, ad); astro.getRa()[0] = ad.getRa(); astro.getDec()[0] = ad.getDec(); astro.getSid()[0] = ad.getSidtime(); astro.getDra()[0] = ad.getDra(); astro.getRsum()[0] = ad.getRsum(); } else if (astro.getJd() != julianDay) { computeAstroDay(julianDay - 1, ad); astro.getRa()[0] = ad.getRa(); astro.getDec()[0] = ad.getDec(); astro.getSid()[0] = ad.getSidtime(); astro.getDra()[0] = ad.getDra(); astro.getRsum()[0] = ad.getRsum(); computeAstroDay(julianDay, ad); astro.getRa()[1] = ad.getRa(); astro.getDec()[1] = ad.getDec(); astro.getSid()[1] = ad.getSidtime(); astro.getDra()[1] = ad.getDra(); astro.getRsum()[1] = ad.getRsum(); computeAstroDay(julianDay + 1, ad); astro.getRa()[2] = ad.getRa(); astro.getDec()[2] = ad.getDec(); astro.getSid()[2] = ad.getSidtime(); astro.getDra()[2] = ad.getDra(); astro.getRsum()[2] = ad.getRsum(); } astro.setJd(julianDay); computeTopAstro(loc, astro, topAstro); }
public static void computeAstroDay(double JD, AstroDay astroday) { int i = 0; double R, Gg, G; double tL, L; double tB, B; double X0, X1, X2, X3, X4; double U, E0, E, lamda, V0, V; double RAn, RAd, RA, DEC; double B0sum = 0, B1sum = 0; double R0sum = 0, R1sum = 0, R2sum = 0, R3sum = 0, R4sum = 0; double L0sum = 0, L1sum = 0, L2sum = 0, L3sum = 0, L4sum = 0, L5sum = 0; double xsum = 0, psi = 0, epsilon = 0; double deltaPsi, deltaEps; double JC = (JD - 2451545) / 36525.0; double JM = JC / 10.0; double JM2 = Math.pow(JM, 2); double JM3 = Math.pow(JM, 3); double JM4 = Math.pow(JM, 4); double JM5 = Math.pow(JM, 5); for (i = 0; i < 64; i++) L0sum += L0[i][0] * Math.cos(L0[i][1] + L0[i][2] * JM); for (i = 0; i < 34; i++) L1sum += L1[i][0] * Math.cos(L1[i][1] + L1[i][2] * JM); for (i = 0; i < 20; i++) L2sum += L2[i][0] * Math.cos(L2[i][1] + L2[i][2] * JM); for (i = 0; i < 7; i++) L3sum += L3[i][0] * Math.cos(L3[i][1] + L3[i][2] * JM); for (i = 0; i < 3; i++) L4sum += L4[i][0] * Math.cos(L4[i][1] + L4[i][2] * JM); L5sum = L5[0][0] * Math.cos(L5[0][1] + L5[0][2] * JM); tL = (L0sum + (L1sum * JM) + (L2sum * JM2) + (L3sum * JM3) + (L4sum * JM4) + (L5sum * JM5)) / Math.pow(10, 8); L = limitAngle(Utils.RAD_TO_DEG(tL)); for (i = 0; i < 5; i++) B0sum += B0[i][0] * Math.cos(B0[i][1] + B0[i][2] * JM); for (i = 0; i < 2; i++) B1sum += B1[i][0] * Math.cos(B1[i][1] + B1[i][2] * JM); tB = (B0sum + (B1sum * JM)) / Math.pow(10, 8); B = Utils.RAD_TO_DEG(tB); for (i = 0; i < 40; i++) R0sum += R0[i][0] * Math.cos(R0[i][1] + R0[i][2] * JM); for (i = 0; i < 10; i++) R1sum += R1[i][0] * Math.cos(R1[i][1] + R1[i][2] * JM); for (i = 0; i < 6; i++) R2sum += R2[i][0] * Math.cos(R2[i][1] + R2[i][2] * JM); for (i = 0; i < 2; i++) R3sum += R3[i][0] * Math.cos(R3[i][1] + R3[i][2] * JM); R4sum = R4[0] * Math.cos(R4[1] + R4[2] * JM); R = (R0sum + (R1sum * JM) + (R2sum * JM2) + (R3sum * JM3) + (R4sum * JM4)) / Math.pow(10, 8); G = limitAngle((L + 180)); Gg = -B; X0 = 297.85036 + (445267.111480 * JC) - (0.0019142 * Math.pow(JC, 2)) + Math.pow(JC, 3) / 189474.0; X1 = 357.52772 + (35999.050340 * JC) - (0.0001603 * Math.pow(JC, 2)) - Math.pow(JC, 3) / 300000.0; X2 = 134.96298 + (477198.867398 * JC) + (0.0086972 * Math.pow(JC, 2)) + Math.pow(JC, 3) / 56250.0; X3 = 93.27191 + (483202.017538 * JC) - (0.0036825 * Math.pow(JC, 2)) + Math.pow(JC, 3) / 327270.0; X4 = 125.04452 - (1934.136261 * JC) + (0.0020708 * Math.pow(JC, 2)) + Math.pow(JC, 3) / 450000.0; for (i = 0; i < 63; i++) { xsum += X0 * SINCOEFF[i][0]; xsum += X1 * SINCOEFF[i][1]; xsum += X2 * SINCOEFF[i][2]; xsum += X3 * SINCOEFF[i][3]; xsum += X4 * SINCOEFF[i][4]; psi += (PE[i][0] + JC * PE[i][1]) * Math.sin(Utils.DEG_TO_RAD(xsum)); epsilon += (PE[i][2] + JC * PE[i][3]) * Math.cos(Utils.DEG_TO_RAD(xsum)); xsum = 0; } deltaPsi = psi / 36000000.0; deltaEps = epsilon / 36000000.0; U = JM / 10.0; E0 = 84381.448 - 4680.93 * U - 1.55 * Math.pow(U, 2) + 1999.25 * Math.pow(U, 3) - 51.38 * Math.pow(U, 4) - 249.67 * Math.pow(U, 5) - 39.05 * Math.pow(U, 6) + 7.12 * Math.pow(U, 7) + 27.87 * Math.pow(U, 8) + 5.79 * Math.pow(U, 9) + 2.45 * Math.pow(U, 10); E = E0 / 3600.0 + deltaEps; lamda = G + deltaPsi + (-20.4898 / (3600.0 * R)); V0 = 280.46061837 + 360.98564736629 * (JD - 2451545) + 0.000387933 * Math.pow(JC, 2) - Math.pow(JC, 3) / 38710000.0; V = limitAngle(V0) + deltaPsi * Math.cos(Utils.DEG_TO_RAD(E)); RAn = Math.sin(Utils.DEG_TO_RAD(lamda)) * Math.cos(Utils.DEG_TO_RAD(E)) - Math.tan(Utils.DEG_TO_RAD(Gg)) * Math.sin(Utils.DEG_TO_RAD(E)); RAd = Math.cos(Utils.DEG_TO_RAD(lamda)); RA = limitAngle(Utils.RAD_TO_DEG(Math.atan2(RAn, RAd))); DEC = Math.asin( Math.sin(Utils.DEG_TO_RAD(Gg)) * Math.cos(Utils.DEG_TO_RAD(E)) + Math.cos(Utils.DEG_TO_RAD(Gg)) * Math.sin(Utils.DEG_TO_RAD(E)) * Math.sin(Utils.DEG_TO_RAD(lamda))); astroday.setRa(RA); astroday.setDec(DEC); astroday.setSidtime(V); astroday.setDra(0); astroday.setRsum(R); }