Exemple #1
0
    /// <summary>
    /// Calculate the circumstances of a solar eclipse.
    /// </summary>
    /// <returns>
    /// <para>solarEclipseCertainDateDay -- Solar eclipse date (day)</para>
    /// <para>solarEclipseCertainDateMonth -- Solar eclipse date (month)</para>
    /// <para>solarEclipseCertainDateYear -- Solar eclipse date (year)</para>
    /// <para>utFirstContactHour -- First contact of shadow (hour)</para>
    /// <para>utFirstContactMinutes -- First contact of shadow (minutes)</para>
    /// <para>utMidEclipseHour -- Mid-eclipse (hour)</para>
    /// <para>utMidEclipseMinutes -- Mid-eclipse (minutes)</para>
    /// <para>utLastContactHour -- Last contact of shadow (hour)</para>
    /// <para>utLastContactMinutes -- Last contact of shadow (minutes)</para>
    /// <para>eclipseMagnitude -- Eclipse magnitude</para>
    /// </returns>
    public (double solarEclipseCertainDateDay, int solarEclipseCertainDateMonth, int solarEclipseCertainDateYear, double utFirstContactHour, double utFirstContactMinutes, double utMidEclipseHour, double utMidEclipseMinutes, double utLastContactHour, double utLastContactMinutes, double eclipseMagnitude) SolarEclipseCircumstances(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours, double geogLongitudeDeg, double geogLatitudeDeg)
    {
        var daylightSaving = (isDaylightSaving) ? 1 : 0;

        var julianDateOfNewMoon = PAMacros.NewMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
        var gDateOfNewMoonDay   = PAMacros.JulianDateDay(julianDateOfNewMoon);
        var integerDay          = (gDateOfNewMoonDay).Floor();
        var gDateOfNewMoonMonth = PAMacros.JulianDateMonth(julianDateOfNewMoon);
        var gDateOfNewMoonYear  = PAMacros.JulianDateYear(julianDateOfNewMoon);
        var utOfNewMoonHours    = gDateOfNewMoonDay - integerDay;
        var localCivilDateDay   = PAMacros.UniversalTime_LocalCivilDay(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
        var localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
        var localCivilDateYear  = PAMacros.UniversalTime_LocalCivilYear(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);

        var utMaxEclipse   = PAMacros.UTMaxSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
        var utFirstContact = PAMacros.UTFirstContactSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
        var utLastContact  = PAMacros.UTLastContactSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
        var magnitude      = PAMacros.MagSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);

        var solarEclipseCertainDateDay   = localCivilDateDay;
        var solarEclipseCertainDateMonth = localCivilDateMonth;
        var solarEclipseCertainDateYear  = localCivilDateYear;

        var utFirstContactHour    = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utFirstContact + 0.008333);
        var utFirstContactMinutes = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utFirstContact + 0.008333);

        var utMidEclipseHour    = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utMaxEclipse + 0.008333);
        var utMidEclipseMinutes = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utMaxEclipse + 0.008333);

        var utLastContactHour    = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utLastContact + 0.008333);
        var utLastContactMinutes = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utLastContact + 0.008333);

        var eclipseMagnitude = (magnitude == -99.0) ? -99.0 : Math.Round(magnitude, 3);

        return(solarEclipseCertainDateDay, solarEclipseCertainDateMonth, solarEclipseCertainDateYear, utFirstContactHour, utFirstContactMinutes, utMidEclipseHour, utMidEclipseMinutes, utLastContactHour, utLastContactMinutes, eclipseMagnitude);
    }