public static CAALunarEclipseDetails CalculateLunar(double k) { #if _DEBUG double intp = 0; bool bSolarEclipse = (GlobalMembersStdafx.modf(k, ref intp) == 0); Debug.Assert(!bSolarEclipse); #endif double Mdash = 0; CAASolarEclipseDetails solarDetails = Calculate(k, ref Mdash); //What will be the return value CAALunarEclipseDetails details = new CAALunarEclipseDetails(); details.bEclipse = solarDetails.bEclipse; details.F = solarDetails.F; details.gamma = solarDetails.gamma; details.TimeOfMaximumEclipse = solarDetails.TimeOfMaximumEclipse; details.u = solarDetails.u; if (details.bEclipse) { details.PenumbralRadii = 1.2848 + details.u; details.UmbralRadii = 0.7403 - details.u; double fgamma = Math.Abs(details.gamma); details.PenumbralMagnitude = (1.5573 + details.u - fgamma) / 0.5450; details.UmbralMagnitude = (1.0128 - details.u - fgamma) / 0.5450; double p = 1.0128 - details.u; double t = 0.4678 - details.u; double n = 0.5458 + 0.0400 * Math.Cos(Mdash); double gamma2 = details.gamma * details.gamma; double p2 = p * p; if (p2 >= gamma2) { details.PartialPhaseSemiDuration = 60 / n * Math.Sqrt(p2 - gamma2); } double t2 = t * t; if (t2 >= gamma2) { details.TotalPhaseSemiDuration = 60 / n * Math.Sqrt(t2 - gamma2); } double h = 1.5573 + details.u; double h2 = h * h; if (h2 >= gamma2) { details.PartialPhasePenumbraSemiDuration = 60 / n * Math.Sqrt(h2 - gamma2); } } return(details); }
public static CAALunarEclipseDetails CalculateLunar(double k) { #if _DEBUG double intp = 0; bool bSolarEclipse = (GlobalMembersStdafx.modf(k, ref intp) == 0); Debug.Assert(!bSolarEclipse); #endif double Mdash = 0; CAASolarEclipseDetails solarDetails = Calculate(k, ref Mdash); //What will be the return value CAALunarEclipseDetails details = new CAALunarEclipseDetails(); details.bEclipse = solarDetails.bEclipse; details.F = solarDetails.F; details.gamma = solarDetails.gamma; details.TimeOfMaximumEclipse = solarDetails.TimeOfMaximumEclipse; details.u = solarDetails.u; if (details.bEclipse) { details.PenumbralRadii = 1.2848 + details.u; details.UmbralRadii = 0.7403 - details.u; double fgamma = Math.Abs(details.gamma); details.PenumbralMagnitude = (1.5573 + details.u - fgamma) / 0.5450; details.UmbralMagnitude = (1.0128 - details.u - fgamma) / 0.5450; double p = 1.0128 - details.u; double t = 0.4678 - details.u; double n = 0.5458 + 0.0400 *Math.Cos(Mdash); double gamma2 = details.gamma *details.gamma; double p2 = p *p; if (p2 >= gamma2) details.PartialPhaseSemiDuration = 60/n *Math.Sqrt(p2 - gamma2); double t2 = t *t; if (t2 >= gamma2) details.TotalPhaseSemiDuration = 60/n *Math.Sqrt(t2 - gamma2); double h = 1.5573 + details.u; double h2 = h *h; if (h2 >= gamma2) details.PartialPhasePenumbraSemiDuration = 60/n *Math.Sqrt(h2 - gamma2); } return details; }