void Moon::calculeValues(CAADate aaDate) { // Start with the Julian Date double jd = aaDate.Julian(); // Position of the moon in equatorial double moonEclipticLong = CAAMoon::EclipticLongitude(jd); double moonEclipticLat = CAAMoon::EclipticLatitude(jd); double obliquity = CAANutation::MeanObliquityOfEcliptic(jd); CAA2DCoordinate moonEquatorial = CAACoordinateTransformation::Ecliptic2Equatorial(moonEclipticLong,moonEclipticLat,obliquity); double siderealTime = CAASidereal::MeanGreenwichSiderealTime(jd); this->moonLon = CAACoordinateTransformation::DegreesToRadians(15*(moonEquatorial.X-siderealTime)); this->moonLat = CAACoordinateTransformation::DegreesToRadians(moonEquatorial.Y); // Need the sun too for the next bit double sunEclipticLong = CAASun::ApparentEclipticLongitude(jd); double sunEclipticLat = CAASun::ApparentEclipticLatitude(jd); CAA2DCoordinate sunEquatorial = CAACoordinateTransformation::Ecliptic2Equatorial(sunEclipticLong,sunEclipticLat,obliquity); // Now for the phase double geo_elongation = CAAMoonIlluminatedFraction::GeocentricElongation(moonEquatorial.X, moonEquatorial.Y, sunEquatorial.X, sunEquatorial.Y); double phaseAngle = CAAMoonIlluminatedFraction::PhaseAngle(geo_elongation, 368410.0, 149971520.0); double positionAngle = CAAMoonIlluminatedFraction::PositionAngle(moonEquatorial.X, moonEquatorial.Y, sunEquatorial.X, sunEquatorial.Y); this->illuminatedFraction = CAAMoonIlluminatedFraction::IlluminatedFraction(phaseAngle); this->phase = (positionAngle < 180 ? phaseAngle + 180 : 180 - phaseAngle); }
double CAASidereal::MeanGreenwichSiderealTime(double JD) { //Get the Julian day for the same day at midnight long Year = 0; long Month = 0; long Day = 0; long Hour = 0; long Minute = 0; double Second = 0; CAADate date; date.Set(JD, CAADate::AfterPapalReform(JD)); date.Get(Year, Month, Day, Hour, Minute, Second); date.Set(Year, Month, Day, 0, 0, 0, date.InGregorianCalendar()); double JDMidnight = date.Julian(); //Calculate the sidereal time at midnight double T = (JDMidnight - 2451545) / 36525; double TSquared = T*T; double TCubed = TSquared*T; double Value = 100.46061837 + (36000.770053608*T) + (0.000387933*TSquared) - (TCubed/38710000); //Adjust by the time of day Value += ( ((Hour * 15) + (Minute * 0.25) + (Second * 0.0041666666666666666666666666666667)) * 1.00273790935); Value = CAACoordinateTransformation::DegreesToHours(Value); return CAACoordinateTransformation::MapTo0To24Range(Value); }