22 public (
double moonRAHour,
double moonRAMin,
double moonRASec,
double moonDecDeg,
double moonDecMin,
double moonDecSec)
ApproximatePositionOfMoon(
double lctHour,
double lctMin,
double lctSec,
bool isDaylightSaving,
int zoneCorrectionHours,
double localDateDay,
int localDateMonth,
int localDateYear)
24 int daylightSaving = isDaylightSaving ? 1 : 0;
26 double l0 = 91.9293359879052;
27 double p0 = 130.143076320618;
28 double n0 = 291.682546643194;
37 double sunLongDeg =
PAMacros.
SunLong(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
38 double sunMeanAnomalyRad =
PAMacros.
SunMeanAnomaly(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
42 double evDeg = 1.2739 * (2.0 * (lmDeg - sunLongDeg) - mmDeg).ToRadians().Sine();
43 double aeDeg = 0.1858 * sunMeanAnomalyRad.Sine();
44 double a3Deg = 0.37 * sunMeanAnomalyRad.Sine();
45 double mmdDeg = mmDeg + evDeg - aeDeg - a3Deg;
46 double ecDeg = 6.2886 * mmdDeg.ToRadians().Sine();
47 double a4Deg = 0.214 * (2.0 * mmdDeg.ToRadians()).Sine();
48 double ldDeg = lmDeg + evDeg + ecDeg - aeDeg + a4Deg;
49 double vDeg = 0.6583 * (2.0 * (ldDeg - sunLongDeg).ToRadians()).Sine();
50 double lddDeg = ldDeg + vDeg;
51 double ndDeg = nDeg - 0.16 * sunMeanAnomalyRad.Sine();
52 double y = (lddDeg - ndDeg).ToRadians().Sine() * i.ToRadians().Cosine();
53 double x = (lddDeg - ndDeg).ToRadians().Cosine();
56 double moonLatDeg =
PAMacros.
Degrees(((lddDeg - ndDeg).ToRadians().Sine() * i.ToRadians().Sine()).ASine());
58 double moonDecDeg1 =
PAMacros.
EcDec(moonLongDeg, 0, 0, moonLatDeg, 0, 0, gdateDay, gdateMonth, gdateYear);
83 public (
double moonRAHour,
double moonRAMin,
double moonRASec,
double moonDecDeg,
double moonDecMin,
double moonDecSec,
double earthMoonDistKM,
double moonHorParallaxDeg)
PrecisePositionOfMoon(
double lctHour,
double lctMin,
double lctSec,
bool isDaylightSaving,
int zoneCorrectionHours,
double localDateDay,
int localDateMonth,
int localDateYear)
85 int daylightSaving = isDaylightSaving ? 1 : 0;
91 (
double moonLongDeg,
double moonLatDeg,
double moonHorPara) moonResult =
PAMacros.
MoonLongLatHP(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
93 double nutationInLongitudeDeg =
PAMacros.
NutatLong(gdateDay, gdateMonth, gdateYear);
94 double correctedLongDeg = moonResult.moonLongDeg + nutationInLongitudeDeg;
95 double earthMoonDistanceKM = 6378.14 / moonResult.moonHorPara.ToRadians().Sine();
97 double moonDecDeg1 =
PAMacros.
EcDec(correctedLongDeg, 0, 0, moonResult.moonLatDeg, 0, 0, gdateDay, gdateMonth, gdateYear);
106 double moonHorParallaxDeg = Math.Round(moonResult.moonHorPara, 6);
118 public (
double moonPhase,
double paBrightLimbDeg)
MoonPhase(
double lctHour,
double lctMin,
double lctSec,
bool isDaylightSaving,
int zoneCorrectionHours,
double localDateDay,
int localDateMonth,
int localDateYear,
PAAccuracyLevel accuracyLevel)
120 int daylightSaving = isDaylightSaving ? 1 : 0;
126 double sunLongDeg =
PAMacros.
SunLong(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
127 (
double moonLongDeg,
double moonLatDeg,
double moonHorPara) moonResult =
PAMacros.
MoonLongLatHP(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
128 double dRad = (moonResult.moonLongDeg - sunLongDeg).ToRadians();
130 double moonPhase1 = (accuracyLevel ==
PAAccuracyLevel.Precise) ?
PAMacros.
MoonPhase(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear) : (1.0 - dRad.Cosine()) / 2.0;
132 double sunRARad =
PAMacros.
EcRA(sunLongDeg, 0, 0, 0, 0, 0, gdateDay, gdateMonth, gdateYear).ToRadians();
133 double moonRARad =
PAMacros.
EcRA(moonResult.moonLongDeg, 0, 0, moonResult.moonLatDeg, 0, 0, gdateDay, gdateMonth, gdateYear).ToRadians();
134 double sunDecRad =
PAMacros.
EcDec(sunLongDeg, 0, 0, 0, 0, 0, gdateDay, gdateMonth, gdateYear).ToRadians();
135 double moonDecRad =
PAMacros.
EcDec(moonResult.moonLongDeg, 0, 0, moonResult.moonLatDeg, 0, 0, gdateDay, gdateMonth, gdateYear).ToRadians();
137 double y = sunDecRad.Cosine() * (sunRARad - moonRARad).Sine();
138 double x = moonDecRad.Cosine() * sunDecRad.Sine() - moonDecRad.Sine() * sunDecRad.Cosine() * (sunRARad - moonRARad).Cosine();
142 double moonPhase = Math.Round(moonPhase1, 2);
143 double paBrightLimbDeg = Math.Round(chiDeg, 2);
163 public (
double nmLocalTimeHour,
double nmLocalTimeMin,
double nmLocalDateDay,
int nmLocalDateMonth,
int nmLocalDateYear,
double fmLocalTimeHour,
double fmLocalTimeMin,
double fmLocalDateDay,
int fmLocalDateMonth,
int fmLocalDateYear)
TimesOfNewMoonAndFullMoon(
bool isDaylightSaving,
int zoneCorrectionHours,
double localDateDay,
int localDateMonth,
int localDateYear)
165 int daylightSaving = isDaylightSaving ? 1 : 0;
167 double jdOfNewMoonDays =
PAMacros.
NewMoon(daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
168 double jdOfFullMoonDays =
PAMacros.
FullMoon(3, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
171 double integerDay1 = gDateOfNewMoonDay.Floor();
176 double integerDay2 = gDateOfFullMoonDay.Floor();
180 double utOfNewMoonHours = 24.0 * (gDateOfNewMoonDay - integerDay1);
181 double utOfFullMoonHours = 24.0 * (gDateOfFullMoonDay - integerDay2);
182 double lctOfNewMoonHours =
PAMacros.
UniversalTimeToLocalCivilTime(utOfNewMoonHours + 0.008333, 0, 0, daylightSaving, zoneCorrectionHours, integerDay1, gDateOfNewMoonMonth, gDateOfNewMoonYear);
183 double lctOfFullMoonHours =
PAMacros.
UniversalTimeToLocalCivilTime(utOfFullMoonHours + 0.008333, 0, 0, daylightSaving, zoneCorrectionHours, integerDay2, gDateOfFullMoonMonth, gDateOfFullMoonYear);
194 int fmLocalDateYear =
PAMacros.
UniversalTime_LocalCivilYear(utOfFullMoonHours, 0, 0, daylightSaving, zoneCorrectionHours, integerDay2, gDateOfFullMoonMonth, gDateOfFullMoonYear);
210 public (
double earthMoonDist,
double angDiameterDeg,
double angDiameterMin,
double horParallaxDeg,
double horParallaxMin,
double horParallaxSec)
MoonDistAngDiamHorParallax(
double lctHour,
double lctMin,
double lctSec,
bool isDaylightSaving,
int zoneCorrectionHours,
double localDateDay,
int localDateMonth,
int localDateYear)
212 int daylightSaving = isDaylightSaving ? 1 : 0;
214 double moonDistance =
PAMacros.
MoonDist(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
215 double moonAngularDiameter =
PAMacros.
MoonSize(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
216 double moonHorizontalParallax =
PAMacros.
MoonHP(lctHour, lctMin, lctSec, daylightSaving, zoneCorrectionHours, localDateDay, localDateMonth, localDateYear);
245 public (
double mrLTHour,
double mrLTMin,
double mrLocalDateDay,
int mrLocalDateMonth,
int mrLocalDateYear,
double mrAzimuthDeg,
double msLTHour,
double msLTMin,
double msLocalDateDay,
int msLocalDateMonth,
int msLocalDateYear,
double msAzimuthDeg)
MoonriseAndMoonset(
double localDateDay,
int localDateMonth,
int localDateYear,
bool isDaylightSaving,
int zoneCorrectionHours,
double geogLongDeg,
double geogLatDeg)
247 int daylightSaving = isDaylightSaving ? 1 : 0;
249 double localTimeOfMoonriseHours =
PAMacros.
MoonRiseLCT(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
250 (
double dy1,
int mn1,
int yr1) moonRiseLCResult =
PAMacros.
MoonRiseLcDMY(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
251 double localAzimuthDeg1 =
PAMacros.
MoonRiseAz(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
253 double localTimeOfMoonsetHours =
PAMacros.
MoonSetLCT(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
254 (
double dy1,
int mn1,
int yr1) moonSetLCResult =
PAMacros.
MoonSetLcDMY(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
255 double localAzimuthDeg2 =
PAMacros.
MoonSetAz(localDateDay, localDateMonth, localDateYear, daylightSaving, zoneCorrectionHours, geogLongDeg, geogLatDeg);
268 double msAzimuthDeg = Math.Round(localAzimuthDeg2, 2);
270 return (
mrLTHour,
mrLTMin,
mrLocalDateDay,
mrLocalDateMonth,
mrLocalDateYear,
mrAzimuthDeg,
msLTHour,
msLTMin,
msLocalDateDay,
msLocalDateMonth,
msLocalDateYear, msAzimuthDeg);
Miscellaneous macro functions supporting the other classes.
static double int int yr1 MoonRiseLcDMY(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
static double NewMoon(int ds, int zc, double dy, int mn, int yr)
Calculate Julian date of New Moon.
static double LocalCivilTimeGreenwichDay(double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear)
Determine Greenwich Day for Local Time.
static double CivilDateToJulianDate(double day, double month, double year)
Convert a Greenwich Date/Civil Date (day,month,year) to Julian Date.
static double MoonRiseAz(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local azimuth of moonrise.
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.
static double Degrees(double w)
Convert W to Degrees.
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.
static double MoonRiseLCT(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local time of moonrise.
static double NutatLong(double gd, int gm, int gy)
Nutation amount to be added in ecliptic longitude, in degrees.
static double EcDec(double eld, double elm, double els, double bd, double bm, double bs, double gd, int gm, int gy)
Ecliptic - Declination (degrees)
static double double double moonHorPara MoonLongLatHP(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
static double MoonPhase(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate current phase of Moon.
static double JulianDateDay(double julianDate)
Returns the day part of a Julian Date.
static double DecimalDegreesToDegreeHours(double decimalDegrees)
Convert Decimal Degrees to Degree-Hours.
static double UnwindDeg(double w)
Convert angle in degrees to equivalent angle in the range 0 to 360 degrees.
static double MoonSetLCT(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local time of moonset.
static double int int yr1 MoonSetLcDMY(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
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.
static double MoonSize(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate the Moon's angular diameter (degrees)
static double EcRA(double eld, double elm, double els, double bd, double bm, double bs, double gd, int gm, int gy)
Ecliptic - Right Ascension (degrees)
static double MoonHP(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate horizontal parallax for the Moon.
static int DecimalHoursMinute(double decimalHours)
Return the minutes part of a Decimal Hours.
static double FullMoon(int ds, int zc, double dy, int mn, int yr)
Calculate Julian date of Full Moon.
static double DecimalHoursSecond(double decimalHours)
Return the seconds part of a Decimal Hours.
static double DecimalDegreesSeconds(double decimalDegrees)
Return Seconds part of Decimal Degrees.
static int JulianDateMonth(double julianDate)
Returns the month part of a Julian Date.
static double SunMeanAnomaly(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate the Sun's mean anomaly.
static int DecimalHoursHour(double decimalHours)
Return the hour part of a Decimal Hours.
static int JulianDateYear(double julianDate)
Returns the year part of a Julian Date.
static double SunLong(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's ecliptic longitude.
static double UniversalTimeToLocalCivilTime(double uHours, double uMinutes, double uSeconds, int daylightSaving, int zoneCorrection, double greenwichDay, int greenwichMonth, int greenwichYear)
Convert Universal Time to Local Civil Time.
static double MoonDist(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate distance from the Earth to the Moon (km)
static double LocalCivilTimeToUniversalTime(double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear)
Convert Local Civil Time to Universal Time.
static double DecimalDegreesMinutes(double decimalDegrees)
Return Minutes part of Decimal Degrees.
static int LocalCivilTimeGreenwichMonth(double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear)
Determine Greenwich Month for Local Time.
static double DecimalDegreesDegrees(double decimalDegrees)
Return Degrees part of Decimal Degrees.
static double MoonSetAz(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local azimuth of moonset.
static int LocalCivilTimeGreenwichYear(double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear)
Determine Greenwich Year for Local Time.
double moonRAHour
Calculate approximate position of the Moon.
double double double int mrLocalDateMonth
double mrLTHour
Calculate date/time of local moonrise and moonset.
double double paBrightLimbDeg MoonPhase(double lctHour, double lctMin, double lctSec, bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear, PAAccuracyLevel accuracyLevel)
double double double double double moonDecMin
double moonPhase
Calculate Moon phase and position angle of bright limb.
double double double int int double mrAzimuthDeg
double double double int int double double double double int int double msAzimuthDeg MoonriseAndMoonset(double localDateDay, int localDateMonth, int localDateYear, bool isDaylightSaving, int zoneCorrectionHours, double geogLongDeg, double geogLatDeg)
double double double int int mrLocalDateYear
double double double int nmLocalDateMonth
double double double int int double double double double int int msLocalDateYear
double double double int int double double double int int fmLocalDateYear TimesOfNewMoonAndFullMoon(bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear)
double double double int int double double double msLTMin
double double double double horParallaxDeg
double double angDiameterDeg
double double double double double double moonDecSec
double double double double double double moonDecSec ApproximatePositionOfMoon(double lctHour, double lctMin, double lctSec, bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear)
double double double double double double double earthMoonDistKM
double double double int int double fmLocalTimeHour
double double double int int double double double double msLocalDateDay
double double double double double horParallaxMin
double double double int int double double double double int msLocalDateMonth
double nmLocalTimeHour
Calculate new moon and full moon instances.
double double double int int double double fmLocalTimeMin
double double double nmLocalDateDay
double double double double double double horParallaxSec MoonDistAngDiamHorParallax(double lctHour, double lctMin, double lctSec, bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear)
double double double double double double double double moonHorParallaxDeg PrecisePositionOfMoon(double lctHour, double lctMin, double lctSec, bool isDaylightSaving, int zoneCorrectionHours, double localDateDay, int localDateMonth, int localDateYear)
double double double angDiameterMin
double double nmLocalTimeMin
double earthMoonDist
Calculate Moon's distance, angular diameter, and horizontal parallax.
double double double double moonDecDeg
double double double int int nmLocalDateYear
double double double moonRASec
double double double int int double double double int fmLocalDateMonth
double double double int int double double msLTHour
double double double mrLocalDateDay
double double double int int double double double fmLocalDateDay
PAAccuracyLevel
Accuracy level of calculation.