Example #1
0
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);
}
Example #2
0
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);
}