Practical Astronomy Algorithms in .NET/C#
Loading...
Searching...
No Matches
PAEclipses.cs
Go to the documentation of this file.
1using System;
2using PALib.Helpers;
3
4namespace PALib;
5
9public class PAEclipses
10{
20 public (string status, double eventDateDay, int eventDateMonth, int eventDateYear) LunarEclipseOccurrence(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
21 {
22 int daylightSaving = isDaylightSaving ? 1 : 0;
23
24 double julianDateOfFullMoon = PAMacros.FullMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
25
26 double gDateOfFullMoonDay = PAMacros.JulianDateDay(julianDateOfFullMoon);
27 double integerDay = gDateOfFullMoonDay.Floor();
28 int gDateOfFullMoonMonth = PAMacros.JulianDateMonth(julianDateOfFullMoon);
29 int gDateOfFullMoonYear = PAMacros.JulianDateYear(julianDateOfFullMoon);
30 double utOfFullMoonHours = gDateOfFullMoonDay - integerDay;
31
32 double localCivilDateDay = PAMacros.UniversalTime_LocalCivilDay(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
33 int localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
34 int localCivilDateYear = PAMacros.UniversalTime_LocalCivilYear(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
35
36 string eclipseOccurrence = PAMacros.LunarEclipseOccurrence(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
37
38 string status = eclipseOccurrence;
39 double eventDateDay = localCivilDateDay;
40 int eventDateMonth = localCivilDateMonth;
41 int eventDateYear = localCivilDateYear;
42
43 return (status, eventDateDay, eventDateMonth, eventDateYear);
44 }
45
69 public (double lunarEclipseCertainDateDay, double lunarEclipseCertainDateMonth, double lunarEclipseCertainDateYear, double utStartPenPhaseHour, double utStartPenPhaseMinutes, double utStartUmbralPhaseHour, double utStartUmbralPhaseMinutes, double utStartTotalPhaseHour, double utStartTotalPhaseMinutes, double utMidEclipseHour, double utMidEclipseMinutes, double utEndTotalPhaseHour, double utEndTotalPhaseMinutes, double utEndUmbralPhaseHour, double utEndUmbralPhaseMinutes, double utEndPenPhaseHour, double utEndPenPhaseMinutes, double eclipseMagnitude) LunarEclipseCircumstances(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
70 {
71 int daylightSaving = isDaylightSaving ? 1 : 0;
72
73 double julianDateOfFullMoon = PAMacros.FullMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
74 double gDateOfFullMoonDay = PAMacros.JulianDateDay(julianDateOfFullMoon);
75 double integerDay = gDateOfFullMoonDay.Floor();
76 int gDateOfFullMoonMonth = PAMacros.JulianDateMonth(julianDateOfFullMoon);
77 int gDateOfFullMoonYear = PAMacros.JulianDateYear(julianDateOfFullMoon);
78 double utOfFullMoonHours = gDateOfFullMoonDay - integerDay;
79
80 double localCivilDateDay = PAMacros.UniversalTime_LocalCivilDay(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
81 int localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
82 int localCivilDateYear = PAMacros.UniversalTime_LocalCivilYear(utOfFullMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfFullMoonMonth, gDateOfFullMoonYear);
83
84 double utMaxEclipse = PAMacros.UTMaxLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
85 double utFirstContact = PAMacros.UTFirstContactLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
86 double utLastContact = PAMacros.UTLastContactLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
87 double utStartUmbralPhase = PAMacros.UTStartUmbraLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
88 double utEndUmbralPhase = PAMacros.UTEndUmbraLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
89 double utStartTotalPhase = PAMacros.UTStartTotalLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
90 double utEndTotalPhase = PAMacros.UTEndTotalLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
91
92 double eclipseMagnitude1 = PAMacros.MagLunarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours);
93
94 double lunarEclipseCertainDateDay = localCivilDateDay;
95 int lunarEclipseCertainDateMonth = localCivilDateMonth;
96 int lunarEclipseCertainDateYear = localCivilDateYear;
97
98 double utStartPenPhaseHour = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utFirstContact + 0.008333);
99 double utStartPenPhaseMinutes = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utFirstContact + 0.008333);
100
101 double utStartUmbralPhaseHour = (utStartUmbralPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utStartUmbralPhase + 0.008333);
102 double utStartUmbralPhaseMinutes = (utStartUmbralPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utStartUmbralPhase + 0.008333);
103
104 double utStartTotalPhaseHour = (utStartTotalPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utStartTotalPhase + 0.008333);
105 double utStartTotalPhaseMinutes = (utStartTotalPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utStartTotalPhase + 0.008333);
106
107 double utMidEclipseHour = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utMaxEclipse + 0.008333);
108 double utMidEclipseMinutes = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utMaxEclipse + 0.008333);
109
110 double utEndTotalPhaseHour = (utEndTotalPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utEndTotalPhase + 0.008333);
111 double utEndTotalPhaseMinutes = (utEndTotalPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utEndTotalPhase + 0.008333);
112
113 double utEndUmbralPhaseHour = (utEndUmbralPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utEndUmbralPhase + 0.008333);
114 double utEndUmbralPhaseMinutes = (utEndUmbralPhase == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utEndUmbralPhase + 0.008333);
115
116 double utEndPenPhaseHour = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utLastContact + 0.008333);
117 double utEndPenPhaseMinutes = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utLastContact + 0.008333);
118
119 double eclipseMagnitude = (eclipseMagnitude1 == -99.0) ? -99.0 : Math.Round(eclipseMagnitude1, 2);
120
122 }
123
133 public (string status, double eventDateDay, int eventDateMonth, int eventDateYear) SolarEclipseOccurrence(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
134 {
135 int daylightSaving = isDaylightSaving ? 1 : 0;
136
137 double julianDateOfNewMoon = PAMacros.NewMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
138 double gDateOfNewMoonDay = PAMacros.JulianDateDay(julianDateOfNewMoon);
139 double integerDay = gDateOfNewMoonDay.Floor();
140 int gDateOfNewMoonMonth = PAMacros.JulianDateMonth(julianDateOfNewMoon);
141 int gDateOfNewMoonYear = PAMacros.JulianDateYear(julianDateOfNewMoon);
142 double utOfNewMoonHours = gDateOfNewMoonDay - integerDay;
143
144 double localCivilDateDay = PAMacros.UniversalTime_LocalCivilDay(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
145 int localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
146 int localCivilDateYear = PAMacros.UniversalTime_LocalCivilYear(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
147
148 string eclipseOccurrence = PAMacros.SolarEclipseOccurrence(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
149
150 string status = eclipseOccurrence;
151 double eventDateDay = localCivilDateDay;
152 int eventDateMonth = localCivilDateMonth;
153 int eventDateYear = localCivilDateYear;
154
155 return (status, eventDateDay, eventDateMonth, eventDateYear);
156 }
157
173 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)
174 {
175 int daylightSaving = isDaylightSaving ? 1 : 0;
176
177 double julianDateOfNewMoon = PAMacros.NewMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
178 double gDateOfNewMoonDay = PAMacros.JulianDateDay(julianDateOfNewMoon);
179 double integerDay = gDateOfNewMoonDay.Floor();
180 int gDateOfNewMoonMonth = PAMacros.JulianDateMonth(julianDateOfNewMoon);
181 int gDateOfNewMoonYear = PAMacros.JulianDateYear(julianDateOfNewMoon);
182 double utOfNewMoonHours = gDateOfNewMoonDay - integerDay;
183 double localCivilDateDay = PAMacros.UniversalTime_LocalCivilDay(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
184 int localCivilDateMonth = PAMacros.UniversalTime_LocalCivilMonth(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
185 int localCivilDateYear = PAMacros.UniversalTime_LocalCivilYear(utOfNewMoonHours, 0.0, 0.0, daylightSaving, zoneCorrectionHours, integerDay, gDateOfNewMoonMonth, gDateOfNewMoonYear);
186
187 double utMaxEclipse = PAMacros.UTMaxSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
188 double utFirstContact = PAMacros.UTFirstContactSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
189 double utLastContact = PAMacros.UTLastContactSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
190 double magnitude = PAMacros.MagSolarEclipse(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongitudeDeg, geogLatitudeDeg);
191
192 double solarEclipseCertainDateDay = localCivilDateDay;
193 int solarEclipseCertainDateMonth = localCivilDateMonth;
194 int solarEclipseCertainDateYear = localCivilDateYear;
195
196 double utFirstContactHour = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utFirstContact + 0.008333);
197 double utFirstContactMinutes = (utFirstContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utFirstContact + 0.008333);
198
199 double utMidEclipseHour = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utMaxEclipse + 0.008333);
200 double utMidEclipseMinutes = (utMaxEclipse == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utMaxEclipse + 0.008333);
201
202 double utLastContactHour = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursHour(utLastContact + 0.008333);
203 double utLastContactMinutes = (utLastContact == -99.0) ? -99.0 : PAMacros.DecimalHoursMinute(utLastContact + 0.008333);
204
205 double eclipseMagnitude = (magnitude == -99.0) ? -99.0 : Math.Round(magnitude, 3);
206
208 }
209}
Eclipse calculations.
Definition PAEclipses.cs:10
double int int double double double double double utLastContactHour
double double double double double double double double double double double double double utEndTotalPhaseMinutes
Definition PAEclipses.cs:69
double lunarEclipseCertainDateDay
Calculate the circumstances of a lunar eclipse.
Definition PAEclipses.cs:69
double int int double utFirstContactHour
double double double double double double double utStartUmbralPhaseMinutes
Definition PAEclipses.cs:69
double double double double double double double double double double double double double double utEndUmbralPhaseHour
Definition PAEclipses.cs:69
double solarEclipseCertainDateDay
Calculate the circumstances of a solar eclipse.
double double double double double double double double double utStartTotalPhaseMinutes
Definition PAEclipses.cs:69
double double double double double double utStartUmbralPhaseHour
Definition PAEclipses.cs:69
string double int int eventDateYear SolarEclipseOccurrence(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
double double double double double double double double double double double double double double double double utEndPenPhaseHour
Definition PAEclipses.cs:69
double int int solarEclipseCertainDateYear
double double double double double utStartPenPhaseMinutes
Definition PAEclipses.cs:69
double int solarEclipseCertainDateMonth
double int int double double utFirstContactMinutes
string double eventDateDay
Definition PAEclipses.cs:20
string double int eventDateMonth
Definition PAEclipses.cs:20
double double double double double double double double utStartTotalPhaseHour
Definition PAEclipses.cs:69
double double double double double double double double double double double double double double double double double utEndPenPhaseMinutes
Definition PAEclipses.cs:69
double double lunarEclipseCertainDateMonth
Definition PAEclipses.cs:69
string status
Determine if a lunar eclipse is likely to occur.
Definition PAEclipses.cs:20
string double int int eventDateYear LunarEclipseOccurrence(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
Definition PAEclipses.cs:20
double double double double double double double double double double double double double double double utEndUmbralPhaseMinutes
Definition PAEclipses.cs:69
double double double double double double double double double double double double double double double double double double eclipseMagnitude LunarEclipseCircumstances(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours)
Definition PAEclipses.cs:69
double double double double double double double double double double utMidEclipseHour
Definition PAEclipses.cs:69
double int int double double double double double double utLastContactMinutes
double double double double utStartPenPhaseHour
Definition PAEclipses.cs:69
double double double double double double double double double double double utMidEclipseMinutes
Definition PAEclipses.cs:69
double double double lunarEclipseCertainDateYear
Definition PAEclipses.cs:69
double double double double double double double double double double double double utEndTotalPhaseHour
Definition PAEclipses.cs:69
double int int double double double double double double double eclipseMagnitude SolarEclipseCircumstances(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours, double geogLongitudeDeg, double geogLatitudeDeg)
Miscellaneous macro functions supporting the other classes.
Definition PAMacros.cs:13
static string LunarEclipseOccurrence(int ds, int zc, double dy, int mn, int yr)
Determine if a lunar eclipse is likely to occur.
Definition PAMacros.cs:4415
static double UTStartTotalLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate start time of total phase of lunar eclipse (UT)
Definition PAMacros.cs:4908
static string SolarEclipseOccurrence(int ds, int zc, double dy, int mn, int yr)
Determine if a solar eclipse is likely to occur.
Definition PAMacros.cs:5204
static double NewMoon(int ds, int zc, double dy, int mn, int yr)
Calculate Julian date of New Moon.
Definition PAMacros.cs:3534
static double UTFirstContactSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate time of first contact for solar eclipse (UT)
Definition PAMacros.cs:5399
static int UniversalTime_LocalCivilYear(double uHours, double uMinutes, double uSeconds, int daylightSaving, int zoneCorrection, double greenwichDay, int greenwichMonth, int greenwichYear)
Get Local Civil Year for Universal Time.
Definition PAMacros.cs:307
static double UniversalTime_LocalCivilDay(double uHours, double uMinutes, double uSeconds, int daylightSaving, int zoneCorrection, double greenwichDay, int greenwichMonth, int greenwichYear)
Get Local Civil Day for Universal Time.
Definition PAMacros.cs:273
static double UTEndTotalLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate end time of total phase of lunar eclipse (UT)
Definition PAMacros.cs:5010
static double UTLastContactSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate time of last contact for solar eclipse (UT)
Definition PAMacros.cs:5517
static double UTMaxSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate time of maximum shadow for solar eclipse (UT)
Definition PAMacros.cs:5284
static double JulianDateDay(double julianDate)
Returns the day part of a Julian Date.
Definition PAMacros.cs:134
static double UTFirstContactLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of first shadow contact for lunar eclipse (UT)
Definition PAMacros.cs:4570
static int UniversalTime_LocalCivilMonth(double uHours, double uMinutes, double uSeconds, int daylightSaving, int zoneCorrection, double greenwichDay, int greenwichMonth, int greenwichYear)
Get Local Civil Month for Universal Time.
Definition PAMacros.cs:291
static double UTLastContactLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of last shadow contact for lunar eclipse (UT)
Definition PAMacros.cs:4650
static int DecimalHoursMinute(double decimalHours)
Return the minutes part of a Decimal Hours.
Definition PAMacros.cs:55
static double FullMoon(int ds, int zc, double dy, int mn, int yr)
Calculate Julian date of Full Moon.
Definition PAMacros.cs:3567
static double UTEndUmbraLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate end time of umbra phase of lunar eclipse (UT)
Definition PAMacros.cs:4819
static int JulianDateMonth(double julianDate)
Returns the month part of a Julian Date.
Definition PAMacros.cs:154
static int DecimalHoursHour(double decimalHours)
Return the hour part of a Decimal Hours.
Definition PAMacros.cs:39
static int JulianDateYear(double julianDate)
Returns the year part of a Julian Date.
Definition PAMacros.cs:175
static double UTMaxLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of maximum shadow for lunar eclipse (UT)
Definition PAMacros.cs:4496
static double MagLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate magnitude of lunar eclipse.
Definition PAMacros.cs:5109
static double UTStartUmbraLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate start time of umbra phase of lunar eclipse (UT)
Definition PAMacros.cs:4727
static double MagSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate magnitude of solar eclipse.
Definition PAMacros.cs:5632