static public Tuple <double, double, double> GetMoonIllumination(DateTime date) { double d = ToDays(date); var s = SunCalculator.SunCoords(d); var m = MoonCoords(d); int sdist = 149598000; double phi = Math.Acos(Math.Sin(s.dec) * Math.Sin(m.dec) + Math.Cos(s.dec) * Math.Cos(m.dec) * Math.Cos(s.asc - m.asc)), inc = Math.Atan2(sdist * Math.Sin(phi), m.dist - sdist * Math.Cos(phi)), angle = Math.Atan2(Math.Cos(s.dec) * Math.Sin(s.asc - m.asc), Math.Sin(s.dec) * Math.Cos(m.dec) - Math.Cos(s.dec) * Math.Sin(m.dec) * Math.Cos(s.asc - m.asc)); return(new Tuple <double, double, double>(Fraction(inc), Phase(inc, angle), angle)); }
public LightTimes(DateTime dt, Config config) { // Assuming SunCalculator is returning high noon for sunrise // and sunset in the winter SunCalculator sc = new SunCalculator(config.SiteCoords.Longitude, config.SiteCoords.Latitude, config.UTCOffset * 15, config.IsDstInEffect(dt)); Sunrise = sc.CalculateSunRise(dt); LightsOffAM = Sunrise + config.SunriseOffset; Sunset = sc.CalculateSunSet(dt); LightsOnPM = Sunset + config.SunsetOffset; LightsOnAM = dt.Date + config.AMLightsOn; LightsOffPM = dt.Date + config.PMLightsOff; }