/// <inheritdoc /> public SolarEclipse GetNearestSolarEclipse(int ln, bool next, bool saros) { do { ln += (next ? 1 : -1) * (saros ? 223 : 1); var eclipse = SolarEclipses.NearestEclipse(ln, next); if (eclipse.IsUncertain) { var pbe = GetBesselianElements(eclipse.JulianDayMaximum); var be = pbe.GetInstantBesselianElements(eclipse.JulianDayMaximum); bool isExist = Math.Sqrt(be.X * be.X + be.Y * be.Y) - be.L1 <= 0.999; if (isExist) { eclipse.IsUncertain = false; return(eclipse); } else { continue; } } else { return(eclipse); } }while (true); }
public void FindNearestSolarEclipse() { double jd = new Date(1993, 5, 21).ToJulianDay(); SolarEclipse eclipse = SolarEclipses.NearestEclipse(jd, true); Assert.AreEqual(2449129.0979, eclipse.JulianDayMaximum, TimeSpan.FromMinutes(0.36).TotalDays); Assert.AreEqual(SolarEclipseType.Partial, eclipse.EclipseType); Assert.AreEqual(0.740, eclipse.Magnitude, 1e-3); }