2using System.Collections.Generic;
20 public static double HMStoDH(
double hours,
double minutes,
double seconds)
22 double fHours = hours;
23 double fMinutes = minutes;
24 double fSeconds = seconds;
26 double a = Math.Abs(fSeconds) / 60;
27 double b = (Math.Abs(fMinutes) +
a) / 60;
28 double c = Math.Abs(fHours) +
b;
30 return (fHours < 0 || fMinutes < 0 || fSeconds < 0) ? -c : c;
41 double a = Math.Abs(decimalHours);
43 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
44 double e = (c == 60) ?
b + 60 :
b;
46 return (decimalHours < 0) ? (int)-(e / 3600).Floor() : (int)(e / 3600).Floor();
57 double a = Math.Abs(decimalHours);
59 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
60 double e = (c == 60) ?
b + 60 :
b;
62 return (
int)(e / 60).Floor() % 60;
73 double a = Math.Abs(decimalHours);
75 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
76 double d = (c == 60) ? 0 : c;
89 double fDay = (double)day;
90 double fMonth = (double)month;
91 double fYear = (double)year;
93 double y = (fMonth < 3) ? fYear - 1 : fYear;
94 double m = (fMonth < 3) ? fMonth + 12 : fMonth;
100 double a = (
y / 100).Floor();
101 b = 2 -
a + (
a / 4).Floor();
105 if (fYear == 1582 && fMonth > 10)
107 double a = (
y / 100).Floor();
108 b = 2 -
a + (
a / 4).Floor();
112 if (fYear == 1582 && fMonth == 10 && fDay >= 15)
114 double a = (
y / 100).Floor();
115 b = 2 -
a + (
a / 4).Floor();
122 double c = (
y < 0) ? ((365.25 *
y) - 0.75).Floor() : (365.25 *
y).Floor();
123 double d = (30.6001 * (m + 1.0)).Floor();
125 return b + c + d + fDay + 1720994.5;
136 double i = (julianDate + 0.5).Floor();
137 double f = julianDate + 0.5 - i;
138 double a = ((i - 1867216.25) / 36524.25).Floor();
139 double b = (i > 2299160) ? i + 1 +
a - (
a / 4).Floor() : i;
141 double d = ((c - 122.1) / 365.25).Floor();
142 double e = (365.25 * d).Floor();
143 double g = ((c - e) / 30.6001).Floor();
145 return c - e +
f - (30.6001 * g).Floor();
156 double i = (julianDate + 0.5).Floor();
157 double a = ((i - 1867216.25) / 36524.25).Floor();
158 double b = (i > 2299160) ? i + 1 +
a - (
a / 4).Floor() : i;
160 double d = ((c - 122.1) / 365.25).Floor();
161 double e = (365.25 * d).Floor();
162 double g = ((c - e) / 30.6001).Floor();
164 double returnValue = (g < 13.5) ? g - 1 : g - 13;
166 return (
int)returnValue;
177 double i = (julianDate + 0.5).Floor();
178 double a = ((i - 1867216.25) / 36524.25).Floor();
179 double b = (i > 2299160) ? i + 1.0 +
a - (
a / 4.0).Floor() : i;
181 double d = ((c - 122.1) / 365.25).Floor();
182 double e = (365.25 * d).Floor();
183 double g = ((c - e) / 30.6001).Floor();
184 double h = (g < 13.5) ? g - 1 : g - 13;
186 double returnValue = (h > 2.5) ? d - 4716 : d - 4715;
188 return (
int)returnValue;
197 public static double RightAscensionToHourAngle(
double raHours,
double raMinutes,
double raSeconds,
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear,
double geographicalLongitude)
200 double b =
LocalCivilTimeGreenwichDay(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
201 int c =
LocalCivilTimeGreenwichMonth(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
202 int d =
LocalCivilTimeGreenwichYear(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
205 double g =
HMStoDH(raHours, raMinutes, raSeconds);
208 return (h < 0) ? 24 + h : h;
217 public static double HourAngleToRightAscension(
double hourAngleHours,
double hourAngleMinutes,
double hourAngleSeconds,
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear,
double geographicalLongitude)
220 double b =
LocalCivilTimeGreenwichDay(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
221 int c =
LocalCivilTimeGreenwichMonth(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
222 int d =
LocalCivilTimeGreenwichYear(lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear);
225 double g =
HMStoDH(hourAngleHours, hourAngleMinutes, hourAngleSeconds);
228 return (h < 0) ? 24 + h : h;
237 public static double LocalCivilTimeToUniversalTime(
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear)
239 double a =
HMStoDH(lctHours, lctMinutes, lctSeconds);
240 double b =
a - daylightSaving - zoneCorrection;
241 double c = localDay + (
b / 24);
244 double e1 = e.Floor();
246 return 24 * (e -
e1);
255 public static double UniversalTimeToLocalCivilTime(
double uHours,
double uMinutes,
double uSeconds,
int daylightSaving,
int zoneCorrection,
double greenwichDay,
int greenwichMonth,
int greenwichYear)
257 double a =
HMStoDH(uHours, uMinutes, uSeconds);
258 double b =
a + zoneCorrection;
259 double c =
b + daylightSaving;
262 double e1 = e.Floor();
264 return 24 * (e -
e1);
273 public static double UniversalTime_LocalCivilDay(
double uHours,
double uMinutes,
double uSeconds,
int daylightSaving,
int zoneCorrection,
double greenwichDay,
int greenwichMonth,
int greenwichYear)
275 double a =
HMStoDH(uHours, uMinutes, uSeconds);
276 double b =
a + zoneCorrection;
277 double c =
b + daylightSaving;
280 double e1 = e.Floor();
291 public static int UniversalTime_LocalCivilMonth(
double uHours,
double uMinutes,
double uSeconds,
int daylightSaving,
int zoneCorrection,
double greenwichDay,
int greenwichMonth,
int greenwichYear)
293 double a =
HMStoDH(uHours, uMinutes, uSeconds);
294 double b =
a + zoneCorrection;
295 double c =
b + daylightSaving;
307 public static int UniversalTime_LocalCivilYear(
double uHours,
double uMinutes,
double uSeconds,
int daylightSaving,
int zoneCorrection,
double greenwichDay,
int greenwichMonth,
int greenwichYear)
309 double a =
HMStoDH(uHours, uMinutes, uSeconds);
310 double b =
a + zoneCorrection;
311 double c =
b + daylightSaving;
323 public static double LocalCivilTimeGreenwichDay(
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear)
325 double a =
HMStoDH(lctHours, lctMinutes, lctSeconds);
326 double b =
a - daylightSaving - zoneCorrection;
327 double c = localDay + (
b / 24);
340 public static int LocalCivilTimeGreenwichMonth(
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear)
342 double a =
HMStoDH(lctHours, lctMinutes, lctSeconds);
343 double b =
a - daylightSaving - zoneCorrection;
344 double c = localDay + (
b / 24);
356 public static int LocalCivilTimeGreenwichYear(
double lctHours,
double lctMinutes,
double lctSeconds,
int daylightSaving,
int zoneCorrection,
double localDay,
int localMonth,
int localYear)
358 double a =
HMStoDH(lctHours, lctMinutes, lctSeconds);
359 double b =
a - daylightSaving - zoneCorrection;
360 double c = localDay + (
b / 24);
375 double b =
a - 2451545;
376 double c =
b / 36525;
377 double d = 6.697374558 + (2400.051336 * c) + (0.000025862 * c * c);
378 double e = d - (24 * (d / 24).Floor());
379 double f =
HMStoDH(uHours, uMinutes, uSeconds);
380 double g =
f * 1.002737909;
383 return h - (24 * (h / 24).Floor());
394 double a =
HMStoDH(greenwichHours, greenwichMinutes, greenwichSeconds);
395 double b = geographicalLongitude / 15;
398 return c - (24 * (c / 24).Floor());
407 public static double EquatorialCoordinatesToAzimuth(
double hourAngleHours,
double hourAngleMinutes,
double hourAngleSeconds,
double declinationDegrees,
double declinationMinutes,
double declinationSeconds,
double geographicalLatitude)
409 double a =
HMStoDH(hourAngleHours, hourAngleMinutes, hourAngleSeconds);
411 double c =
b.ToRadians();
413 double e = d.ToRadians();
414 double f = geographicalLatitude.ToRadians();
415 double g = e.Sine() *
f.Sine() + e.Cosine() *
f.Cosine() * c.Cosine();
416 double h = -e.Cosine() *
f.Cosine() * c.Sine();
417 double i = e.Sine() - (
f.Sine() * g);
418 double j =
Degrees(h.AngleTangent2(i));
420 return j - 360.0 * (j / 360).Floor();
429 public static double EquatorialCoordinatesToAltitude(
double hourAngleHours,
double hourAngleMinutes,
double hourAngleSeconds,
double declinationDegrees,
double declinationMinutes,
double declinationSeconds,
double geographicalLatitude)
431 double a =
HMStoDH(hourAngleHours, hourAngleMinutes, hourAngleSeconds);
433 double c =
b.ToRadians();
435 double e = d.ToRadians();
436 double f = geographicalLatitude.ToRadians();
437 double g = e.Sine() *
f.Sine() + e.Cosine() *
f.Cosine() * c.Cosine();
450 double a = Math.Abs(seconds) / 60;
451 double b = (Math.Abs(minutes) +
a) / 60;
452 double c = Math.Abs(degrees) +
b;
454 return (degrees < 0 || minutes < 0 || seconds < 0) ? -c : c;
465 return w * 57.29577951;
476 double a = Math.Abs(decimalDegrees);
478 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
479 double e = (c == 60) ? 60 :
b;
481 return (decimalDegrees < 0) ? -(e / 3600).Floor() : (e / 3600).Floor();
492 double a = Math.Abs(decimalDegrees);
494 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
495 double e = (c == 60) ?
b + 60 :
b;
497 return (e / 60).Floor() % 60;
508 double a = Math.Abs(decimalDegrees);
510 double c = Math.Round(
b - 60 * (
b / 60).Floor(), 2);
511 double d = (c == 60) ? 0 : c;
524 return decimalDegrees / 15;
535 return degreeHours * 15;
544 public static double HorizonCoordinatesToDeclination(
double azimuthDegrees,
double azimuthMinutes,
double azimuthSeconds,
double altitudeDegrees,
double altitudeMinutes,
double altitudeSeconds,
double geographicalLatitude)
548 double c =
a.ToRadians();
549 double d =
b.ToRadians();
550 double e = geographicalLatitude.ToRadians();
551 double f = d.Sine() * e.Sine() + d.Cosine() * e.Cosine() * c.Cosine();
562 public static double HorizonCoordinatesToHourAngle(
double azimuthDegrees,
double azimuthMinutes,
double azimuthSeconds,
double altitudeDegrees,
double altitudeMinutes,
double altitudeSeconds,
double geographicalLatitude)
566 double c =
a.ToRadians();
567 double d =
b.ToRadians();
568 double e = geographicalLatitude.ToRadians();
569 double f = d.Sine() * e.Sine() + d.Cosine() * e.Cosine() * c.Cosine();
570 double g = -d.Cosine() * e.Cosine() * c.Sine();
571 double h = d.Sine() - e.Sine() *
f;
574 return i - 24 * (i / 24).Floor();
583 public static double Obliq(
double greenwichDay,
int greenwichMonth,
int greenwichYear)
586 double b =
a - 2415020;
587 double c = (
b / 36525) - 1;
588 double d = c * (46.815 + c * (0.0006 - (c * 0.00181)));
591 return 23.43929167 - e +
NutatObl(greenwichDay, greenwichMonth, greenwichYear);
600 public static double NutatLong(
double gd,
int gm,
int gy)
603 double t = dj / 36525;
606 double a = 100.0021358 * t;
607 double b = 360 * (
a -
a.Floor());
609 double l1 = 279.6967 + 0.000303 * t2 +
b;
610 double l2 = 2 * l1.ToRadians();
613 b = 360 * (
a -
a.Floor());
615 double d1 = 270.4342 - 0.001133 * t2 +
b;
616 double d2 = 2 * d1.ToRadians();
619 b = 360 * (
a -
a.Floor());
621 double m1 = 358.4758 - 0.00015 * t2 +
b;
625 b = 360 * (
a -
a.Floor());
627 double m2 = 296.1046 + 0.009192 * t2 +
b;
631 b = 360 * (
a -
a.Floor());
633 double n1 = 259.1833 + 0.002078 * t2 -
b;
636 double n2 = 2.0 * n1;
638 double dp = (-17.2327 - 0.01737 * t) * n1.Sine();
639 dp =
dp + (-1.2729 - 0.00013 * t) * l2.Sine() + 0.2088 * n2.Sine();
640 dp =
dp - 0.2037 * d2.Sine() + (0.1261 - 0.00031 * t) * m1.Sine();
641 dp =
dp + 0.0675 * m2.Sine() - (0.0497 - 0.00012 * t) * (l2 + m1).Sine();
642 dp =
dp - 0.0342 * (d2 - n1).Sine() - 0.0261 * (d2 + m2).Sine();
643 dp =
dp + 0.0214 * (l2 - m1).Sine() - 0.0149 * (l2 - d2 + m2).Sine();
644 dp =
dp + 0.0124 * (l2 - n1).Sine() + 0.0114 * (d2 - m2).Sine();
655 public static double NutatObl(
double greenwichDay,
int greenwichMonth,
int greenwichYear)
658 double t = dj / 36525;
661 double a = 100.0021358 * t;
662 double b = 360 * (
a -
a.Floor());
664 double l1 = 279.6967 + 0.000303 * t2 +
b;
665 double l2 = 2 * l1.ToRadians();
668 b = 360 * (
a -
a.Floor());
670 double d1 = 270.4342 - 0.001133 * t2 +
b;
671 double d2 = 2 * d1.ToRadians();
674 b = 360 * (
a -
a.Floor());
676 double m1 = (358.4758 - 0.00015 * t2 +
b).ToRadians();
679 b = 360 * (
a -
a.Floor());
681 double m2 = (296.1046 + 0.009192 * t2 +
b).ToRadians();
684 b = 360 * (
a -
a.Floor());
686 double n1 = (259.1833 + 0.002078 * t2 -
b).ToRadians();
690 double ddo = (9.21 + 0.00091 * t) * n1.Cosine();
691 ddo = ddo + (0.5522 - 0.00029 * t) * l2.Cosine() - 0.0904 * n2.Cosine();
692 ddo = ddo + 0.0884 * d2.Cosine() + 0.0216 * (l2 + m1).Cosine();
693 ddo = ddo + 0.0183 * (d2 - n1).Cosine() + 0.0113 * (d2 + m2).Cosine();
694 ddo = ddo - 0.0093 * (l2 - m1).Cosine() - 0.0066 * (l2 - n1).Cosine();
707 double a =
HMStoDH(localHours, localMinutes, localSeconds);
708 double b = longitude / 15;
711 return c - (24 * (c / 24).Floor());
720 public static double GreenwichSiderealTimeToUniversalTime(
double greenwichSiderealHours,
double greenwichSiderealMinutes,
double greenwichSiderealSeconds,
double greenwichDay,
int greenwichMonth,
int greenwichYear)
723 double b =
a - 2451545;
724 double c =
b / 36525;
725 double d = 6.697374558 + (2400.051336 * c) + (0.000025862 * c * c);
726 double e = d - (24 * (d / 24).Floor());
727 double f =
HMStoDH(greenwichSiderealHours, greenwichSiderealMinutes, greenwichSiderealSeconds);
729 double h = g - (24 * (g / 24).Floor());
731 return h * 0.9972695663;
743 double b =
a - 2451545;
744 double c =
b / 36525;
745 double d = 6.697374558 + (2400.051336 * c) + (0.000025862 * c * c);
746 double e = d - (24 * (d / 24).Floor());
749 double h = g - (24 * (g / 24).Floor());
760 public static double SunLong(
double lch,
double lcm,
double lcs,
int ds,
int zc,
double ld,
int lm,
int ly)
767 double t = (dj / 36525) + (
ut / 876600);
769 double a = 100.0021359 * t;
770 double b = 360.0 * (
a -
a.Floor());
772 double l = 279.69668 + 0.0003025 * t2 +
b;
774 b = 360 * (
a -
a.Floor());
776 double m1 = 358.47583 - (0.00015 + 0.0000033 * t) * t2 +
b;
777 double ec = 0.01675104 - 0.0000418 * t - 0.000000126 * t2;
779 double am = m1.ToRadians();
783 b = 360 * (
a -
a.Floor());
785 double a1 = (153.23 +
b).ToRadians();
787 b = 360 * (
a -
a.Floor());
789 double b1 = (216.57 +
b).ToRadians();
791 b = 360.0 * (
a -
a.Floor());
793 double c1 = (312.69 +
b).ToRadians();
795 b = 360.0 * (
a -
a.Floor());
797 double d1 = (350.74 - 0.00144 * t2 +
b).ToRadians();
798 double e1 = (231.19 + 20.2 * t).ToRadians();
800 b = 360.0 * (
a -
a.Floor());
801 double h1 = (353.4 +
b).ToRadians();
803 double d2 = 0.00134 * a1.Cosine() + 0.00154 *
b1.Cosine() + 0.002 * c1.Cosine();
804 d2 = d2 + 0.00179 * d1.Sine() + 0.00178 *
e1.Sine();
805 double d3 = 0.00000543 * a1.Sine() + 0.00001575 *
b1.Sine();
806 d3 = d3 + 0.00001627 * c1.Sine() + 0.00003076 * d1.Cosine();
808 double sr = at + (l - m1 + d2).ToRadians();
809 double tp = 6.283185308;
811 sr -= tp * (sr / tp).Floor();
824 double tp = 6.283185308;
825 double m = am - tp * (am / tp).Floor();
830 double d = ae - (ec * ae.Sine()) - m;
831 if (Math.Abs(d) < 0.000001)
835 d /= (1.0 - (ec * ae.Cosine()));
838 double a = ((1 + ec) / (1 - ec)).SquareRoot() * (ae / 2).Tangent();
839 double at = 2.0 *
a.AngleTangent();
852 double tp = 6.283185308;
853 double m = am - tp * (am / tp).Floor();
858 double d = ae - (ec * ae.Sine()) - m;
860 if (Math.Abs(d) < 0.000001)
865 d /= (1 - (ec * ae.Cosine()));
880 double y = y2.ToRadians();
892 double yNew = y1 + r1;
900 if ((r2 == 0) || (Math.Abs(r2 - r1) < 0.000001))
932 double a = ((0.00002 * yd + 0.0196) * yd + 0.1594) * pr;
933 double b = (273.0 + tr) * ((0.0845 * yd + 0.505) * yd + 1);
935 return (-(
a /
b) * d).ToRadians();
938 return -d * 0.00007888888 * pr / ((273.0 + tr) *
y.Tangent());
947 public static double ParallaxHA(
double hh,
double hm,
double hs,
double dd,
double dm,
double ds,
PACoordinateType sw,
double gp,
double ht,
double hp)
949 double a = gp.ToRadians();
950 double c1 =
a.Cosine();
951 double s1 =
a.Sine();
953 double u = (0.996647 * s1 / c1).AngleTangent();
954 double c2 = u.Cosine();
955 double s2 = u.Sine();
956 double b = ht / 6378160;
958 double rs = (0.996647 * s2) + (
b * s1);
960 double rc = c2 + (
b * c1);
961 double tp = 6.283185308;
963 double rp = 1.0 / hp.ToRadians().Sine();
986 double p2 = result.p - xLoop;
987 double q2 = result.q - yLoop;
989 double aa = Math.Abs(p2 - p1);
990 double bb = Math.Abs(q2 - q1);
992 if ((aa < 0.000001) && (bb < 0.000001))
1011 public static (
double p,
double q)
ParallaxHAL2870(
double x,
double y,
double rc,
double rp,
double rs,
double tp)
1013 double cx =
x.Cosine();
1014 double sy =
y.Sine();
1015 double cy =
y.Cosine();
1017 double aa = rc *
x.Sine() / ((rp * cy) - (rc * cx));
1019 double dx = aa.AngleTangent();
1021 double cp =
p.Cosine();
1023 p -= tp * (
p / tp).Floor();
1024 double q = (cp * (rp * sy - rs) / (rp * cy * cx - rc)).AngleTangent();
1042 double a = gp.ToRadians();
1043 double c1 =
a.Cosine();
1044 double s1 =
a.Sine();
1046 double u = (0.996647 * s1 / c1).AngleTangent();
1048 double c2 = u.Cosine();
1049 double s2 = u.Sine();
1050 double b = ht / 6378160;
1051 double rs = (0.996647 * s2) + (
b * s1);
1053 double rc = c2 + (
b * c1);
1054 double tp = 6.283185308;
1056 double rp = 1.0 / hp.ToRadians().Sine();
1082 double p2 = result.p - xLoop;
1083 double q2 = result.q - yLoop;
1084 double aa = Math.Abs(p2 - p1);
1086 if ((aa < 0.000001) && (
b < 0.000001))
1104 public static (
double p,
double q)
ParallaxDecL2870(
double x,
double y,
double rc,
double rp,
double rs,
double tp)
1106 double cx =
x.Cosine();
1107 double sy =
y.Sine();
1108 double cy =
y.Cosine();
1110 double aa = rc *
x.Sine() / ((rp * cy) - (rc * cx));
1111 double dx = aa.AngleTangent();
1113 double cp =
p.Cosine();
1115 p -= tp * (
p / tp).Floor();
1116 double q = (cp * (rp * sy - rs) / (rp * cy * cx - rc)).AngleTangent();
1127 public static double SunDia(
double lch,
double lcm,
double lcs,
int ds,
int zc,
double ld,
int lm,
int ly)
1129 double a =
SunDist(lch, lcm, lcs, ds, zc, ld, lm, ly);
1131 return 0.533128 /
a;
1140 public static double SunDist(
double lch,
double lcm,
double lcs,
int ds,
int zc,
double ld,
int lm,
int ly)
1148 double t = (dj / 36525) + (
ut / 876600);
1151 double a = 100.0021359 * t;
1152 double b = 360 * (
a -
a.Floor());
1153 a = 99.99736042 * t;
1154 b = 360 * (
a -
a.Floor());
1155 double m1 = 358.47583 - (0.00015 + 0.0000033 * t) * t2 +
b;
1156 double ec = 0.01675104 - 0.0000418 * t - 0.000000126 * t2;
1158 double am = m1.ToRadians();
1161 a = 62.55209472 * t;
1162 b = 360 * (
a -
a.Floor());
1163 double a1 = (153.23 +
b).ToRadians();
1164 a = 125.1041894 * t;
1165 b = 360 * (
a -
a.Floor());
1166 double b1 = (216.57 +
b).ToRadians();
1167 a = 91.56766028 * t;
1168 b = 360 * (
a -
a.Floor());
1169 double c1 = (312.69 +
b).ToRadians();
1170 a = 1236.853095 * t;
1171 b = 360 * (
a -
a.Floor());
1172 double d1 = (350.74 - 0.00144 * t2 +
b).ToRadians();
1173 double e1 = (231.19 + 20.2 * t).ToRadians();
1174 a = 183.1353208 * t;
1175 b = 360 * (
a -
a.Floor());
1176 double h1 = (353.4 +
b).ToRadians();
1178 double d3 = 0.00000543 * a1.Sine() + 0.00001575 *
b1.Sine() + (0.00001627 * c1.Sine() + 0.00003076 * d1.Cosine()) + (0.00000927 * h1.Sine());
1180 return 1.0000002 * (1 - ec * ae.Cosine()) + d3;
1189 public static double MoonLong(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
1198 double m1 = 27.32158213;
1199 double m2 = 365.2596407;
1200 double m3 = 27.55455094;
1201 double m4 = 29.53058868;
1202 double m5 = 27.21222039;
1203 double m6 = 6798.363307;
1211 m1 = 360 * (m1 - m1.Floor());
1212 m2 = 360 * (m2 - m2.Floor());
1213 m3 = 360 * (m3 - m3.Floor());
1214 m4 = 360 * (m4 - m4.Floor());
1215 m5 = 360 * (m5 - m5.Floor());
1216 m6 = 360 * (m6 - m6.Floor());
1218 double ml = 270.434164 + m1 - (0.001133 - 0.0000019 * t) * t2;
1219 double ms = 358.475833 + m2 - (0.00015 + 0.0000033 * t) * t2;
1220 double md = 296.104608 + m3 + (0.009192 + 0.0000144 * t) * t2;
1221 double me1 = 350.737486 + m4 - (0.001436 - 0.0000019 * t) * t2;
1222 double mf = 11.250889 + m5 - (0.003211 + 0.0000003 * t) * t2;
1223 double na = 259.183275 - m6 + (0.002078 + 0.0000022 * t) * t2;
1224 double a = (51.2 + 20.2 * t).ToRadians();
1225 double s1 =
a.Sine();
1226 double s2 = na.ToRadians().Sine();
1227 double b = 346.56 + (132.87 - 0.0091731 * t) * t;
1228 double s3 = 0.003964 *
b.ToRadians().Sine();
1229 double c = (na + 275.05 - 2.3 * t).ToRadians();
1230 double s4 = c.Sine();
1231 ml = ml + 0.000233 * s1 + s3 + 0.001964 * s2;
1232 ms -= 0.001778 * s1;
1233 md = md + 0.000817 * s1 + s3 + 0.002541 * s2;
1234 mf = mf + s3 - 0.024691 * s2 - 0.004328 * s4;
1235 me1 = me1 + 0.002011 * s1 + s3 + 0.001964 * s2;
1236 double e = 1.0 - (0.002495 + 0.00000752 * t) * t;
1238 ml = ml.ToRadians();
1239 ms = ms.ToRadians();
1240 me1 = me1.ToRadians();
1241 mf = mf.ToRadians();
1242 md = md.ToRadians();
1244 double l = 6.28875 * md.Sine() + 1.274018 * (2.0 * me1 - md).Sine();
1245 l = l + 0.658309 * (2.0 * me1).Sine() + 0.213616 * (2.0 * md).Sine();
1246 l = l - e * 0.185596 * ms.Sine() - 0.114336 * (2.0 * mf).Sine();
1247 l += 0.058793 * (2.0 * (me1 - md)).Sine();
1248 l = l + 0.057212 * e * (2.0 * me1 - ms - md).Sine() + 0.05332 * (2.0 * me1 + md).Sine();
1249 l = l + 0.045874 * e * (2.0 * me1 - ms).Sine() + 0.041024 * e * (md - ms).Sine();
1250 l = l - 0.034718 * me1.Sine() - e * 0.030465 * (ms + md).Sine();
1251 l = l + 0.015326 * (2.0 * (me1 - mf)).Sine() - 0.012528 * (2.0 * mf + md).Sine();
1252 l = l - 0.01098 * (2.0 * mf - md).Sine() + 0.010674 * (4.0 * me1 - md).Sine();
1253 l = l + 0.010034 * (3.0 * md).Sine() + 0.008548 * (4.0 * me1 - 2.0 * md).Sine();
1254 l = l - e * 0.00791 * (ms - md + 2.0 * me1).Sine() - e * 0.006783 * (2.0 * me1 + ms).Sine();
1255 l = l + 0.005162 * (md - me1).Sine() + e * 0.005 * (ms + me1).Sine();
1256 l = l + 0.003862 * (4.0 * me1).Sine() + e * 0.004049 * (md - ms + 2.0 * me1).Sine();
1257 l = l + 0.003996 * (2.0 * (md + me1)).Sine() + 0.003665 * (2.0 * me1 - 3.0 * md).Sine();
1258 l = l + e * 0.002695 * (2.0 * md - ms).Sine() + 0.002602 * (md - 2.0 * (mf + me1)).Sine();
1259 l = l + e * 0.002396 * (2.0 * (me1 - md) - ms).Sine() - 0.002349 * (md + me1).Sine();
1260 l = l + e2 * 0.002249 * (2.0 * (me1 - ms)).Sine() - e * 0.002125 * (2.0 * md + ms).Sine();
1261 l = l - e2 * 0.002079 * (2.0 * ms).Sine() + e2 * 0.002059 * (2.0 * (me1 - ms) - md).Sine();
1262 l = l - 0.001773 * (md + 2.0 * (me1 - mf)).Sine() - 0.001595 * (2.0 * (mf + me1)).Sine();
1263 l = l + e * 0.00122 * (4.0 * me1 - ms - md).Sine() - 0.00111 * (2.0 * (md + mf)).Sine();
1264 l = l + 0.000892 * (md - 3.0 * me1).Sine() - e * 0.000811 * (ms + md + 2.0 * me1).Sine();
1265 l += e * 0.000761 * (4.0 * me1 - ms - 2.0 * md).Sine();
1266 l += e2 * 0.000704 * (md - 2.0 * (ms + me1)).Sine();
1267 l += e * 0.000693 * (ms - 2.0 * (md - me1)).Sine();
1268 l += e * 0.000598 * (2.0 * (me1 - mf) - ms).Sine();
1269 l = l + 0.00055 * (md + 4.0 * me1).Sine() + 0.000538 * (4.0 * md).Sine();
1270 l = l + e * 0.000521 * (4.0 * me1 - ms).Sine() + 0.000486 * (2.0 * md - me1).Sine();
1271 l += e2 * 0.000717 * (md - 2.0 * ms).Sine();
1272 double mm =
Unwind(ml + l.ToRadians());
1283 public static double MoonLat(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
1292 double m1 = 27.32158213;
1293 double m2 = 365.2596407;
1294 double m3 = 27.55455094;
1295 double m4 = 29.53058868;
1296 double m5 = 27.21222039;
1297 double m6 = 6798.363307;
1305 m1 = 360 * (m1 - m1.Floor());
1306 m2 = 360 * (m2 - m2.Floor());
1307 m3 = 360 * (m3 - m3.Floor());
1308 m4 = 360 * (m4 - m4.Floor());
1309 m5 = 360 * (m5 - m5.Floor());
1310 m6 = 360 * (m6 - m6.Floor());
1312 double ml = 270.434164 + m1 - (0.001133 - 0.0000019 * t) * t2;
1313 double ms = 358.475833 + m2 - (0.00015 + 0.0000033 * t) * t2;
1314 double md = 296.104608 + m3 + (0.009192 + 0.0000144 * t) * t2;
1315 double me1 = 350.737486 + m4 - (0.001436 - 0.0000019 * t) * t2;
1316 double mf = 11.250889 + m5 - (0.003211 + 0.0000003 * t) * t2;
1317 double na = 259.183275 - m6 + (0.002078 + 0.0000022 * t) * t2;
1318 double a = (51.2 + 20.2 * t).ToRadians();
1319 double s1 =
a.Sine();
1320 double s2 = na.ToRadians().Sine();
1321 double b = 346.56 + (132.87 - 0.0091731 * t) * t;
1322 double s3 = 0.003964 *
b.ToRadians().Sine();
1323 double c = (na + 275.05 - 2.3 * t).ToRadians();
1324 double s4 = c.Sine();
1325 ml = ml + 0.000233 * s1 + s3 + 0.001964 * s2;
1326 ms -= 0.001778 * s1;
1327 md = md + 0.000817 * s1 + s3 + 0.002541 * s2;
1328 mf = mf + s3 - 0.024691 * s2 - 0.004328 * s4;
1329 me1 = me1 + 0.002011 * s1 + s3 + 0.001964 * s2;
1330 double e = 1.0 - (0.002495 + 0.00000752 * t) * t;
1332 ms = ms.ToRadians();
1333 na = na.ToRadians();
1334 me1 = me1.ToRadians();
1335 mf = mf.ToRadians();
1336 md = md.ToRadians();
1338 double g = 5.128189 * mf.Sine() + 0.280606 * (md + mf).Sine();
1339 g = g + 0.277693 * (md - mf).Sine() + 0.173238 * (2.0 * me1 - mf).Sine();
1340 g = g + 0.055413 * (2.0 * me1 + mf - md).Sine() + 0.046272 * (2.0 * me1 - mf - md).Sine();
1341 g = g + 0.032573 * (2.0 * me1 + mf).Sine() + 0.017198 * (2.0 * md + mf).Sine();
1342 g = g + 0.009267 * (2.0 * me1 + md - mf).Sine() + 0.008823 * (2.0 * md - mf).Sine();
1343 g = g + e * 0.008247 * (2.0 * me1 - ms - mf).Sine() + 0.004323 * (2.0 * (me1 - md) - mf).Sine();
1344 g = g + 0.0042 * (2.0 * me1 + mf + md).Sine() + e * 0.003372 * (mf - ms - 2.0 * me1).Sine();
1345 g += e * 0.002472 * (2.0 * me1 + mf - ms - md).Sine();
1346 g += e * 0.002222 * (2.0 * me1 + mf - ms).Sine();
1347 g += e * 0.002072 * (2.0 * me1 - mf - ms - md).Sine();
1348 g = g + e * 0.001877 * (mf - ms + md).Sine() + 0.001828 * (4.0 * me1 - mf - md).Sine();
1349 g = g - e * 0.001803 * (mf + ms).Sine() - 0.00175 * (3.0 * mf).Sine();
1350 g = g + e * 0.00157 * (md - ms - mf).Sine() - 0.001487 * (mf + me1).Sine();
1351 g = g - e * 0.001481 * (mf + ms + md).Sine() + e * 0.001417 * (mf - ms - md).Sine();
1352 g = g + e * 0.00135 * (mf - ms).Sine() + 0.00133 * (mf - me1).Sine();
1353 g = g + 0.001106 * (mf + 3.0 * md).Sine() + 0.00102 * (4.0 * me1 - mf).Sine();
1354 g = g + 0.000833 * (mf + 4.0 * me1 - md).Sine() + 0.000781 * (md - 3.0 * mf).Sine();
1355 g = g + 0.00067 * (mf + 4.0 * me1 - 2.0 * md).Sine() + 0.000606 * (2.0 * me1 - 3.0 * mf).Sine();
1356 g += 0.000597 * (2.0 * (me1 + md) - mf).Sine();
1357 g = g + e * 0.000492 * (2.0 * me1 + md - ms - mf).Sine() + 0.00045 * (2.0 * (md - me1) - mf).Sine();
1358 g = g + 0.000439 * (3.0 * md - mf).Sine() + 0.000423 * (mf + 2.0 * (me1 + md)).Sine();
1359 g = g + 0.000422 * (2.0 * me1 - mf - 3.0 * md).Sine() - e * 0.000367 * (ms + mf + 2.0 * me1 - md).Sine();
1360 g = g - e * 0.000353 * (ms + mf + 2.0 * me1).Sine() + 0.000331 * (mf + 4.0 * me1).Sine();
1361 g += e * 0.000317 * (2.0 * me1 + mf - ms + md).Sine();
1362 g = g + e2 * 0.000306 * (2.0 * (me1 - ms) - mf).Sine() - 0.000283 * (md + 3.0 * mf).Sine();
1363 double w1 = 0.0004664 * na.Cosine();
1364 double w2 = 0.0000754 * c.Cosine();
1365 double bm = g.ToRadians() * (1.0 - w1 - w2);
1376 public static double MoonHP(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
1385 double m1 = 27.32158213;
1386 double m2 = 365.2596407;
1387 double m3 = 27.55455094;
1388 double m4 = 29.53058868;
1389 double m5 = 27.21222039;
1390 double m6 = 6798.363307;
1398 m1 = 360 * (m1 - m1.Floor());
1399 m2 = 360 * (m2 - m2.Floor());
1400 m3 = 360 * (m3 - m3.Floor());
1401 m4 = 360 * (m4 - m4.Floor());
1402 m5 = 360 * (m5 - m5.Floor());
1403 m6 = 360 * (m6 - m6.Floor());
1405 double ml = 270.434164 + m1 - (0.001133 - 0.0000019 * t) * t2;
1406 double ms = 358.475833 + m2 - (0.00015 + 0.0000033 * t) * t2;
1407 double md = 296.104608 + m3 + (0.009192 + 0.0000144 * t) * t2;
1408 double me1 = 350.737486 + m4 - (0.001436 - 0.0000019 * t) * t2;
1409 double mf = 11.250889 + m5 - (0.003211 + 0.0000003 * t) * t2;
1410 double na = 259.183275 - m6 + (0.002078 + 0.0000022 * t) * t2;
1411 double a = (51.2 + 20.2 * t).ToRadians();
1412 double s1 =
a.Sine();
1413 double s2 = na.ToRadians().Sine();
1414 double b = 346.56 + (132.87 - 0.0091731 * t) * t;
1415 double s3 = 0.003964 *
b.ToRadians().Sine();
1416 double c = (na + 275.05 - 2.3 * t).ToRadians();
1417 double s4 = c.Sine();
1418 ml = ml + 0.000233 * s1 + s3 + 0.001964 * s2;
1419 ms -= 0.001778 * s1;
1420 md = md + 0.000817 * s1 + s3 + 0.002541 * s2;
1421 mf = mf + s3 - 0.024691 * s2 - 0.004328 * s4;
1422 me1 = me1 + 0.002011 * s1 + s3 + 0.001964 * s2;
1423 double e = 1.0 - (0.002495 + 0.00000752 * t) * t;
1425 ms = ms.ToRadians();
1426 me1 = me1.ToRadians();
1427 mf = mf.ToRadians();
1428 md = md.ToRadians();
1430 double pm = 0.950724 + 0.051818 * md.Cosine() + 0.009531 * (2.0 * me1 - md).Cosine();
1431 pm =
pm + 0.007843 * (2.0 * me1).Cosine() + 0.002824 * (2.0 * md).Cosine();
1432 pm =
pm + 0.000857 * (2.0 * me1 + md).Cosine() + e * 0.000533 * (2.0 * me1 - ms).Cosine();
1433 pm += e * 0.000401 * (2.0 * me1 - md - ms).Cosine();
1434 pm =
pm + e * 0.00032 * (md - ms).Cosine() - 0.000271 * me1.Cosine();
1435 pm =
pm - e * 0.000264 * (ms + md).Cosine() - 0.000198 * (2.0 * mf - md).Cosine();
1436 pm =
pm + 0.000173 * (3.0 * md).Cosine() + 0.000167 * (4.0 * me1 - md).Cosine();
1437 pm =
pm - e * 0.000111 * ms.Cosine() + 0.000103 * (4.0 * me1 - 2.0 * md).Cosine();
1438 pm =
pm - 0.000084 * (2.0 * md - 2.0 * me1).Cosine() - e * 0.000083 * (2.0 * me1 + ms).Cosine();
1439 pm =
pm + 0.000079 * (2.0 * me1 + 2.0 * md).Cosine() + 0.000072 * (4.0 * me1).Cosine();
1440 pm =
pm + e * 0.000064 * (2.0 * me1 - ms + md).Cosine() - e * 0.000063 * (2.0 * me1 + ms - md).Cosine();
1441 pm =
pm + e * 0.000041 * (ms + me1).Cosine() + e * 0.000035 * (2.0 * md - ms).Cosine();
1442 pm =
pm - 0.000033 * (3.0 * md - 2.0 * me1).Cosine() - 0.00003 * (md + me1).Cosine();
1443 pm =
pm - 0.000029 * (2.0 * (mf - me1)).Cosine() - e * 0.000029 * (2.0 * md + ms).Cosine();
1444 pm =
pm + e2 * 0.000026 * (2.0 * (me1 - ms)).Cosine() - 0.000023 * (2.0 * (mf - me1) + md).Cosine();
1445 pm += e * 0.000019 * (4.0 * me1 - ms - md).Cosine();
1456 public static double MoonDist(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
1458 double hp =
MoonHP(lh, lm, ls, ds, zc, dy, mn, yr).ToRadians();
1459 double r = 6378.14 / hp.Sine();
1470 public static double MoonSize(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
1472 double hp =
MoonHP(lh, lm, ls, ds, zc, dy, mn, yr).ToRadians();
1473 double r = 6378.14 / hp.Sine();
1474 double th = 384401.0 * 0.5181 / r;
1487 return w - 6.283185308 * (w / 6.283185308).Floor();
1498 return w - 360 * (w / 360).Floor();
1507 public static double SunELong(
double gd,
int gm,
int gy)
1511 double x = 279.6966778 + 36000.76892 * t + 0.0003025 * t2;
1513 return x - 360 * (
x / 360).Floor();
1522 public static double SunPeri(
double gd,
int gm,
int gy)
1526 double x = 281.2208444 + 1.719175 * t + 0.000452778 * t2;
1528 return x - 360 * (
x / 360).Floor();
1537 public static double SunEcc(
double gd,
int gm,
int gy)
1542 return 0.01675104 - 0.0000418 * t - 0.000000126 * t2;
1551 public static double EcDec(
double eld,
double elm,
double els,
double bd,
double bm,
double bs,
double gd,
int gm,
int gy)
1555 double c =
Obliq(gd, gm, gy).ToRadians();
1556 double d =
b.Sine() * c.Cosine() +
b.Cosine() * c.Sine() *
a.Sine();
1567 public static double EcRA(
double eld,
double elm,
double els,
double bd,
double bm,
double bs,
double gd,
int gm,
int gy)
1571 double c =
Obliq(gd, gm, gy).ToRadians();
1572 double d =
a.Sine() * c.Cosine() -
b.Tangent() * c.Sine();
1573 double e =
a.Cosine();
1574 double f =
Degrees(d.AngleTangent2(e));
1576 return f - 360 * (
f / 360).Floor();
1585 public static double SunTrueAnomaly(
double lch,
double lcm,
double lcs,
int ds,
int zc,
double ld,
int lm,
int ly)
1593 double t = (dj / 36525) + (
ut / 876600);
1596 double a = 99.99736042 * t;
1597 double b = 360 * (
a -
a.Floor());
1599 double m1 = 358.47583 - (0.00015 + 0.0000033 * t) * t2 +
b;
1600 double ec = 0.01675104 - 0.0000418 * t - 0.000000126 * t2;
1602 double am = m1.ToRadians();
1613 public static double SunMeanAnomaly(
double lch,
double lcm,
double lcs,
int ds,
int zc,
double ld,
int lm,
int ly)
1620 double t = (dj / 36525) + (
ut / 876600);
1622 double a = 100.0021359 * t;
1623 double b = 360 * (
a -
a.Floor());
1624 double m1 = 358.47583 - (0.00015 + 0.0000033 * t) * t2 +
b;
1625 double am =
Unwind(m1.ToRadians());
1636 public static double SunriseLCT(
double ld,
int lm,
int ly,
int ds,
int zc,
double gl,
double gp)
1638 double di = 0.8333333;
1642 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
1647 if (!result1.s.Equals(
"OK"))
1662 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
1665 if (!result2.s.Equals(
"OK"))
1684 public static (
double a,
double x,
double y,
double la,
string s)
SunriseLCTL3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
1686 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
1687 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1688 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1692 return (
a,
x,
y,
la, s);
1698 public static double SunsetLCT(
double ld,
int lm,
int ly,
int ds,
int zc,
double gl,
double gp)
1700 double di = 0.8333333;
1704 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
1706 (
double a,
double x,
double y,
double la,
string s) result1 =
SunsetLCTL3710(gd, gm, gy, sr,
di, gp);
1709 if (!result1.s.Equals(
"OK"))
1724 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
1725 (
double a,
double x,
double y,
double la,
string s) result2 =
SunsetLCTL3710(gd, gm, gy, sr,
di, gp);
1727 if (!result2.s.Equals(
"OK"))
1745 public static (
double a,
double x,
double y,
double la,
string s)
SunsetLCTL3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
1747 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
1748 double x =
EcRA(
a, 0.0, 0.0, 0.0, 0.0, 0.0, gd, gm, gy);
1749 double y =
EcDec(
a, 0.0, 0.0, 0.0, 0.0, 0.0, gd, gm, gy);
1753 return (
a,
x,
y,
la, s);
1767 double d = vd.ToRadians();
1768 double e = g.ToRadians();
1769 double f = -(d.Sine() + e.Sine() * c.Sine()) / (e.Cosine() * c.Cosine());
1770 double h = (Math.Abs(
f) < 1) ?
f.ACosine() : 0;
1773 return i - 24 * (i / 24).Floor();
1787 double d = vd.ToRadians();
1788 double e = g.ToRadians();
1789 double f = -(d.Sine() + e.Sine() * c.Sine()) / (e.Cosine() * c.Cosine());
1790 double h = (Math.Abs(
f) < 1) ?
f.ACosine() : 0;
1793 return i - 24 * (i / 24).Floor();
1802 public static double RiseSetAzimuthRise(
double rah,
double ram,
double ras,
double dd,
double dm,
double ds,
double vd,
double g)
1806 double d = vd.ToRadians();
1807 double e = g.ToRadians();
1808 double f = (c.Sine() + d.Sine() * e.Sine()) / (d.Cosine() * e.Cosine());
1809 double h =
ERS(rah, ram, ras,
dd, dm, ds, vd, g).Equals(
"OK") ?
f.ACosine() : 0;
1812 return i - 360 * (i / 360).Floor();
1821 public static double RiseSetAzimuthSet(
double rah,
double ram,
double ras,
double dd,
double dm,
double ds,
double vd,
double g)
1825 double d = vd.ToRadians();
1826 double e = g.ToRadians();
1827 double f = (c.Sine() + d.Sine() * e.Sine()) / (d.Cosine() * e.Cosine());
1828 double h =
ERS(rah, ram, ras,
dd, dm, ds, vd, g).Equals(
"OK") ?
f.ACosine() : 0;
1831 return i - 360 * (i / 360).Floor();
1841 public static string ERS(
double rah,
double ram,
double ras,
double dd,
double dm,
double ds,
double vd,
double g)
1845 double d = vd.ToRadians();
1846 double e = g.ToRadians();
1847 double f = -(d.Sine() + e.Sine() * c.Sine()) / (e.Cosine() * c.Cosine());
1849 string returnValue =
"OK";
1851 returnValue =
"** never rises";
1853 returnValue =
"** circumpolar";
1862 public static string ESunRS(
double ld,
int lm,
int ly,
int ds,
int zc,
double gl,
double gp)
1864 double di = 0.8333333;
1868 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
1870 (
double a,
double x,
double y,
double la,
string s) result1 =
ESunRS_L3710(gd, gm, gy, sr,
di, gp);
1872 if (!result1.s.Equals(
"OK"))
1880 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
1881 (
double a,
double x,
double y,
double la,
string s) result2 =
ESunRS_L3710(gd, gm, gy, sr,
di, gp);
1882 if (!result2.s.Equals(
"OK"))
1892 string s = result2.s +
" GST to UT conversion warning";
1905 public static (
double a,
double x,
double y,
double la,
string s)
ESunRS_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
1907 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
1908 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1909 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1913 return (
a,
x,
y,
la, s);
1919 public static double SunriseAZ(
double ld,
int lm,
int ly,
int ds,
int zc,
double gl,
double gp)
1921 double di = 0.8333333;
1925 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
1929 if (!result1.s.Equals(
"OK"))
1942 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
1945 if (!result2.s.Equals(
"OK"))
1956 public static (
double a,
double x,
double y,
double la,
string s)
SunriseAZ_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
1958 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
1959 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1960 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
1964 return (
a,
x,
y,
la, s);
1973 public static double SunsetAZ(
double ld,
int lm,
int ly,
int ds,
int zc,
double gl,
double gp)
1975 double di = 0.8333333;
1979 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
1981 (
double a,
double x,
double y,
double la,
string s) result1 =
SunsetAZ_L3710(gd, gm, gy, sr,
di, gp);
1983 if (!result1.s.Equals(
"OK"))
1996 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
1998 (
double a,
double x,
double y,
double la,
string s) result2 =
SunsetAZ_L3710(gd, gm, gy, sr,
di, gp);
2000 if (!result2.s.Equals(
"OK"))
2010 public static (
double a,
double x,
double y,
double la,
string s)
SunsetAZ_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
2012 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
2013 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2014 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2018 return (
a,
x,
y,
la, s);
2030 double di = (double)tt;
2035 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
2039 if (!result1.s.Equals(
"OK"))
2048 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
2052 if (!result2.s.Equals(
"OK"))
2066 public static (
double a,
double x,
double y,
double la,
string s)
TwilightAMLCT_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
2068 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
2069 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2070 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2074 return (
a,
x,
y,
la, s);
2086 double di = (double)tt;
2091 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
2095 if (!result1.s.Equals(
"OK"))
2104 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
2108 if (!result2.s.Equals(
"OK"))
2120 public static (
double a,
double x,
double y,
double la,
string s)
TwilightPMLCT_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
2122 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
2123 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2124 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2128 return (
a,
x,
y,
la, s);
2141 double di = (double)tt;
2146 double sr =
SunLong(12, 0, 0, ds, zc, ld, lm, ly);
2150 if (!result1.s.Equals(
"OK"))
2157 sr =
SunLong(
ut, 0, 0, 0, 0, gd, gm, gy);
2161 if (!result2.s.Equals(
"OK"))
2170 result2.s = $
"{result2.s} GST to UT conversion warning";
2181 public static (
double a,
double x,
double y,
double la,
string s)
ETwilight_L3710(
double gd,
int gm,
int gy,
double sr,
double di,
double gp)
2183 double a = sr +
NutatLong(gd, gm, gy) - 0.005694;
2184 double x =
EcRA(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2185 double y =
EcDec(
a, 0, 0, 0, 0, 0, gd, gm, gy);
2191 if (s.Substring(0, 3).Equals(
"** c"))
2193 s =
"** lasts all night";
2197 if (s.Substring(0, 3).Equals(
"** n"))
2199 s =
"** Sun too far below horizon";
2204 return (
a,
x,
y,
la, s);
2213 public static double Angle(
double xx1,
double xm1,
double xs1,
double dd1,
double dm1,
double ds1,
double xx2,
double xm2,
double xs2,
double dd2,
double dm2,
double ds2,
PAAngleMeasure s
2217 double b =
a.ToRadians();
2219 double d = c.ToRadians();
2221 double f = e.ToRadians();
2223 double h = g.ToRadians();
2224 double i = (d.Sine() * h.Sine() + d.Cosine() * h.Cosine() * (
b -
f).Cosine()).ACosine();
2253 public static (
double planetLongitude,
double planetLatitude,
double planetDistanceAU,
double planetHLong1,
double planetHLong2,
double planetHLat,
double planetRVect)
PlanetCoordinates(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr,
string s)
2255 double a11 = 178.179078;
2256 double a12 = 415.2057519;
2257 double a13 = 0.0003011;
2259 double a21 = 75.899697;
2260 double a22 = 1.5554889;
2261 double a23 = 0.0002947;
2263 double a31 = 0.20561421;
2264 double a32 = 0.00002046;
2265 double a33 = -0.00000003;
2267 double a41 = 7.002881;
2268 double a42 = 0.0018608;
2269 double a43 = -0.0000183;
2271 double a51 = 47.145944;
2272 double a52 = 1.1852083;
2273 double a53 = 0.0001739;
2275 double a61 = 0.3870986;
2279 double b11 = 342.767053;
2280 double b12 = 162.5533664;
2281 double b13 = 0.0003097;
2283 double b21 = 130.163833;
2284 double b22 = 1.4080361;
2285 double b23 = -0.0009764;
2287 double b31 = 0.00682069;
2288 double b32 = -0.00004774;
2289 double b33 = 0.000000091;
2291 double b41 = 3.393631;
2292 double b42 = 0.0010058;
2293 double b43 = -0.000001;
2295 double b51 = 75.779647;
2296 double b52 = 0.89985;
2297 double b53 = 0.00041;
2299 double b61 = 0.7233316;
2303 double c11 = 293.737334;
2304 double c12 = 53.17137642;
2305 double c13 = 0.0003107;
2307 double c21 = 334.218203;
2308 double c22 = 1.8407584;
2309 double c23 = 0.0001299;
2310 double c24 = -0.00000119;
2311 double c31 = 0.0933129;
2312 double c32 = 0.000092064;
2313 double c33 = -0.000000077;
2315 double c41 = 1.850333;
2316 double c42 = -0.000675;
2317 double c43 = 0.0000126;
2319 double c51 = 48.786442;
2320 double c52 = 0.7709917;
2321 double c53 = -0.0000014;
2322 double c54 = -0.00000533;
2323 double c61 = 1.5236883;
2327 double d11 = 238.049257;
2328 double d12 = 8.434172183;
2329 double d13 = 0.0003347;
2330 double d14 = -0.00000165;
2331 double d21 = 12.720972;
2332 double d22 = 1.6099617;
2333 double d23 = 0.00105627;
2334 double d24 = -0.00000343;
2335 double d31 = 0.04833475;
2336 double d32 = 0.00016418;
2337 double d33 = -0.0000004676;
2338 double d34 = -0.0000000017;
2339 double d41 = 1.308736;
2340 double d42 = -0.0056961;
2341 double d43 = 0.0000039;
2343 double d51 = 99.443414;
2344 double d52 = 1.01053;
2345 double d53 = 0.00035222;
2346 double d54 = -0.00000851;
2347 double d61 = 5.202561;
2348 double d62 = 196.74;
2351 double e11 = 266.564377;
2352 double e12 = 3.398638567;
2353 double e13 = 0.0003245;
2354 double e14 = -0.0000058;
2355 double e21 = 91.098214;
2356 double e22 = 1.9584158;
2357 double e23 = 0.00082636;
2358 double e24 = 0.00000461;
2359 double e31 = 0.05589232;
2360 double e32 = -0.0003455;
2361 double e33 = -0.000000728;
2362 double e34 = 0.00000000074;
2363 double e41 = 2.492519;
2364 double e42 = -0.0039189;
2365 double e43 = -0.00001549;
2366 double e44 = 0.00000004;
2367 double e51 = 112.790414;
2368 double e52 = 0.8731951;
2369 double e53 = -0.00015218;
2370 double e54 = -0.00000531;
2371 double e61 = 9.554747;
2375 double f11 = 244.19747;
2376 double f12 = 1.194065406;
2377 double f13 = 0.000316;
2378 double f14 = -0.0000006;
2379 double f21 = 171.548692;
2380 double f22 = 1.4844328;
2381 double f23 = 0.0002372;
2382 double f24 = -0.00000061;
2383 double f31 = 0.0463444;
2384 double f32a = -0.00002658;
2385 double f33 = 0.000000077;
2387 double f41 = 0.772464;
2388 double f42 = 0.0006253;
2389 double f43 = 0.0000395;
2391 double f51 = 73.477111;
2392 double f52 = 0.4986678;
2393 double f53 = 0.0013117;
2395 double f61 = 19.21814;
2399 double g11 = 84.457994;
2400 double g12 = 0.6107942056;
2401 double g13 = 0.0003205;
2402 double g14 = -0.0000006;
2403 double g21 = 46.727364;
2404 double g22 = 1.4245744;
2405 double g23 = 0.00039082;
2406 double g24 = -0.000000605;
2407 double g31 = 0.00899704;
2408 double g32 = 0.00000633;
2409 double g33 = -0.000000002;
2411 double g41 = 1.779242;
2412 double g42 = -0.0095436;
2413 double g43 = -0.0000091;
2415 double g51 = 130.681389;
2416 double g52 = 1.098935;
2417 double g53 = 0.00024987;
2418 double g54 = -0.000004718;
2419 double g61 = 30.10957;
2423 List<PlanetDataPrecise> pl =
new List<PlanetDataPrecise>();
2425 pl.Add(
new PlanetDataPrecise() { Name =
"", Value1 = 0, Value2 = 0, Value3 = 0, Value4 = 0, Value5 = 0, Value6 = 0, Value7 = 0, Value8 = 0, Value9 = 0 });
2433 double t = ((
a - 2415020.0) / 36525.0) + (
b / 876600.0);
2459 b = 360.0 * (aa - aa.Floor());
2460 double c = a0 +
b + (a3 * t + a2) * t * t;
2465 Value1 = c - 360.0 * (c / 360.0).Floor(),
2466 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2467 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2468 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2469 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2470 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2500 b = 360.0 * (aa - aa.Floor());
2501 c = a0 +
b + (a3 * t + a2) * t * t;
2506 Value1 = c - 360.0 * (c / 360.0).Floor(),
2507 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2508 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2509 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2510 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2511 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2542 b = 360.0 * (aa - aa.Floor());
2543 c = a0 +
b + (a3 * t + a2) * t * t;
2548 Value1 = c - 360.0 * (c / 360.0).Floor(),
2549 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2550 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2551 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2552 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2553 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2584 b = 360.0 * (aa - aa.Floor());
2585 c = a0 +
b + (a3 * t + a2) * t * t;
2590 Value1 = c - 360.0 * (c / 360.0).Floor(),
2591 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2592 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2593 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2594 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2595 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2626 b = 360.0 * (aa - aa.Floor());
2627 c = a0 +
b + (a3 * t + a2) * t * t;
2632 Value1 = c - 360.0 * (c / 360.0).Floor(),
2633 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2634 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2635 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2636 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2637 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2668 b = 360.0 * (aa - aa.Floor());
2669 c = a0 +
b + (a3 * t + a2) * t * t;
2674 Value1 = c - 360.0 * (c / 360.0).Floor(),
2675 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2676 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2677 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2678 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2679 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2710 b = 360.0 * (aa - aa.Floor());
2711 c = a0 +
b + (a3 * t + a2) * t * t;
2716 Value1 = c - 360.0 * (c / 360.0).Floor(),
2717 Value2 = (a1 * 0.009856263) + (a2 + a3) / 36525.0,
2718 Value3 = ((b3 * t + b2) * t +
b1) * t + b0,
2719 Value4 = ((c3 * t + c2) * t + c1) * t + c0,
2720 Value5 = ((d3 * t + d2) * t + d1) * t + d0,
2721 Value6 = ((e3 * t + e2) * t +
e1) * t + e0,
2727 PlanetDataPrecise checkPlanet = pl.Where(
x =>
x.Name.ToLower() == s.ToLower()).Select(
x =>
x).FirstOrDefault();
2728 if (checkPlanet ==
null)
2733 double sr =
SunLong(lh, lm, ls, ds, zc, dy, mn, yr).ToRadians();
2734 double re =
SunDist(lh, lm, ls, ds, zc, dy, mn, yr);
2735 double lg = sr + Math.PI;
2748 for (
int k = 1; k <= 3; k++)
2751 planet.APValue = (planet.Value1 - planet.Value3 - li * planet.
Value2).ToRadians();
2771 qc = returnValue.qc;
2772 qe = returnValue.qe;
2773 qa = returnValue.qa;
2774 qb = returnValue.qb;
2777 PlanetDataPrecise matchPlanet = pl.Where(
x =>
x.Name.ToLower() == s.ToLower()).Select(
x =>
x).FirstOrDefault();
2779 if (
new string[] {
"Jupiter",
"Saturn",
"Uranus",
"Neptune" }.Contains(s))
2782 double ec = matchPlanet.Value4 +
qd;
2783 double am = matchPlanet.APValue +
qe;
2785 double pvv = (matchPlanet.Value7 +
qf) * (1.0 - ec * ec) / (1.0 + ec * at.Cosine());
2787 lp = lp.ToRadians();
2788 double om = matchPlanet.
Value6.ToRadians();
2789 double lo = lp - om;
2790 double so = lo.Sine();
2791 double co = lo.Cosine();
2792 double inn = matchPlanet.
Value5.ToRadians();
2794 sp = so * inn.Sine();
2795 double y = so * inn.Cosine();
2796 double ps = sp.ASine() + qg;
2798 pd =
y.AngleTangent2(co) + om +
qa.ToRadians();
2803 double rh = re * re + pvv * pvv - 2.0 * re * pvv * ci * ll.Cosine();
2804 rh = rh.SquareRoot();
2805 li = rh * 0.005775518;
2817 double l1 = ll.Sine();
2818 double l2 = ll.Cosine();
2820 double ep = (ip < 3) ? (-1.0 * rd * l1 / (re - rd * l2)).AngleTangent() + lg + Math.PI : (re * l1 / (rd - re * l2)).AngleTangent() + pd;
2823 double bp = (rd * sp * (ep - pd).Sine() / (ci * re * l1)).AngleTangent();
2831 double planetRVect = p0;
2841 double qa = 0.00204 * (5.0 * pl[2].APValue - 2.0 * pl[1].APValue + 0.21328).Cosine();
2842 qa += 0.00103 * (2.0 * pl[2].APValue - pl[1].APValue - 2.8046).Cosine();
2843 qa += 0.00091 * (2.0 * pl[4].APValue - pl[1].APValue - 0.64582).Cosine();
2844 qa += 0.00078 * (5.0 * pl[2].APValue - 3.0 * pl[1].APValue + 0.17692).Cosine();
2846 double qb = 0.000007525 * (2.0 * pl[4].APValue - pl[1].APValue + 0.925251).Cosine();
2847 qb += 0.000006802 * (5.0 * pl[2].APValue - 3.0 * pl[1].APValue - 4.53642).Cosine();
2848 qb += 0.000005457 * (2.0 * pl[2].APValue - 2.0 * pl[1].APValue - 1.24246).Cosine();
2849 qb += 0.000003569 * (5.0 * pl[2].APValue - pl[1].APValue - 1.35699).Cosine();
2859 double qc = 0.00077 * (4.1406 + t * 2.6227).Sine();
2860 qc =
qc.ToRadians();
2863 double qa = 0.00313 * (2.0 * ms - 2.0 * pl[2].APValue - 2.587).Cosine();
2864 qa += 0.00198 * (3.0 * ms - 3.0 * pl[2].APValue + 0.044768).Cosine();
2865 qa += 0.00136 * (ms - pl[2].APValue - 2.0788).Cosine();
2866 qa += 0.00096 * (3.0 * ms - 2.0 * pl[2].APValue - 2.3721).Cosine();
2867 qa += 0.00082 * (pl[4].APValue - pl[2].APValue - 3.6318).Cosine();
2869 double qb = 0.000022501 * (2.0 * ms - 2.0 * pl[2].APValue - 1.01592).Cosine();
2870 qb += 0.000019045 * (3.0 * ms - 3.0 * pl[2].APValue + 1.61577).Cosine();
2871 qb += 0.000006887 * (pl[4].APValue - pl[2].APValue - 2.06106).Cosine();
2872 qb += 0.000005172 * (ms - pl[2].APValue - 0.508065).Cosine();
2873 qb += 0.00000362 * (5.0 * ms - 4.0 * pl[2].APValue - 1.81877).Cosine();
2874 qb += 0.000003283 * (4.0 * ms - 4.0 * pl[2].APValue + 1.10851).Cosine();
2875 qb += 0.000003074 * (2.0 * pl[4].APValue - 2.0 * pl[2].APValue - 0.962846).Cosine();
2885 double a = 3.0 * pl[4].APValue - 8.0 * pl[3].APValue + 4.0 * ms;
2886 double sa =
a.Sine();
2887 double ca =
a.Cosine();
2888 double qc = -(0.01133 *
sa + 0.00933 *
ca);
2889 qc =
qc.ToRadians();
2892 double qa = 0.00705 * (pl[4].APValue - pl[3].APValue - 0.85448).Cosine();
2893 qa += 0.00607 * (2.0 * pl[4].APValue - pl[3].APValue - 3.2873).Cosine();
2894 qa += 0.00445 * (2.0 * pl[4].APValue - 2.0 * pl[3].APValue - 3.3492).Cosine();
2895 qa += 0.00388 * (ms - 2.0 * pl[3].APValue + 0.35771).Cosine();
2896 qa += 0.00238 * (ms - pl[3].APValue + 0.61256).Cosine();
2897 qa += 0.00204 * (2.0 * ms - 3.0 * pl[3].APValue + 2.7688).Cosine();
2898 qa += 0.00177 * (3.0 * pl[3].APValue - pl[2].APValue - 1.0053).Cosine();
2899 qa += 0.00136 * (2.0 * ms - 4.0 * pl[3].APValue + 2.6894).Cosine();
2900 qa += 0.00104 * (pl[4].APValue + 0.30749).Cosine();
2902 double qb = 0.000053227 * (pl[4].APValue - pl[3].APValue + 0.717864).Cosine();
2903 qb += 0.000050989 * (2.0 * pl[4].APValue - 2.0 * pl[3].APValue - 1.77997).Cosine();
2904 qb += 0.000038278 * (2.0 * pl[4].APValue - pl[3].APValue - 1.71617).Cosine();
2905 qb += 0.000015996 * (ms - pl[3].APValue - 0.969618).Cosine();
2906 qb += 0.000014764 * (2.0 * ms - 3.0 * pl[3].APValue + 1.19768).Cosine();
2907 qb += 0.000008966 * (pl[4].APValue - 2.0 * pl[3].APValue + 0.761225).Cosine();
2908 qb += 0.000007914 * (3.0 * pl[4].APValue - 2.0 * pl[3].APValue - 2.43887).Cosine();
2909 qb += 0.000007004 * (2.0 * pl[4].APValue - 3.0 * pl[3].APValue - 1.79573).Cosine();
2910 qb += 0.00000662 * (ms - 2.0 * pl[3].APValue + 1.97575).Cosine();
2911 qb += 0.00000493 * (3.0 * pl[4].APValue - 3.0 * pl[3].APValue - 1.33069).Cosine();
2912 qb += 0.000004693 * (3.0 * ms - 5.0 * pl[3].APValue + 3.32665).Cosine();
2913 qb += 0.000004571 * (2.0 * ms - 4.0 * pl[3].APValue + 4.27086).Cosine();
2914 qb += 0.000004409 * (3.0 * pl[4].APValue - pl[3].APValue - 2.02158).Cosine();
2936 double j1 = t / 5.0 + 0.1;
2937 double j2 =
Unwind(4.14473 + 52.9691 * t);
2938 double j3 =
Unwind(4.641118 + 21.32991 * t);
2939 double j4 =
Unwind(4.250177 + 7.478172 * t);
2940 double j5 = 5.0 * j3 - 2.0 * j2;
2941 double j6 = 2.0 * j2 - 6.0 * j3 + 3.0 * j4;
2943 if (
new string[] {
"Mercury",
"Venus",
"Mars" }.Contains(planet.
Name))
2946 if (
new string[] {
"Jupiter",
"Saturn" }.Contains(planet.
Name))
2948 double j7 = j3 - j2;
2949 double u1 = j3.Sine();
2950 double u2 = j3.Cosine();
2951 double u3 = (2.0 * j3).Sine();
2952 double u4 = (2.0 * j3).Cosine();
2953 double u5 = j5.Sine();
2954 double u6 = j5.Cosine();
2955 double u7 = (2.0 * j5).Sine();
2956 double u8a = j6.Sine();
2957 double u9 = j7.Sine();
2958 double ua = j7.Cosine();
2959 double ub = (2.0 * j7).Sine();
2960 double uc = (2.0 * j7).Cosine();
2961 double ud = (3.0 * j7).Sine();
2962 double ue = (3.0 * j7).Cosine();
2963 double uf = (4.0 * j7).Sine();
2964 double ug = (4.0 * j7).Cosine();
2965 double vh = (5.0 * j7).Cosine();
2967 if (planet.
Name ==
"Saturn")
2969 double ui = (3.0 * j3).Sine();
2970 double uj = (3.0 * j3).Cosine();
2971 double uk = (4.0 * j3).Sine();
2972 double ul = (4.0 * j3).Cosine();
2973 double vi = (2.0 * j5).Cosine();
2974 double un = (5.0 * j7).Sine();
2975 double j8 = j4 - j3;
2976 double uo = (2.0 * j8).Sine();
2977 double up = (2.0 * j8).Cosine();
2978 double uq = (3.0 * j8).Sine();
2979 double ur = (3.0 * j8).Cosine();
2981 qc = 0.007581 * u7 - 0.007986 * u8a - 0.148811 * u9;
2982 qc -= (0.814181 - (0.01815 - 0.016714 * j1) * j1) * u5;
2983 qc -= (0.010497 - (0.160906 - 0.0041 * j1) * j1) * u6;
2984 qc =
qc - 0.015208 * ud - 0.006339 * uf - 0.006244 * u1;
2985 qc =
qc - 0.0165 * ub * u1 - 0.040786 * ub;
2986 qc =
qc + (0.008931 + 0.002728 * j1) * u9 * u1 - 0.005775 * ud * u1;
2987 qc =
qc + (0.081344 + 0.003206 * j1) * ua * u1 + 0.015019 * uc * u1;
2988 qc =
qc + (0.085581 + 0.002494 * j1) * u9 * u2 + 0.014394 * uc * u2;
2989 qc =
qc + (0.025328 - 0.003117 * j1) * ua * u2 + 0.006319 * ue * u2;
2990 qc =
qc + 0.006369 * u9 * u3 + 0.009156 * ub * u3 + 0.007525 * uq * u3;
2991 qc =
qc - 0.005236 * ua * u4 - 0.007736 * uc * u4 - 0.007528 * ur * u4;
2992 qc =
qc.ToRadians();
2994 qd = (-7927.0 + (2548.0 + 91.0 * j1) * j1) * u5;
2995 qd =
qd + (13381.0 + (1226.0 - 253.0 * j1) * j1) * u6 + (248.0 - 121.0 * j1) * u7;
2996 qd =
qd - (305.0 + 91.0 * j1) * vi + 412.0 * ub + 12415.0 * u1;
2997 qd =
qd + (390.0 - 617.0 * j1) * u9 * u1 + (165.0 - 204.0 * j1) * ub * u1;
2998 qd =
qd + 26599.0 * ua * u1 - 4687.0 * uc * u1 - 1870.0 * ue * u1 - 821.0 * ug * u1;
2999 qd =
qd - 377.0 * vh * u1 + 497.0 * up * u1 + (163.0 - 611.0 * j1) * u2;
3000 qd =
qd - 12696.0 * u9 * u2 - 4200.0 * ub * u2 - 1503.0 * ud * u2 - 619.0 * uf * u2;
3001 qd =
qd - 268.0 * un * u2 - (282.0 + 1306.0 * j1) * ua * u2;
3002 qd =
qd + (-86.0 + 230.0 * j1) * uc * u2 + 461.0 * uo * u2 - 350.0 * u3;
3003 qd =
qd + (2211.0 - 286.0 * j1) * u9 * u3 - 2208.0 * ub * u3 - 568.0 * ud * u3;
3004 qd =
qd - 346.0 * uf * u3 - (2780.0 + 222.0 * j1) * ua * u3;
3005 qd =
qd + (2022.0 + 263.0 * j1) * uc * u3 + 248.0 * ue * u3 + 242.0 * uq * u3;
3006 qd =
qd + 467.0 * ur * u3 - 490.0 * u4 - (2842.0 + 279.0 * j1) * u9 * u4;
3007 qd =
qd + (128.0 + 226.0 * j1) * ub * u4 + 224.0 * ud * u4;
3008 qd =
qd + (-1594.0 + 282.0 * j1) * ua * u4 + (2162.0 - 207.0 * j1) * uc * u4;
3009 qd =
qd + 561.0 * ue * u4 + 343.0 * ug * u4 + 469.0 * uq * u4 - 242.0 * ur * u4;
3010 qd =
qd - 205.0 * u9 * ui + 262.0 * ud * ui + 208.0 * ua * uj - 271.0 * ue * uj;
3011 qd =
qd - 382.0 * ue * uk - 376.0 * ud * ul;
3014 vk = (0.077108 + (0.007186 - 0.001533 * j1) * j1) * u5;
3015 vk -= 0.007075 * u9;
3016 vk += (0.045803 - (0.014766 + 0.000536 * j1) * j1) * u6;
3017 vk = vk - 0.072586 * u2 - 0.075825 * u9 * u1 - 0.024839 * ub * u1;
3018 vk = vk - 0.008631 * ud * u1 - 0.150383 * ua * u2;
3019 vk = vk + 0.026897 * uc * u2 + 0.010053 * ue * u2;
3020 vk = vk - (0.013597 + 0.001719 * j1) * u9 * u3 + 0.011981 * ub * u4;
3021 vk -= (0.007742 - 0.001517 * j1) * ua * u3;
3022 vk += (0.013586 - 0.001375 * j1) * uc * u3;
3023 vk -= (0.013667 - 0.001239 * j1) * u9 * u4;
3024 vk += (0.014861 + 0.001136 * j1) * ua * u4;
3025 vk -= (0.013064 + 0.001628 * j1) * uc * u4;
3028 qf = 572.0 * u5 - 1590.0 * ub * u2 + 2933.0 * u6 - 647.0 * ud * u2;
3029 qf =
qf + 33629.0 * ua - 344.0 * uf * u2 - 3081.0 * uc + 2885.0 * ua * u2;
3030 qf =
qf - 1423.0 * ue + (2172.0 + 102.0 * j1) * uc * u2 - 671.0 * ug;
3031 qf =
qf + 296.0 * ue * u2 - 320.0 * vh - 267.0 * ub * u3 + 1098.0 * u1;
3032 qf =
qf - 778.0 * ua * u3 - 2812.0 * u9 * u1 + 495.0 * uc * u3 + 688.0 * ub * u1;
3033 qf =
qf + 250.0 * ue * u3 - 393.0 * ud * u1 - 856.0 * u9 * u4 - 228.0 * uf * u1;
3034 qf =
qf + 441.0 * ub * u4 + 2138.0 * ua * u1 + 296.0 * uc * u4 - 999.0 * uc * u1;
3035 qf =
qf + 211.0 * ue * u4 - 642.0 * ue * u1 - 427.0 * u9 * ui - 325.0 * ug * u1;
3036 qf =
qf + 398.0 * ud * ui - 890.0 * u2 + 344.0 * ua * uj + 2206.0 * u9 * u2;
3037 qf -= 427.0 * ue * uj;
3040 qg = 0.000747 * ua * u1 + 0.001069 * ua * u2 + 0.002108 * ub * u3;
3041 qg = qg + 0.001261 * uc * u3 + 0.001236 * ub * u4 - 0.002075 * uc * u4;
3042 qg = qg.ToRadians();
3047 qc = (0.331364 - (0.010281 + 0.004692 * j1) * j1) * u5;
3048 qc += (0.003228 - (0.064436 - 0.002075 * j1) * j1) * u6;
3049 qc -= (0.003083 + (0.000275 - 0.000489 * j1) * j1) * u7;
3050 qc =
qc + 0.002472 * u8a + 0.013619 * u9 + 0.018472 * ub;
3051 qc =
qc + 0.006717 * ud + 0.002775 * uf + 0.006417 * ub * u1;
3052 qc =
qc + (0.007275 - 0.001253 * j1) * u9 * u1 + 0.002439 * ud * u1;
3053 qc =
qc - (0.035681 + 0.001208 * j1) * u9 * u2 - 0.003767 * uc * u1;
3054 qc =
qc - (0.033839 + 0.001125 * j1) * ua * u1 - 0.004261 * ub * u2;
3055 qc =
qc + (0.001161 * j1 - 0.006333) * ua * u2 + 0.002178 * u2;
3056 qc =
qc - 0.006675 * uc * u2 - 0.002664 * ue * u2 - 0.002572 * u9 * u3;
3057 qc =
qc - 0.003567 * ub * u3 + 0.002094 * ua * u4 + 0.003342 * uc * u4;
3058 qc =
qc.ToRadians();
3060 qd = (3606.0 + (130.0 - 43.0 * j1) * j1) * u5 + (1289.0 - 580.0 * j1) * u6;
3061 qd =
qd - 6764.0 * u9 * u1 - 1110.0 * ub * u1 - 224.0 * ud * u1 - 204.0 * u1;
3062 qd =
qd + (1284.0 + 116.0 * j1) * ua * u1 + 188.0 * uc * u1;
3063 qd =
qd + (1460.0 + 130.0 * j1) * u9 * u2 + 224.0 * ub * u2 - 817.0 * u2;
3064 qd =
qd + 6074.0 * u2 * ua + 992.0 * uc * u2 + 508.0 * ue * u2 + 230.0 * ug * u2;
3065 qd =
qd + 108.0 * vh * u2 - (956.0 + 73.0 * j1) * u9 * u3 + 448.0 * ub * u3;
3066 qd =
qd + 137.0 * ud * u3 + (108.0 * j1 - 997.0) * ua * u3 + 480.0 * uc * u3;
3067 qd =
qd + 148.0 * ue * u3 + (99.0 * j1 - 956.0) * u9 * u4 + 490.0 * ub * u4;
3068 qd =
qd + 158.0 * ud * u4 + 179.0 * u4 + (1024.0 + 75.0 * j1) * ua * u4;
3069 qd =
qd - 437.0 * uc * u4 - 132.0 * ue * u4;
3072 vk = (0.007192 - 0.003147 * j1) * u5 - 0.004344 * u1;
3073 vk += (j1 * (0.000197 * j1 - 0.000675) - 0.020428) * u6;
3074 vk = vk + 0.034036 * ua * u1 + (0.007269 + 0.000672 * j1) * u9 * u1;
3075 vk = vk + 0.005614 * uc * u1 + 0.002964 * ue * u1 + 0.037761 * u9 * u2;
3076 vk = vk + 0.006158 * ub * u2 - 0.006603 * ua * u2 - 0.005356 * u9 * u3;
3077 vk = vk + 0.002722 * ub * u3 + 0.004483 * ua * u3;
3078 vk = vk - 0.002642 * uc * u3 + 0.004403 * u9 * u4;
3079 vk = vk - 0.002536 * ub * u4 + 0.005547 * ua * u4 - 0.002689 * uc * u4;
3082 qf = 205.0 * ua - 263.0 * u6 + 693.0 * uc + 312.0 * ue + 147.0 * ug + 299.0 * u9 * u1;
3083 qf =
qf + 181.0 * uc * u1 + 204.0 * ub * u2 + 111.0 * ud * u2 - 337.0 * ua * u2;
3084 qf -= 111.0 * uc * u2;
3090 if (
new string[] {
"Uranus",
"Neptune" }.Contains(planet.
Name))
3092 double j8 =
Unwind(1.46205 + 3.81337 * t);
3093 double j9 = 2.0 * j8 - j4;
3094 double vj = j9.Sine();
3095 double uu = j9.Cosine();
3096 double uv = (2.0 * j9).Sine();
3097 double uw = (2.0 * j9).Cosine();
3099 if (planet.
Name ==
"Neptune")
3104 qc = (0.001089 * j1 - 0.589833) * vj;
3105 qc =
qc + (0.004658 * j1 - 0.056094) * uu - 0.024286 * uv;
3106 qc =
qc.ToRadians();
3108 vk = 0.024039 * vj - 0.025303 * uu + 0.006206 * uv;
3109 vk -= 0.005992 * uw;
3112 qd = 4389.0 * vj + 1129.0 * uv + 4262.0 * uu + 1089.0 * uw;
3115 qf = 8189.0 * uu - 817.0 * vj + 781.0 * uw;
3118 double vd = (2.0 * jc).Sine();
3119 double ve = (2.0 * jc).Cosine();
3120 double vf = j8.Sine();
3121 double vg = j8.Cosine();
3122 qa = -0.009556 * ja.Sine() - 0.005178 * jb.Sine();
3123 qa =
qa + 0.002572 * vd - 0.002972 * ve * vf - 0.002833 * vd * vg;
3125 qg = 0.000336 * ve * vf + 0.000364 * vd * vg;
3126 qg = qg.ToRadians();
3128 qb = -40596.0 + 4992.0 * ja.Cosine() + 2744.0 * jb.Cosine();
3129 qb =
qb + 2044.0 * jc.Cosine() + 1051.0 * ve;
3138 qc = (0.864319 - 0.001583 * j1) * vj;
3139 qc =
qc + (0.082222 - 0.006833 * j1) * uu + 0.036017 * uv;
3140 qc =
qc - 0.003019 * uw + 0.008122 * j6.Sine();
3141 qc =
qc.ToRadians();
3143 vk = 0.120303 * vj + 0.006197 * uv;
3144 vk += (0.019472 - 0.000947 * j1) * uu;
3147 qd = (163.0 * j1 - 3349.0) * vj + 20981.0 * uu + 1311.0 * uw;
3150 qf = -0.003825 * uu;
3152 qa = (-0.038581 + (0.002031 - 0.00191 * j1) * j1) * (j4 + jb).Cosine();
3153 qa += (0.010122 - 0.000988 * j1) * (j4 + jb).Sine();
3154 double a = (0.034964 - (0.001038 - 0.000868 * j1) * j1) * (2.0 * j4 + jb).Cosine();
3155 qa =
a +
qa + 0.005594 * (j4 + 3.0 * jc).Sine() - 0.014808 * ja.Sine();
3156 qa =
qa - 0.005794 * jb.Sine() + 0.002347 * jb.Cosine();
3157 qa =
qa + 0.009872 * jc.Sine() + 0.008803 * (2.0 * jc).Sine();
3158 qa -= 0.004308 * (3.0 * jc).Sine();
3160 double ux = jb.Sine();
3161 double uy = jb.Cosine();
3162 double uz = j4.Sine();
3163 double va = j4.Cosine();
3164 double vb = (2.0 * j4).Sine();
3165 double vc = (2.0 * j4).Cosine();
3166 qg = (0.000458 * ux - 0.000642 * uy - 0.000517 * (4.0 * jc).Cosine()) * uz;
3167 qg -= (0.000347 * ux + 0.000853 * uy + 0.000517 * (4.0 * jb).Sine()) * va;
3168 qg += 0.000403 * ((2.0 * jc).Cosine() * vb + (2.0 * jc).Sine() * vc);
3169 qg = qg.ToRadians();
3171 qb = -25948.0 + 4985.0 * ja.Cosine() - 1230.0 * va + 3354.0 * uy;
3172 qb =
qb + 904.0 * (2.0 * jc).Cosine() + 894.0 * (jc.Cosine() - (3.0 * jc).Cosine());
3173 qb += (5795.0 * va - 1165.0 * uz + 1388.0 * vc) * ux;
3174 qb += (1351.0 * va + 5702.0 * uz + 1388.0 * vb) * uy;
3196 double d = (s2 + 3.0) * s - w;
3198 if (Math.Abs(d) < 0.000001)
3203 s = ((2.0 * s * s2) + w) / (3.0 * (s2 + 1.0));
3233 public static (
double cometLongDeg,
double cometLatDeg,
double cometDistAU)
PCometLongLatDist(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr,
double td,
int tm,
int ty,
double q,
double i,
double p,
double n)
3240 double lg = (
SunLong(lh, lm, ls, ds, zc, dy, mn, yr) + 180.0).ToRadians();
3241 double re =
SunDist(lh, lm, ls, ds, zc, dy, mn, yr);
3251 for (
int k = 1; k < 3; k++)
3253 double s =
SolveCubic(0.0364911624 * tpe / (
q *
q.SquareRoot()));
3254 double nu = 2.0 * s.AngleTangent();
3255 double r =
q * (1.0 + s * s);
3256 double l = nu +
p.ToRadians();
3257 double s1 = l.Sine();
3258 double c1 = l.Cosine();
3259 double i1 = i.ToRadians();
3260 s2 = s1 * i1.Sine();
3261 double ps = s2.ASine();
3262 double y = s1 * i1.Cosine();
3263 lc =
y.AngleTangent2(c1) + n.ToRadians();
3266 double ll = lc - lg;
3269 double rh = ((re * re) + (r * r) - (2.0 * re * rd * c3 * ps.Cosine())).SquareRoot();
3272 rh2 = ((re * re) + (r * r) - (2.0 * re * r * ps.Cosine() * (l + n.ToRadians() - lg).Cosine())).SquareRoot();
3278 ep = (rd < re) ? (-rd * s3 / (re - (rd * c3))).AngleTangent() + lg + 3.141592654 : (re * s3 / (rd - (re * c3))).AngleTangent() + lc;
3281 double tb = rd * s2 * (ep - lc).Sine() / (c2 * re * s3);
3282 double bp = tb.AngleTangent();
3286 double cometDistAU = rh2;
3319 double m1 = 27.32158213;
3320 double m2 = 365.2596407;
3321 double m3 = 27.55455094;
3322 double m4 = 29.53058868;
3323 double m5 = 27.21222039;
3324 double m6 = 6798.363307;
3332 m1 = 360.0 * (m1 - m1.Floor());
3333 m2 = 360.0 * (m2 - m2.Floor());
3334 m3 = 360.0 * (m3 - m3.Floor());
3335 m4 = 360.0 * (m4 - m4.Floor());
3336 m5 = 360.0 * (m5 - m5.Floor());
3337 m6 = 360.0 * (m6 - m6.Floor());
3339 double ml = 270.434164 + m1 - (0.001133 - 0.0000019 * t) * t2;
3340 double ms = 358.475833 + m2 - (0.00015 + 0.0000033 * t) * t2;
3341 double md = 296.104608 + m3 + (0.009192 + 0.0000144 * t) * t2;
3342 double me1 = 350.737486 + m4 - (0.001436 - 0.0000019 * t) * t2;
3343 double mf = 11.250889 + m5 - (0.003211 + 0.0000003 * t) * t2;
3344 double na = 259.183275 - m6 + (0.002078 + 0.0000022 * t) * t2;
3345 double a = (51.2 + 20.2 * t).ToRadians();
3346 double s1 =
a.Sine();
3347 double s2 = na.ToRadians().Sine();
3348 double b = 346.56 + (132.87 - 0.0091731 * t) * t;
3349 double s3 = 0.003964 *
b.ToRadians().Sine();
3350 double c = (na + 275.05 - 2.3 * t).ToRadians();
3351 double s4 = c.Sine();
3352 ml = ml + 0.000233 * s1 + s3 + 0.001964 * s2;
3353 ms -= 0.001778 * s1;
3354 md = md + 0.000817 * s1 + s3 + 0.002541 * s2;
3355 mf = mf + s3 - 0.024691 * s2 - 0.004328 * s4;
3356 me1 = me1 + 0.002011 * s1 + s3 + 0.001964 * s2;
3357 double e = 1.0 - (0.002495 + 0.00000752 * t) * t;
3359 ml = ml.ToRadians();
3360 ms = ms.ToRadians();
3361 na = na.ToRadians();
3362 me1 = me1.ToRadians();
3363 mf = mf.ToRadians();
3364 md = md.ToRadians();
3367 double l = 6.28875 * md.Sine() + 1.274018 * (2.0 * me1 - md).Sine();
3368 l = l + 0.658309 * (2.0 * me1).Sine() + 0.213616 * (2.0 * md).Sine();
3369 l = l - e * 0.185596 * ms.Sine() - 0.114336 * (2.0 * mf).Sine();
3370 l += 0.058793 * (2.0 * (me1 - md)).Sine();
3371 l = l + 0.057212 * e * (2.0 * me1 - ms - md).Sine() + 0.05332 * (2.0 * me1 + md).Sine();
3372 l = l + 0.045874 * e * (2.0 * me1 - ms).Sine() + 0.041024 * e * (md - ms).Sine();
3373 l = l - 0.034718 * me1.Sine() - e * 0.030465 * (ms + md).Sine();
3374 l = l + 0.015326 * (2.0 * (me1 - mf)).Sine() - 0.012528 * (2.0 * mf + md).Sine();
3375 l = l - 0.01098 * (2.0 * mf - md).Sine() + 0.010674 * (4.0 * me1 - md).Sine();
3376 l = l + 0.010034 * (3.0 * md).Sine() + 0.008548 * (4.0 * me1 - 2.0 * md).Sine();
3377 l = l - e * 0.00791 * (ms - md + 2.0 * me1).Sine() - e * 0.006783 * (2.0 * me1 + ms).Sine();
3378 l = l + 0.005162 * (md - me1).Sine() + e * 0.005 * (ms + me1).Sine();
3379 l = l + 0.003862 * (4.0 * me1).Sine() + e * 0.004049 * (md - ms + 2.0 * me1).Sine();
3380 l = l + 0.003996 * (2.0 * (md + me1)).Sine() + 0.003665 * (2.0 * me1 - 3.0 * md).Sine();
3381 l = l + e * 0.002695 * (2.0 * md - ms).Sine() + 0.002602 * (md - 2.0 * (mf + me1)).Sine();
3382 l = l + e * 0.002396 * (2.0 * (me1 - md) - ms).Sine() - 0.002349 * (md + me1).Sine();
3383 l = l + e2 * 0.002249 * (2.0 * (me1 - ms)).Sine() - e * 0.002125 * (2.0 * md + ms).Sine();
3384 l = l - e2 * 0.002079 * (2.0 * ms).Sine() + e2 * 0.002059 * (2.0 * (me1 - ms) - md).Sine();
3385 l = l - 0.001773 * (md + 2.0 * (me1 - mf)).Sine() - 0.001595 * (2.0 * (mf + me1)).Sine();
3386 l = l + e * 0.00122 * (4.0 * me1 - ms - md).Sine() - 0.00111 * (2.0 * (md + mf)).Sine();
3387 l = l + 0.000892 * (md - 3.0 * me1).Sine() - e * 0.000811 * (ms + md + 2.0 * me1).Sine();
3388 l += e * 0.000761 * (4.0 * me1 - ms - 2.0 * md).Sine();
3389 l += e2 * 0.000704 * (md - 2.0 * (ms + me1)).Sine();
3390 l += e * 0.000693 * (ms - 2.0 * (md - me1)).Sine();
3391 l += e * 0.000598 * (2.0 * (me1 - mf) - ms).Sine();
3392 l = l + 0.00055 * (md + 4.0 * me1).Sine() + 0.000538 * (4.0 * md).Sine();
3393 l = l + e * 0.000521 * (4.0 * me1 - ms).Sine() + 0.000486 * (2.0 * md - me1).Sine();
3394 l += e2 * 0.000717 * (md - 2.0 * ms).Sine();
3395 double mm =
Unwind(ml + l.ToRadians());
3398 double g = 5.128189 * mf.Sine() + 0.280606 * (md + mf).Sine();
3399 g = g + 0.277693 * (md - mf).Sine() + 0.173238 * (2.0 * me1 - mf).Sine();
3400 g = g + 0.055413 * (2.0 * me1 + mf - md).Sine() + 0.046272 * (2.0 * me1 - mf - md).Sine();
3401 g = g + 0.032573 * (2.0 * me1 + mf).Sine() + 0.017198 * (2.0 * md + mf).Sine();
3402 g = g + 0.009267 * (2.0 * me1 + md - mf).Sine() + 0.008823 * (2.0 * md - mf).Sine();
3403 g = g + e * 0.008247 * (2.0 * me1 - ms - mf).Sine() + 0.004323 * (2.0 * (me1 - md) - mf).Sine();
3404 g = g + 0.0042 * (2.0 * me1 + mf + md).Sine() + e * 0.003372 * (mf - ms - 2.0 * me1).Sine();
3405 g += e * 0.002472 * (2.0 * me1 + mf - ms - md).Sine();
3406 g += e * 0.002222 * (2.0 * me1 + mf - ms).Sine();
3407 g += e * 0.002072 * (2.0 * me1 - mf - ms - md).Sine();
3408 g = g + e * 0.001877 * (mf - ms + md).Sine() + 0.001828 * (4.0 * me1 - mf - md).Sine();
3409 g = g - e * 0.001803 * (mf + ms).Sine() - 0.00175 * (3.0 * mf).Sine();
3410 g = g + e * 0.00157 * (md - ms - mf).Sine() - 0.001487 * (mf + me1).Sine();
3411 g = g - e * 0.001481 * (mf + ms + md).Sine() + e * 0.001417 * (mf - ms - md).Sine();
3412 g = g + e * 0.00135 * (mf - ms).Sine() + 0.00133 * (mf - me1).Sine();
3413 g = g + 0.001106 * (mf + 3.0 * md).Sine() + 0.00102 * (4.0 * me1 - mf).Sine();
3414 g = g + 0.000833 * (mf + 4.0 * me1 - md).Sine() + 0.000781 * (md - 3.0 * mf).Sine();
3415 g = g + 0.00067 * (mf + 4.0 * me1 - 2.0 * md).Sine() + 0.000606 * (2.0 * me1 - 3.0 * mf).Sine();
3416 g += 0.000597 * (2.0 * (me1 + md) - mf).Sine();
3417 g = g + e * 0.000492 * (2.0 * me1 + md - ms - mf).Sine() + 0.00045 * (2.0 * (md - me1) - mf).Sine();
3418 g = g + 0.000439 * (3.0 * md - mf).Sine() + 0.000423 * (mf + 2.0 * (me1 + md)).Sine();
3419 g = g + 0.000422 * (2.0 * me1 - mf - 3.0 * md).Sine() - e * 0.000367 * (ms + mf + 2.0 * me1 - md).Sine();
3420 g = g - e * 0.000353 * (ms + mf + 2.0 * me1).Sine() + 0.000331 * (mf + 4.0 * me1).Sine();
3421 g += e * 0.000317 * (2.0 * me1 + mf - ms + md).Sine();
3422 g = g + e2 * 0.000306 * (2.0 * (me1 - ms) - mf).Sine() - 0.000283 * (md + 3.0 * mf).Sine();
3423 double w1 = 0.0004664 * na.Cosine();
3424 double w2 = 0.0000754 * c.Cosine();
3425 double bm = g.ToRadians() * (1.0 - w1 - w2);
3428 double pm = 0.950724 + 0.051818 * md.Cosine() + 0.009531 * (2.0 * me1 - md).Cosine();
3429 pm =
pm + 0.007843 * (2.0 * me1).Cosine() + 0.002824 * (2.0 * md).Cosine();
3430 pm =
pm + 0.000857 * (2.0 * me1 + md).Cosine() + e * 0.000533 * (2.0 * me1 - ms).Cosine();
3431 pm += e * 0.000401 * (2.0 * me1 - md - ms).Cosine();
3432 pm =
pm + e * 0.00032 * (md - ms).Cosine() - 0.000271 * me1.Cosine();
3433 pm =
pm - e * 0.000264 * (ms + md).Cosine() - 0.000198 * (2.0 * mf - md).Cosine();
3434 pm =
pm + 0.000173 * (3.0 * md).Cosine() + 0.000167 * (4.0 * me1 - md).Cosine();
3435 pm =
pm - e * 0.000111 * ms.Cosine() + 0.000103 * (4.0 * me1 - 2.0 * md).Cosine();
3436 pm =
pm - 0.000084 * (2.0 * md - 2.0 * me1).Cosine() - e * 0.000083 * (2.0 * me1 + ms).Cosine();
3437 pm =
pm + 0.000079 * (2.0 * me1 + 2.0 * md).Cosine() + 0.000072 * (4.0 * me1).Cosine();
3438 pm =
pm + e * 0.000064 * (2.0 * me1 - ms + md).Cosine() - e * 0.000063 * (2.0 * me1 + ms - md).Cosine();
3439 pm =
pm + e * 0.000041 * (ms + me1).Cosine() + e * 0.000035 * (2.0 * md - ms).Cosine();
3440 pm =
pm - 0.000033 * (3.0 * md - 2.0 * me1).Cosine() - 0.00003 * (md + me1).Cosine();
3441 pm =
pm - 0.000029 * (2.0 * (mf - me1)).Cosine() - e * 0.000029 * (2.0 * md + ms).Cosine();
3442 pm =
pm + e2 * 0.000026 * (2.0 * (me1 - ms)).Cosine() - 0.000023 * (2.0 * (mf - me1) + md).Cosine();
3443 pm += e * 0.000019 * (4.0 * me1 - ms - md).Cosine();
3447 double moonHorPara =
pm;
3458 public static double MoonPhase(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
3462 double cd = (moonResult.moonLongDeg -
SunLong(lh, lm, ls, ds, zc, dy, mn, yr)).ToRadians().Cosine() * moonResult.moonLatDeg.ToRadians().Cosine();
3463 double d = cd.ACosine();
3464 double sd = d.Sine();
3465 double i = 0.1468 * sd * (1.0 - 0.0549 *
MoonMeanAnomaly(lh, lm, ls, ds, zc, dy, mn, yr).Sine());
3466 i /= (1.0 - 0.0167 *
SunMeanAnomaly(lh, lm, ls, ds, zc, dy, mn, yr).Sine());
3467 i = 3.141592654 - d - i.ToRadians();
3468 double k = (1.0 + i.Cosine()) / 2.0;
3470 return Math.Round(k, 2);
3479 public static double MoonMeanAnomaly(
double lh,
double lm,
double ls,
int ds,
int zc,
double dy,
int mn,
int yr)
3488 double m1 = 27.32158213;
3489 double m2 = 365.2596407;
3490 double m3 = 27.55455094;
3491 double m4 = 29.53058868;
3492 double m5 = 27.21222039;
3493 double m6 = 6798.363307;
3501 m1 = 360.0 * (m1 - m1.Floor());
3502 m2 = 360.0 * (m2 - m2.Floor());
3503 m3 = 360.0 * (m3 - m3.Floor());
3504 m4 = 360.0 * (m4 - m4.Floor());
3505 m5 = 360.0 * (m5 - m5.Floor());
3506 m6 = 360.0 * (m6 - m6.Floor());
3508 double ml = 270.434164 + m1 - (0.001133 - 0.0000019 * t) * t2;
3509 double ms = 358.475833 + m2 - (0.00015 + 0.0000033 * t) * t2;
3510 double md = 296.104608 + m3 + (0.009192 + 0.0000144 * t) * t2;
3511 double na = 259.183275 - m6 + (0.002078 + 0.0000022 * t) * t2;
3512 double a = (51.2 + 20.2 * t).ToRadians();
3513 double s1 =
a.Sine();
3514 double s2 = na.ToRadians().Sine();
3515 double b = 346.56 + (132.87 - 0.0091731 * t) * t;
3516 double s3 = 0.003964 *
b.ToRadians().Sine();
3517 double c = (na + 275.05 - 2.3 * t).ToRadians();
3518 md = md + 0.000817 * s1 + s3 + 0.002541 * s2;
3520 return md.ToRadians();
3534 public static double NewMoon(
int ds,
int zc,
double dy,
int mn,
int yr)
3542 double k =
Lint(((y0 - 1900.0 + ((dj - j0) / 365.0)) * 12.3685) + 0.5);
3543 double tn = k / 1236.85;
3544 double tf = (k + 0.5) / 1236.85;
3547 double ni = nmfmResult1.a;
3548 double nf = nmfmResult1.b;
3553 return ni + 2415020.0 + nf;
3567 public static double FullMoon(
int ds,
int zc,
double dy,
int mn,
int yr)
3575 double k =
Lint(((y0 - 1900.0 + ((dj - j0) / 365.0)) * 12.3685) + 0.5);
3576 double tn = k / 1236.85;
3577 double tf = (k + 0.5) / 1236.85;
3583 double fi = nmfnResult2.a;
3584 double ff = nmfnResult2.b;
3586 return fi + 2415020.0 + ff;
3595 double e = 29.53 * k;
3596 double c = 166.56 + (132.87 - 0.009173 * t) * t;
3598 double b = 0.00058868 * k + (0.0001178 - 0.000000155 * t) * t2;
3599 b =
b + 0.00033 * c.Sine() + 0.75933;
3600 double a = k / 12.36886;
3601 double a1 = 359.2242 + 360.0 *
Fract(
a) - (0.0000333 + 0.00000347 * t) * t2;
3602 double a2 = 306.0253 + 360.0 *
Fract(k / 0.9330851);
3603 a2 += (0.0107306 + 0.00001236 * t) * t2;
3605 double f = 21.2964 + 360.0 *
Fract(
a) - (0.0016528 + 0.00000239 * t) * t2;
3609 a1 = a1.ToRadians();
3610 a2 = a2.ToRadians();
3613 double dd = (0.1734 - 0.000393 * t) * a1.Sine() + 0.0021 * (2.0 * a1).Sine();
3614 dd =
dd - 0.4068 * a2.Sine() + 0.0161 * (2.0 * a2).Sine() - 0.0004 * (3.0 * a2).Sine();
3615 dd =
dd + 0.0104 * (2.0 *
f).Sine() - 0.0051 * (a1 + a2).Sine();
3616 dd =
dd - 0.0074 * (a1 - a2).Sine() + 0.0004 * (2.0 *
f + a1).Sine();
3617 dd =
dd - 0.0004 * (2.0 *
f - a1).Sine() - 0.0006 * (2.0 *
f + a2).Sine() + 0.001 * (2.0 *
f - a2).Sine();
3618 dd += 0.0005 * (a1 + 2.0 * a2).Sine();
3619 double e1 = e.Floor();
3621 double b1 =
b.Floor();
3639 public static double Lint(
double w)
3647 public static double IInt(
double w)
3649 return Sign(w) * Math.Abs(w).Floor();
3657 public static double Sign(
double numberToCheck)
3659 double signValue = 0.0;
3661 if (numberToCheck < 0.0)
3664 if (numberToCheck > 0.0)
3675 double returnValue =
ut;
3677 if ((
ut - g1) < -6.0)
3678 returnValue =
ut + 24.0;
3680 if ((
ut - g1) > 6.0)
3681 returnValue =
ut - 24.0;
3697 public static double EQELat(
double rah,
double ram,
double ras,
double dd,
double dm,
double ds,
double gd,
int gm,
int gy)
3701 double c =
Obliq(gd, gm, gy).ToRadians();
3702 double d =
b.Sine() * c.Cosine() -
b.Cosine() * c.Sine() *
a.Sine();
3710 public static double EQELong(
double rah,
double ram,
double ras,
double dd,
double dm,
double ds,
double gd,
int gm,
int gy)
3714 double c =
Obliq(gd, gm, gy).ToRadians();
3715 double d =
a.Sine() * c.Cosine() +
b.Tangent() * c.Sine();
3716 double e =
a.Cosine();
3717 double f =
Degrees(d.AngleTangent2(e));
3719 return f - 360.0 * (
f / 360.0).Floor();
3729 public static double MoonRiseLCT(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
3739 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result1 =
MoonRiseLCT_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
3740 double lu = lct6700result1.lu;
3741 lct = lct6700result1.lct;
3753 for (
int k = 1; k < 9; k++)
3758 g1 = (k == 1) ?
ut : gu;
3763 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) lct6680result =
MoonRiseLCT_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
3764 lct = lct6680result.lct;
3765 dy1 = lct6680result.dy1;
3766 mn1 = lct6680result.mn1;
3767 yr1 = lct6680result.yr1;
3768 gdy = lct6680result.gdy;
3769 gmn = lct6680result.gmn;
3770 gyr = lct6680result.gyr;
3772 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result2 =
MoonRiseLCT_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
3773 lu = lct6700result2.lu;
3774 lct = lct6700result2.lct;
3786 if (Math.Abs(g1 -
ut) > 0.5)
3798 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonRiseLCT_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
3801 if (Math.Abs(g1 -
ut) > 0.5)
3812 ut -= 24.0 * (
ut / 24.0).Floor();
3820 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct)
MoonRiseLCT_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
3826 double th = 0.27249 *
pm.Sine();
3827 double di =
th + 0.0098902 -
pm;
3832 if (!
ERS(
p, 0.0, 0.0,
q, 0.0, 0.0,
Degrees(
di), gLat).Equals(
"OK"))
3849 public static (
double dy1,
int mn1,
int yr1)
MoonRiseLcDMY(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
3859 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result1 =
MoonRiseLcDMY_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
3860 double lu = lct6700result1.lu;
3861 lct = lct6700result1.lct;
3872 for (
int k = 1; k < 9; k++)
3877 g1 = (k == 1) ?
ut : gu;
3882 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) lct6680result1 =
MoonRiseLcDMY_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
3883 lct = lct6680result1.lct;
3884 dy1 = lct6680result1.dy1;
3885 mn1 = lct6680result1.mn1;
3886 yr1 = lct6680result1.yr1;
3887 gdy = lct6680result1.gdy;
3888 gmn = lct6680result1.gmn;
3889 gyr = lct6680result1.gyr;
3891 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result2 =
MoonRiseLcDMY_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
3893 lu = lct6700result2.lu;
3894 lct = lct6700result2.lct;
3906 if (Math.Abs(g1 -
ut) > 0.5)
3920 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonRiseLcDMY_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
3923 if (Math.Abs(g1 -
ut) > 0.5)
3934 ut -= 24.0 * (
ut / 24.0).Floor();
3942 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct)
MoonRiseLcDMY_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
3948 double th = 0.27249 *
pm.Sine();
3949 double di =
th + 0.0098902 -
pm;
3964 public static double MoonRiseAz(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
3974 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au) az6700result1 =
MoonRiseAz_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
3975 double lu = az6700result1.lu;
3976 lct = az6700result1.lct;
3989 for (
int k = 1; k < 9; k++)
3994 g1 = (k == 1) ?
ut : gu;
3999 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) az6680result1 =
MoonRiseAz_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
4000 lct = az6680result1.lct;
4001 dy1 = az6680result1.dy1;
4002 mn1 = az6680result1.mn1;
4003 yr1 = az6680result1.yr1;
4004 gdy = az6680result1.gdy;
4005 gmn = az6680result1.gmn;
4006 gyr = az6680result1.gyr;
4008 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au) az6700result2 =
MoonRiseAz_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4009 lu = az6700result2.lu;
4010 lct = az6700result2.lct;
4011 au = az6700result2.au;
4028 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonRiseAz_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
4031 if (Math.Abs(g1 -
ut) > 0.5)
4042 ut -= 24.0 * (
ut / 24.0).Floor();
4050 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au)
MoonRiseAz_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
4056 double th = 0.27249 *
pm.Sine();
4057 double di =
th + 0.0098902 -
pm;
4063 return (
mm,
bm,
pm,
dp,
th,
di,
p,
q,
lu,
lct, au);
4073 public static double MoonSetLCT(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
4083 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result1 =
MoonSetLCT_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4084 double lu = lct6700result1.lu;
4085 lct = lct6700result1.lct;
4096 for (
int k = 1; k < 9; k++)
4101 g1 = (k == 1) ?
ut : gu;
4106 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) lct6680result1 =
MoonSetLCT_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
4107 lct = lct6680result1.lct;
4108 dy1 = lct6680result1.dy1;
4109 mn1 = lct6680result1.mn1;
4110 yr1 = lct6680result1.yr1;
4111 gdy = lct6680result1.gdy;
4112 gmn = lct6680result1.gmn;
4113 gyr = lct6680result1.gyr;
4115 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) lct6700result2 =
MoonSetLCT_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4116 lu = lct6700result2.lu;
4117 lct = lct6700result2.lct;
4129 if (Math.Abs(g1 -
ut) > 0.5)
4141 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonSetLCT_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
4144 if (Math.Abs(g1 -
ut) > 0.5)
4155 ut -= 24.0 * (
ut / 24.0).Floor();
4163 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct)
MoonSetLCT_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
4169 double th = 0.27249 *
pm.Sine();
4170 double di =
th + 0.0098902 -
pm;
4175 if (!
ERS(
p, 0.0, 0.0,
q, 0.0, 0.0,
Degrees(
di), gLat).Equals(
"OK"))
4192 public static (
double dy1,
int mn1,
int yr1)
MoonSetLcDMY(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
4202 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) dmy6700result1 =
MoonSetLcDMY_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4203 double lu = dmy6700result1.lu;
4204 lct = dmy6700result1.lct;
4215 for (
int k = 1; k < 9; k++)
4220 g1 = (k == 1) ?
ut : gu;
4225 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) dmy6680result1 =
MoonSetLcDMY_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
4226 lct = dmy6680result1.lct;
4227 dy1 = dmy6680result1.dy1;
4228 mn1 = dmy6680result1.mn1;
4229 yr1 = dmy6680result1.yr1;
4230 gdy = dmy6680result1.gdy;
4231 gmn = dmy6680result1.gmn;
4232 gyr = dmy6680result1.gyr;
4234 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct) dmy6700result2 =
MoonSetLcDMY_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4235 lu = dmy6700result2.lu;
4236 lct = dmy6700result2.lct;
4248 if (Math.Abs(g1 -
ut) > 0.5)
4262 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonSetLcDMY_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
4265 if (Math.Abs(g1 -
ut) > 0.5)
4276 ut -= 24.0 * (
ut / 24.0).Floor();
4284 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct)
MoonSetLcDMY_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
4290 double th = 0.27249 *
pm.Sine();
4291 double di =
th + 0.0098902 -
pm;
4306 public static double MoonSetAz(
double dy,
int mn,
int yr,
int ds,
int zc,
double gLong,
double gLat)
4316 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au) az6700result1 =
MoonSetAz_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4317 double lu = az6700result1.lu;
4318 lct = az6700result1.lct;
4332 for (
int k = 1; k < 9; k++)
4337 g1 = (k == 1) ?
ut : gu;
4342 (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr) az6680result1 =
MoonSetAz_L6680(
x, ds, zc,
gdy,
gmn, gyr, g1,
ut);
4343 lct = az6680result1.lct;
4344 dy1 = az6680result1.dy1;
4345 mn1 = az6680result1.mn1;
4346 yr1 = az6680result1.yr1;
4347 gdy = az6680result1.gdy;
4348 gmn = az6680result1.gmn;
4349 gyr = az6680result1.gyr;
4351 (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au) az6700result2 =
MoonSetAz_L6700(
lct, ds, zc,
dy1,
mn1,
yr1,
gdy,
gmn, gyr, gLat);
4352 lu = az6700result2.lu;
4353 lct = az6700result2.lct;
4354 au = az6700result2.au;
4371 public static (
double ut,
double lct,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr)
MoonSetAz_L6680(
double x,
int ds,
int zc,
double gdy,
int gmn,
int gyr,
double g1,
double ut)
4374 if (Math.Abs(g1 -
ut) > 0.5)
4385 ut -= 24.0 * (
ut / 24.0).Floor();
4393 public static (
double mm,
double bm,
double pm,
double dp,
double th,
double di,
double p,
double q,
double lu,
double lct,
double au)
MoonSetAz_L6700(
double lct,
int ds,
int zc,
double dy1,
int mn1,
int yr1,
double gdy,
int gmn,
int gyr,
double gLat)
4399 double th = 0.27249 *
pm.Sine();
4400 double di =
th + 0.0098902 -
pm;
4406 return (
mm,
bm,
pm,
dp,
th,
di,
p,
q,
lu,
lct, au);
4423 double k = (y0 - 1900.0 + ((dj - j0) * 1.0 / 365.0)) * 12.3685;
4425 double tn = k / 1236.85;
4426 double tf = (k + 0.5) / 1236.85;
4432 double fb = l6855result2.f;
4434 double df = Math.Abs(fb - 3.141592654 *
Lint(fb / 3.141592654));
4437 df = 3.141592654 - df;
4439 string s =
"Lunar eclipse certain";
4440 if (df >= 0.242600766)
4442 s =
"Lunar eclipse possible";
4445 s =
"No lunar eclipse";
4457 double e = 29.53 * k;
4458 double c = 166.56 + (132.87 - 0.009173 * t) * t;
4460 double b = 0.00058868 * k + (0.0001178 - 0.000000155 * t) * t2;
4461 b =
b + 0.00033 * c.Sine() + 0.75933;
4462 double a = k / 12.36886;
4463 double a1 = 359.2242 + 360.0 *
FPart(
a) - (0.0000333 + 0.00000347 * t) * t2;
4464 double a2 = 306.0253 + 360.0 *
FPart(k / 0.9330851);
4465 a2 += (0.0107306 + 0.00001236 * t) * t2;
4467 double f = 21.2964 + 360.0 *
FPart(
a) - (0.0016528 + 0.00000239 * t) * t2;
4471 a1 = a1.ToRadians();
4472 a2 = a2.ToRadians();
4475 double dd = (0.1734 - 0.000393 * t) * a1.Sine() + 0.0021 * (2.0 * a1).Sine();
4476 dd =
dd - 0.4068 * a2.Sine() + 0.0161 * (2.0 * a2).Sine() - 0.0004 * (3.0 * a2).Sine();
4477 dd =
dd + 0.0104 * (2.0 *
f).Sine() - 0.0051 * (a1 + a2).Sine();
4478 dd =
dd - 0.0074 * (a1 - a2).Sine() + 0.0004 * (2.0 *
f + a1).Sine();
4479 dd =
dd - 0.0004 * (2.0 *
f - a1).Sine() - 0.0006 * (2.0 *
f + a2).Sine() + 0.001 * (2.0 *
f - a2).Sine();
4480 dd += 0.0005 * (a1 + 2.0 * a2).Sine();
4481 double e1 = e.Floor();
4483 double b1 =
b.Floor();
4498 double tp = 2.0 * Math.PI;
4503 double dj =
FullMoon(ds, zc, dy, mn, yr);
4507 double igday = gday.Floor();
4508 double xi = gday - igday;
4509 double utfm = xi * 24.0;
4510 double ut = utfm - 1.0;
4511 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4512 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4513 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4514 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4516 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4517 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4518 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4519 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4525 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4526 double dm = mz - my;
4531 double lj = (dm - sb) / 2.0;
4533 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4534 ut = x0 - 0.13851852;
4535 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4536 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4537 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4538 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4541 double p3 = 0.00004263;
4542 double zh = (sr - mr) / lj;
4543 double tc = x0 + zh;
4544 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4545 double s2 = sh * sh;
4546 double z2 = zh * zh;
4547 double ps = p3 / (rr * lj);
4548 double z1 = (zh * z2 / (z2 + s2)) + x0;
4549 double h0 = (hy + hz) / (2.0 * lj);
4550 double rm = 0.272446 * h0;
4551 double rn = 0.00465242 / (lj * rr);
4552 double hd = h0 * 0.99834;
4553 double rp = (hd + rn + ps) * 1.02;
4555 double dd = z1 - x0;
4556 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4572 double tp = 2.0 * Math.PI;
4577 double dj =
FullMoon(ds, zc, dy, mn, yr);
4581 double igday = gday.Floor();
4582 double xi = gday - igday;
4583 double utfm = xi * 24.0;
4584 double ut = utfm - 1.0;
4585 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4586 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4587 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4588 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4590 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4591 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4592 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4593 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4599 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4600 double dm = mz - my;
4605 double lj = (dm - sb) / 2.0;
4607 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4608 ut = x0 - 0.13851852;
4609 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4610 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4611 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4612 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4615 double p3 = 0.00004263;
4616 double zh = (sr - mr) / lj;
4617 double tc = x0 + zh;
4618 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4619 double s2 = sh * sh;
4620 double z2 = zh * zh;
4621 double ps = p3 / (rr * lj);
4622 double z1 = (zh * z2 / (z2 + s2)) + x0;
4623 double h0 = (hy + hz) / (2.0 * lj);
4624 double rm = 0.272446 * h0;
4625 double rn = 0.00465242 / (lj * rr);
4626 double hd = h0 * 0.99834;
4627 double rp = (hd + rn + ps) * 1.02;
4629 double dd = z1 - x0;
4630 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4635 double zd =
dd.SquareRoot();
4636 double z6 = z1 - zd;
4652 double tp = 2.0 * Math.PI;
4657 double dj =
FullMoon(ds, zc, dy, mn, yr);
4661 double igday = gday.Floor();
4662 double xi = gday - igday;
4663 double utfm = xi * 24.0;
4664 double ut = utfm - 1.0;
4665 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4666 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4667 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4668 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4670 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4671 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4672 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4673 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4679 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4680 double dm = mz - my;
4685 double lj = (dm - sb) / 2.0;
4687 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4688 ut = x0 - 0.13851852;
4689 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4690 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4691 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4692 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4695 double p3 = 0.00004263;
4696 double zh = (sr - mr) / lj;
4697 double tc = x0 + zh;
4698 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4699 double s2 = sh * sh;
4700 double z2 = zh * zh;
4701 double ps = p3 / (rr * lj);
4702 double z1 = (zh * z2 / (z2 + s2)) + x0;
4703 double h0 = (hy + hz) / (2.0 * lj);
4704 double rm = 0.272446 * h0;
4705 double rn = 0.00465242 / (lj * rr);
4706 double hd = h0 * 0.99834;
4707 double rp = (hd + rn + ps) * 1.02;
4709 double dd = z1 - x0;
4710 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4715 double zd =
dd.SquareRoot();
4716 double z7 = z1 + zd -
Lint((z1 + zd) / 24.0) * 24.0;
4729 double tp = 2.0 * Math.PI;
4734 double dj =
FullMoon(ds, zc, dy, mn, yr);
4738 double igday = gday.Floor();
4739 double xi = gday - igday;
4740 double utfm = xi * 24.0;
4741 double ut = utfm - 1.0;
4742 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4743 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4744 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4745 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4747 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4748 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4749 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4750 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4756 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4757 double dm = mz - my;
4762 double lj = (dm - sb) / 2.0;
4764 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4765 ut = x0 - 0.13851852;
4766 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4767 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4768 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4769 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4772 double p3 = 0.00004263;
4773 double zh = (sr - mr) / lj;
4774 double tc = x0 + zh;
4775 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4776 double s2 = sh * sh;
4777 double z2 = zh * zh;
4778 double ps = p3 / (rr * lj);
4779 double z1 = (zh * z2 / (z2 + s2)) + x0;
4780 double h0 = (hy + hz) / (2.0 * lj);
4781 double rm = 0.272446 * h0;
4782 double rn = 0.00465242 / (lj * rr);
4783 double hd = h0 * 0.99834;
4784 double ru = (hd - rn + ps) * 1.02;
4785 double rp = (hd + rn + ps) * 1.02;
4786 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
4788 double dd = z1 - x0;
4789 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4794 double zd =
dd.SquareRoot();
4795 double z6 = z1 - zd;
4799 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4804 zd =
dd.SquareRoot();
4805 double z8 = z1 - zd;
4821 double tp = 2.0 * Math.PI;
4826 double dj =
FullMoon(ds, zc, dy, mn, yr);
4830 double igday = gday.Floor();
4831 double xi = gday - igday;
4832 double utfm = xi * 24.0;
4833 double ut = utfm - 1.0;
4834 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4835 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4836 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4837 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4839 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4840 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4841 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4842 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4848 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4849 double dm = mz - my;
4854 double lj = (dm - sb) / 2.0;
4856 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4857 ut = x0 - 0.13851852;
4858 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4859 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4860 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4861 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4864 double p3 = 0.00004263;
4865 double zh = (sr - mr) / lj;
4866 double tc = x0 + zh;
4867 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4868 double s2 = sh * sh;
4869 double z2 = zh * zh;
4870 double ps = p3 / (rr * lj);
4871 double z1 = (zh * z2 / (z2 + s2)) + x0;
4872 double h0 = (hy + hz) / (2.0 * lj);
4873 double rm = 0.272446 * h0;
4874 double rn = 0.00465242 / (lj * rr);
4875 double hd = h0 * 0.99834;
4876 double ru = (hd - rn + ps) * 1.02;
4877 double rp = (hd + rn + ps) * 1.02;
4878 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
4880 double dd = z1 - x0;
4881 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4886 double zd =
dd.SquareRoot();
4887 double z6 = z1 - zd;
4891 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4896 zd =
dd.SquareRoot();
4897 double z9 = z1 + zd -
Lint((z1 + zd) / 24.0) * 24.0;
4910 double tp = 2.0 * Math.PI;
4915 double dj =
FullMoon(ds, zc, dy, mn, yr);
4919 double igday = gday.Floor();
4920 double xi = gday - igday;
4921 double utfm = xi * 24.0;
4922 double ut = utfm - 1.0;
4923 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4924 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4925 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4926 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4928 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
4929 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4930 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4931 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4937 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
4938 double dm = mz - my;
4943 double lj = (dm - sb) / 2.0;
4945 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
4946 ut = x0 - 0.13851852;
4947 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
4948 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
4949 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
4950 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
4953 double p3 = 0.00004263;
4954 double zh = (sr - mr) / lj;
4955 double tc = x0 + zh;
4956 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
4957 double s2 = sh * sh;
4958 double z2 = zh * zh;
4959 double ps = p3 / (rr * lj);
4960 double z1 = (zh * z2 / (z2 + s2)) + x0;
4961 double h0 = (hy + hz) / (2.0 * lj);
4962 double rm = 0.272446 * h0;
4963 double rn = 0.00465242 / (lj * rr);
4964 double hd = h0 * 0.99834;
4965 double ru = (hd - rn + ps) * 1.02;
4966 double rp = (hd + rn + ps) * 1.02;
4967 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
4969 double dd = z1 - x0;
4970 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4975 double zd =
dd.SquareRoot();
4976 double z6 = z1 - zd;
4980 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4985 zd =
dd.SquareRoot();
4986 double z8 = z1 - zd;
4990 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
4995 zd =
dd.SquareRoot();
4996 double zcc = z1 - zd;
5012 double tp = 2.0 * Math.PI;
5017 double dj =
FullMoon(ds, zc, dy, mn, yr);
5021 double igday = gday.Floor();
5022 double xi = gday - igday;
5023 double utfm = xi * 24.0;
5024 double ut = utfm - 1.0;
5025 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5026 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5027 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5028 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5030 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5031 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5032 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5033 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5039 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5040 double dm = mz - my;
5045 double lj = (dm - sb) / 2.0;
5047 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5048 ut = x0 - 0.13851852;
5049 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5050 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5051 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5052 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
5055 double p3 = 0.00004263;
5056 double zh = (sr - mr) / lj;
5057 double tc = x0 + zh;
5058 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5059 double s2 = sh * sh;
5060 double z2 = zh * zh;
5061 double ps = p3 / (rr * lj);
5062 double z1 = (zh * z2 / (z2 + s2)) + x0;
5063 double h0 = (hy + hz) / (2.0 * lj);
5064 double rm = 0.272446 * h0;
5065 double rn = 0.00465242 / (lj * rr);
5066 double hd = h0 * 0.99834;
5067 double ru = (hd - rn + ps) * 1.02;
5068 double rp = (hd + rn + ps) * 1.02;
5069 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5071 double dd = z1 - x0;
5072 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5077 double zd =
dd.SquareRoot();
5078 double z6 = z1 - zd;
5082 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5087 zd =
dd.SquareRoot();
5088 double z8 = z1 - zd;
5092 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5097 zd =
dd.SquareRoot();
5098 double zb = z1 + zd -
Lint((z1 + zd) / 24.0) * 24.0;
5111 double tp = 2.0 * Math.PI;
5116 double dj =
FullMoon(ds, zc, dy, mn, yr);
5120 double igday = gday.Floor();
5121 double xi = gday - igday;
5122 double utfm = xi * 24.0;
5123 double ut = utfm - 1.0;
5124 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5125 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5126 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5127 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5129 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5130 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5131 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5132 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5138 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5139 double dm = mz - my;
5144 double lj = (dm - sb) / 2.0;
5146 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5147 ut = x0 - 0.13851852;
5148 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5149 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5150 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5151 sr = sr + Math.PI -
Lint((sr + Math.PI) / tp) * tp;
5154 double p3 = 0.00004263;
5155 double zh = (sr - mr) / lj;
5156 double tc = x0 + zh;
5157 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5158 double s2 = sh * sh;
5159 double z2 = zh * zh;
5160 double ps = p3 / (rr * lj);
5161 double z1 = (zh * z2 / (z2 + s2)) + x0;
5162 double h0 = (hy + hz) / (2.0 * lj);
5163 double rm = 0.272446 * h0;
5164 double rn = 0.00465242 / (lj * rr);
5165 double hd = h0 * 0.99834;
5166 double ru = (hd - rn + ps) * 1.02;
5167 double rp = (hd + rn + ps) * 1.02;
5168 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5170 double dd = z1 - x0;
5171 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5176 double zd =
dd.SquareRoot();
5177 double z6 = z1 - zd;
5181 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5182 double mg = (rm + rp - pj) / (2.0 * rm);
5187 zd =
dd.SquareRoot();
5188 double z8 = z1 - zd;
5193 mg = (rm + ru - pj) / (2.0 * rm);
5212 double k = (y0 - 1900.0 + ((dj - j0) * 1.0 / 365.0)) * 12.3685;
5214 double tn = k / 1236.85;
5215 double tf = (k + 0.5) / 1236.85;
5218 double nb = l6855result1.f;
5223 double df = Math.Abs(nb - 3.141592654 *
Lint(nb / 3.141592654));
5226 df = 3.141592654 - df;
5228 string s =
"Solar eclipse certain";
5229 if (df >= 0.242600766)
5231 s =
"Solar eclipse possible";
5233 s =
"No solar eclipse";
5245 double e = 29.53 * k;
5246 double c = 166.56 + (132.87 - 0.009173 * t) * t;
5248 double b = 0.00058868 * k + (0.0001178 - 0.000000155 * t) * t2;
5249 b =
b + 0.00033 * c.Sine() + 0.75933;
5250 double a = k / 12.36886;
5251 double a1 = 359.2242 + 360.0 *
FPart(
a) - (0.0000333 + 0.00000347 * t) * t2;
5252 double a2 = 306.0253 + 360.0 *
FPart(k / 0.9330851);
5253 a2 += (0.0107306 + 0.00001236 * t) * t2;
5255 double f = 21.2964 + 360.0 *
FPart(
a) - (0.0016528 + 0.00000239 * t) * t2;
5259 a1 = a1.ToRadians();
5260 a2 = a2.ToRadians();
5263 double dd = (0.1734 - 0.000393 * t) * a1.Sine() + 0.0021 * (2.0 * a1).Sine();
5264 dd =
dd - 0.4068 * a2.Sine() + 0.0161 * (2.0 * a2).Sine() - 0.0004 * (3.0 * a2).Sine();
5265 dd =
dd + 0.0104 * (2.0 *
f).Sine() - 0.0051 * (a1 + a2).Sine();
5266 dd =
dd - 0.0074 * (a1 - a2).Sine() + 0.0004 * (2.0 *
f + a1).Sine();
5267 dd =
dd - 0.0004 * (2.0 *
f - a1).Sine() - 0.0006 * (2.0 *
f + a2).Sine() + 0.001 * (2.0 *
f - a2).Sine();
5268 dd += 0.0005 * (a1 + 2.0 * a2).Sine();
5269 double e1 = e.Floor();
5271 double b1 =
b.Floor();
5284 public static double UTMaxSolarEclipse(
double dy,
int mn,
int yr,
int ds,
int zc,
double glong,
double glat)
5286 double tp = 2.0 * Math.PI;
5291 double dj =
NewMoon(ds, zc, dy, mn, yr);
5295 double igday = gday.Floor();
5296 double xi = gday - igday;
5297 double utnm = xi * 24.0;
5298 double ut = utnm - 1.0;
5299 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5300 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5301 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5302 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5304 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5305 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5306 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5307 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5315 double tm = xh - 1.0;
5317 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result1 =
UTMaxSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5318 my = l7390result1.p;
5319 by = l7390result1.q;
5324 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result2 =
UTMaxSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5325 mz = l7390result2.p;
5326 bz = l7390result2.q;
5328 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5329 double dm = mz - my;
5334 double lj = (dm - sb) / 2.0;
5335 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5336 ut = x0 - 0.13851852;
5337 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5338 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5339 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5343 hp = 0.00004263452 / rr;
5344 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result3 =
UTMaxSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5346 sr = l7390result3.p;
5347 by -= l7390result3.q;
5348 bz -= l7390result3.q;
5349 double p3 = 0.00004263;
5350 double zh = (sr - mr) / lj;
5351 double tc = x0 + zh;
5352 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5353 double s2 = sh * sh;
5354 double z2 = zh * zh;
5355 double ps = p3 / (rr * lj);
5356 double z1 = (zh * z2 / (z2 + s2)) + x0;
5357 double h0 = (hy + hz) / (2.0 * lj);
5358 double rm = 0.272446 * h0;
5359 double rn = 0.00465242 / (lj * rr);
5360 double hd = h0 * 0.99834;
5361 double _ru = (hd - rn + ps) * 1.02;
5362 double _rp = (hd + rn + ps) * 1.02;
5363 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5365 double dd = z1 - x0;
5366 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5371 double zd =
dd.SquareRoot();
5379 public static (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q)
UTMaxSolarEclipse_L7390(
double x,
double y,
double igday,
int gmonth,
int gyear,
double tm,
double glong,
double glat,
double hp)
5383 double xaa =
RightAscensionToHourAngle(
DecimalDegreesToDegreeHours(
paa), 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5386 double xbb =
HourAngleToRightAscension(
pbb, 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5387 double p =
EQELong(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5388 double q =
EQELat(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5401 double tp = 2.0 * Math.PI;
5406 double dj =
NewMoon(ds, zc, dy, mn, yr);
5410 double igday = gday.Floor();
5411 double xi = gday - igday;
5412 double utnm = xi * 24.0;
5413 double ut = utnm - 1.0;
5414 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5415 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5416 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5417 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5419 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5420 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5421 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5422 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5430 double tm = xh - 1.0;
5432 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result1 =
UTFirstContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5433 my = l7390result1.p;
5434 by = l7390result1.q;
5439 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result2 =
UTFirstContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5440 mz = l7390result2.p;
5441 bz = l7390result2.q;
5443 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5444 double dm = mz - my;
5449 double lj = (dm - sb) / 2.0;
5450 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5451 ut = x0 - 0.13851852;
5452 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5453 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5454 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5458 hp = 0.00004263452 / rr;
5459 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result3 =
UTFirstContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5460 sr = l7390result3.p;
5461 by -= l7390result3.q;
5462 bz -= l7390result3.q;
5463 double p3 = 0.00004263;
5464 double zh = (sr - mr) / lj;
5465 double tc = x0 + zh;
5466 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5467 double s2 = sh * sh;
5468 double z2 = zh * zh;
5469 double ps = p3 / (rr * lj);
5470 double z1 = (zh * z2 / (z2 + s2)) + x0;
5471 double h0 = (hy + hz) / (2.0 * lj);
5472 double rm = 0.272446 * h0;
5473 double rn = 0.00465242 / (lj * rr);
5474 double hd = h0 * 0.99834;
5475 double _ru = (hd - rn + ps) * 1.02;
5476 double _rp = (hd + rn + ps) * 1.02;
5477 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5479 double dd = z1 - x0;
5480 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5485 double zd =
dd.SquareRoot();
5486 double z6 = z1 - zd;
5497 public static (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q)
UTFirstContactSolarEclipse_L7390(
double x,
double y,
double igday,
int gmonth,
int gyear,
double tm,
double glong,
double glat,
double hp)
5501 double xaa =
RightAscensionToHourAngle(
DecimalDegreesToDegreeHours(
paa), 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5504 double xbb =
HourAngleToRightAscension(
pbb, 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5505 double p =
EQELong(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5506 double q =
EQELat(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5519 double tp = 2.0 * Math.PI;
5524 double dj =
NewMoon(ds, zc, dy, mn, yr);
5528 double igday = gday.Floor();
5529 double xi = gday - igday;
5530 double utnm = xi * 24.0;
5531 double ut = utnm - 1.0;
5532 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5533 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5534 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5535 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5537 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5538 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5539 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5540 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5548 double tm = xh - 1.0;
5550 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result1 =
UTLastContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5551 my = l7390result1.p;
5552 by = l7390result1.q;
5557 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result2 =
UTLastContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5558 mz = l7390result2.p;
5559 bz = l7390result2.q;
5561 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5562 double dm = mz - my;
5567 double lj = (dm - sb) / 2.0;
5568 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5569 ut = x0 - 0.13851852;
5570 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5571 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5572 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5576 hp = 0.00004263452 / rr;
5577 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result3 =
UTLastContactSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5578 sr = l7390result3.p;
5579 by -= l7390result3.q;
5580 bz -= l7390result3.q;
5581 double p3 = 0.00004263;
5582 double zh = (sr - mr) / lj;
5583 double tc = x0 + zh;
5584 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5585 double s2 = sh * sh;
5586 double z2 = zh * zh;
5587 double ps = p3 / (rr * lj);
5588 double z1 = (zh * z2 / (z2 + s2)) + x0;
5589 double h0 = (hy + hz) / (2.0 * lj);
5590 double rm = 0.272446 * h0;
5591 double rn = 0.00465242 / (lj * rr);
5592 double hd = h0 * 0.99834;
5593 double _ru = (hd - rn + ps) * 1.02;
5594 double _rp = (hd + rn + ps) * 1.02;
5595 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5597 double dd = z1 - x0;
5598 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5603 double zd =
dd.SquareRoot();
5604 double z7 = z1 + zd -
Lint((z1 + zd) / 24.0) * 24.0;
5612 public static (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q)
UTLastContactSolarEclipse_L7390(
double x,
double y,
double igday,
int gmonth,
int gyear,
double tm,
double glong,
double glat,
double hp)
5616 double xaa =
RightAscensionToHourAngle(
DecimalDegreesToDegreeHours(
paa), 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5619 double xbb =
HourAngleToRightAscension(
pbb, 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5620 double p =
EQELong(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5621 double q =
EQELat(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5632 public static double MagSolarEclipse(
double dy,
int mn,
int yr,
int ds,
int zc,
double glong,
double glat)
5634 double tp = 2.0 * Math.PI;
5639 double dj =
NewMoon(ds, zc, dy, mn, yr);
5643 double igday = gday.Floor();
5644 double xi = gday - igday;
5645 double utnm = xi * 24.0;
5646 double ut = utnm - 1.0;
5647 double ly =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5648 double my =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5649 double by =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5650 double hy =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5652 double sb =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians() - ly;
5653 double mz =
MoonLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5654 double bz =
MoonLat(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5655 double hz =
MoonHP(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5663 double tm = xh - 1.0;
5665 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result1 =
MagSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5666 my = l7390result1.p;
5667 by = l7390result1.q;
5672 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result2 =
MagSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5673 mz = l7390result2.p;
5674 bz = l7390result2.q;
5676 double x0 = xh + 1.0 - (2.0 * bz / (bz - by));
5677 double dm = mz - my;
5682 double lj = (dm - sb) / 2.0;
5683 double mr = my + (dm * (x0 - xh + 1.0) / 2.0);
5684 ut = x0 - 0.13851852;
5685 double rr =
SunDist(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear);
5686 double sr =
SunLong(
ut, 0.0, 0.0, 0, 0, igday, gmonth, gyear).ToRadians();
5687 sr += (
NutatLong(igday, gmonth, gyear) - 0.00569).ToRadians();
5691 hp = 0.00004263452 / rr;
5692 (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q) l7390result3 =
MagSolarEclipse_L7390(
x,
y, igday, gmonth, gyear, tm, glong, glat, hp);
5693 sr = l7390result3.p;
5694 by -= l7390result3.q;
5695 bz -= l7390result3.q;
5696 double p3 = 0.00004263;
5697 double zh = (sr - mr) / lj;
5698 double tc = x0 + zh;
5699 double sh = (((bz - by) * (tc - xh - 1.0) / 2.0) + bz) / lj;
5700 double s2 = sh * sh;
5701 double z2 = zh * zh;
5702 double ps = p3 / (rr * lj);
5703 double z1 = (zh * z2 / (z2 + s2)) + x0;
5704 double h0 = (hy + hz) / (2.0 * lj);
5705 double rm = 0.272446 * h0;
5706 double rn = 0.00465242 / (lj * rr);
5707 double hd = h0 * 0.99834;
5708 double _ru = (hd - rn + ps) * 1.02;
5709 double _rp = (hd + rn + ps) * 1.02;
5710 double pj = Math.Abs(sh * zh / (s2 + z2).SquareRoot());
5712 double dd = z1 - x0;
5713 dd =
dd *
dd - ((z2 - (r * r)) *
dd / zh);
5718 double zd =
dd.SquareRoot();
5720 double mg = (rm + rn - pj) / (2.0 * rn);
5728 public static (
double paa,
double qaa,
double xaa,
double pbb,
double qbb,
double xbb,
double p,
double q)
MagSolarEclipse_L7390(
double x,
double y,
double igday,
int gmonth,
int gyear,
double tm,
double glong,
double glat,
double hp)
5732 double xaa =
RightAscensionToHourAngle(
DecimalDegreesToDegreeHours(
paa), 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5735 double xbb =
HourAngleToRightAscension(
pbb, 0.0, 0.0, tm, 0.0, 0.0, 0, 0, igday, gmonth, gyear, glong);
5736 double p =
EQELong(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
5737 double q =
EQELat(
xbb, 0.0, 0.0,
qbb, 0.0, 0.0, igday, gmonth, gyear).ToRadians();
Working data for precise planet calculations.
double Value2
Working value 2.
string Name
Name of planet.
double Value5
Working value 5.
double Value6
Working value 6.
double Value4
Working value 4.
Miscellaneous macro functions supporting the other classes.
static double double double double double double double double q UTMaxSolarEclipse_L7390(double x, double y, double igday, int gmonth, int gyear, double tm, double glong, double glat, double hp)
static string LunarEclipseOccurrence(int ds, int zc, double dy, int mn, int yr)
Determine if a lunar eclipse is likely to occur.
static double GreenwichSiderealTimeToUniversalTime(double greenwichSiderealHours, double greenwichSiderealMinutes, double greenwichSiderealSeconds, double greenwichDay, int greenwichMonth, int greenwichYear)
Convert Greenwich Sidereal Time to Universal Time.
static double double q ParallaxDecL2870(double x, double y, double rc, double rp, double rs, double tp)
static double moonLongDeg
Calculate longitude, latitude, and horizontal parallax of the Moon.
static double RiseSetAzimuthRise(double rah, double ram, double ras, double dd, double dm, double ds, double vd, double g)
Azimuth of rising, in degrees.
static double double double double double double b LunarEclipseOccurrence_L6855(double t, double k)
static double double double double double double double planetRVect PlanetCoordinates(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr, string s)
static double double double double pbb
static double double double double qd
static double double double double double double double double q
static string ETwilight(double ld, int lm, int ly, int ds, int zc, double gl, double gp, PATwilightType tt)
static double double double double string s TwilightPMLCT_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double int int yr1 MoonRiseLcDMY(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
static double HourAngleToRightAscension(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
Convert Hour Angle to Right Ascension.
static double UniversalTimeToGreenwichSiderealTime(double uHours, double uMinutes, double uSeconds, double greenwichDay, int greenwichMonth, int greenwichYear)
Convert Universal Time to Greenwich Sidereal Time.
static double UTStartTotalLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate start time of total phase of lunar eclipse (UT)
static double double double double la
static double double double double double double double double double double lct
static string SolarEclipseOccurrence(int ds, int zc, double dy, int mn, int yr)
Determine if a solar eclipse is likely to occur.
static double SolveCubic(double w)
For W, in radians, return S, also in radians.
static double NewMoon(int ds, int zc, double dy, int mn, int yr)
Calculate Julian date of New Moon.
static double double double dy1
Local date of moonset.
static double double double double double double double double double double double au MoonSetAz_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double double double double double planetHLong2
static double double double double string s SunriseAZ_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double ParallaxHA(double hh, double hm, double hs, double dd, double dm, double ds, PACoordinateType sw, double gp, double ht, double hp)
Calculate corrected hour angle in decimal hours.
static double double double int int double int gmn
static double double double double string s TwilightAMLCT_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double f
Helper function for lunar_eclipse_occurrence.
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 double cometLatDeg
static double double double double double double double double q MagSolarEclipse_L7390(double x, double y, double igday, int gmonth, int gyear, double tm, double glong, double glat, double hp)
static double double double int mn1
static double ParallaxDec(double hh, double hm, double hs, double dd, double dm, double ds, PACoordinateType sw, double gp, double ht, double hp)
Calculate corrected declination in decimal degrees.
static double SunEcc(double gd, int gm, int gy)
Eccentricity of the Sun-Earth orbit.
static double double double double double th
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)
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 string ESunRS(double ld, int lm, int ly, int ds, int zc, double gl, double gp)
static string ERS(double rah, double ram, double ras, double dd, double dm, double ds, double vd, double g)
Rise/Set status.
static double double double double double double di
static double double double double double double double double double lu
static double double double double string s SunsetAZ_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double double double double double double double double double double lct MoonSetLcDMY_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double SunsetLCT(double ld, int lm, int ly, int ds, int zc, double gl, double gp)
static double Degrees(double w)
Convert W to Degrees.
static double double double pm
static double SunriseLCT(double ld, int lm, int ly, int ds, int zc, double gl, double gp)
Calculate local civil time of sunrise.
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 double planetLatitude
static double double moonLatDeg
static double double double int int double int int gyr MoonSetLCT_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
static double SunELong(double gd, int gm, int gy)
Mean ecliptic longitude of the Sun at the epoch.
static double RightAscensionToHourAngle(double raHours, double raMinutes, double raSeconds, double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
Convert Right Ascension to Hour Angle.
static double paa
Helper function for ut_max_solar_eclipse.
static double double double double double a
static double double double int int double int int gyr MoonRiseLCT_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
static double MoonRiseLCT(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local time of moonrise.
static double UTEndTotalLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate end time of total phase of lunar eclipse (UT)
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)
static double NutatLong(double gd, int gm, int gy)
Nutation amount to be added in ecliptic longitude, in degrees.
static double TwilightPMLCT(double ld, int lm, int ly, int ds, int zc, double gl, double gp, PATwilightType tt)
Calculate evening twilight end, in local time.
static double dy1
Local date of moonrise.
static double RiseSetAzimuthSet(double rah, double ram, double ras, double dd, double dm, double ds, double vd, double g)
Azimuth of setting, 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 MoonLat(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate geocentric ecliptic latitude for the Moon.
static double LocalSiderealTimeToGreenwichSiderealTime(double localHours, double localMinutes, double localSeconds, double longitude)
Convert Local Sidereal Time to Greenwich Sidereal Time.
static double IInt(double w)
Original macro name: IINT.
static double double double moonHorPara MoonLongLatHP(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
static double TwilightAMLCT(double ld, int lm, int ly, int ds, int zc, double gl, double gp, PATwilightType tt)
Calculate morning twilight start, in local time.
static double a
Helper function for sunrise_lct()
static double RiseSetLocalSiderealTimeRise(double rah, double ram, double ras, double dd, double dm, double ds, double vd, double g)
Local sidereal time of rise, in hours.
static double double double double string s SunsetLCTL3710(double gd, int gm, int gy, double sr, double di, double gp)
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 UTMaxSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate time of maximum shadow for solar eclipse (UT)
static double HorizonCoordinatesToDeclination(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
Convert Horizon Coordinates to Declination (in decimal degrees)
static double double double int int double int int gyr MoonSetAz_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
static double DegreeHoursToDecimalDegrees(double degreeHours)
Convert Degree-Hours to Decimal Degrees.
static double Obliq(double greenwichDay, int greenwichMonth, int greenwichYear)
Obliquity of the Ecliptic for a Greenwich Date.
static double SunDist(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's distance from the Earth in astronomical units.
static double double double double double double b SolarEclipseOccurrence_L6855(double t, double k)
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 mm
Helper function for MoonRiseLCT.
static double MoonSetLCT(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local time of moonset.
static double HorizonCoordinatesToHourAngle(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
Convert Horizon Coordinates to Hour Angle (in decimal degrees)
static double double double xaa
static double double double int int double int int gyr MoonRiseAz_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
static double FPart(double w)
Original macro name: Fpart.
static double double double planetDistanceAU
static double double double y
static double Refract(double y2, PACoordinateType sw, double pr, double tr)
Calculate effects of refraction.
static double NutatObl(double greenwichDay, int greenwichMonth, int greenwichYear)
Nutation of Obliquity.
static double double double cometDistAU PCometLongLatDist(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr, double td, int tm, int ty, double q, double i, double p, double n)
static double planetLongitude
Calculate several planetary properties.
static double double double f NewMoonFullMoon_L6855(double k, double t)
static double int int yr1 MoonSetLcDMY(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
static double UTDayAdjust(double ut, double g1)
Original macro name: UTDayAdjust.
static double double double double double double double double q UTLastContactSolarEclipse_L7390(double x, double y, double igday, int gmonth, int gyear, double tm, double glong, double glat, double hp)
static double double q ParallaxHAL2870(double x, double y, double rc, double rp, double rs, double tp)
static double UTFirstContactLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of first shadow contact for lunar eclipse (UT)
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 double double double double qe
static double SunTrueAnomaly(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's true anomaly, i.e., how much its orbit deviates from a true circle to an ellipse.
static double SunDia(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's angular diameter in decimal degrees.
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 double double double string s ESunRS_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double double double int int double int int gyr MoonRiseLcDMY_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
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 double double double double double double double double double double au MoonRiseAz_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double GreenwichSiderealTimeToLocalSiderealTime(double greenwichHours, double greenwichMinutes, double greenwichSeconds, double geographicalLongitude)
Convert Greenwich Sidereal Time to Local Sidereal Time.
static double double double double double double double double double double lct MoonRiseLCT_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double UTLastContactLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of last shadow contact for lunar eclipse (UT)
static double double double double double double double qb PlanetLong_L4810(List< PlanetDataPrecise > pl, double ms)
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 EQELat(double rah, double ram, double ras, double dd, double dm, double ds, double gd, int gm, int gy)
Original macro name: EQElat.
static double double double e1
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 ut
Helper function for MoonRiseLCT.
static double DecimalDegreesSeconds(double decimalDegrees)
Return Seconds part of Decimal Degrees.
static double EquatorialCoordinatesToAzimuth(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
Convert Equatorial Coordinates to Azimuth (in decimal degrees)
static double UTEndUmbraLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate end time of umbra phase of lunar eclipse (UT)
static int JulianDateMonth(double julianDate)
Returns the month part of a Julian Date.
static double double double double double double double double double double lct MoonSetLCT_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double qa
Helper function for planet_long_lat()
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 double double double double string s SunriseLCTL3710(double gd, int gm, int gy, double sr, double di, double gp)
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 EccentricAnomaly(double am, double ec)
Solve Kepler's equation, and return value of the eccentric anomaly in radians.
static double RefractL3035(double pr, double tr, double y, double d)
Helper function for Refract.
static double Fract(double w)
Original macro name: FRACT.
static PAWarningFlag EGstUt(double gsh, double gsm, double gss, double gd, int gm, int gy)
Status of conversion of Greenwich Sidereal Time to Universal Time.
static double RiseSetLocalSiderealTimeSet(double rah, double ram, double ras, double dd, double dm, double ds, double vd, double g)
Local sidereal time of setting, in hours.
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 UTMaxLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate time of maximum shadow for lunar eclipse (UT)
static double MoonLong(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate geocentric ecliptic longitude for the Moon.
static double double double double double double double qg PlanetLong_L4945(double t, PlanetDataPrecise planet)
static double Unwind(double w)
Convert angle in radians to equivalent angle in degrees.
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 SunPeri(double gd, int gm, int gy)
Longitude of the Sun at perigee.
static double double double ca
static double SunriseAZ(double ld, int lm, int ly, int ds, int zc, double gl, double gp)
static double double qb PlanetLong_L4685(List< PlanetDataPrecise > pl)
static double MagLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate magnitude of lunar eclipse.
static double DecimalDegreesMinutes(double decimalDegrees)
Return Minutes part of Decimal Degrees.
static double Sign(double numberToCheck)
Calculate sign of number.
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 double double int int double int int gyr MoonSetLcDMY_L6680(double x, int ds, int zc, double gdy, int gmn, int gyr, double g1, double ut)
static double SunsetAZ(double ld, int lm, int ly, int ds, int zc, double gl, double gp)
Calculate azimuth of sunset.
static double Lint(double w)
Original macro name: LINT.
static double DecimalDegreesDegrees(double decimalDegrees)
Return Degrees part of Decimal Degrees.
static double EQELong(double rah, double ram, double ras, double dd, double dm, double ds, double gd, int gm, int gy)
Original macro name: EQElong.
static double double double double double double xbb
static double double double double planetHLong1
static double MoonSetAz(double dy, int mn, int yr, int ds, int zc, double gLong, double gLat)
Local azimuth of moonset.
static double double double double double qbb
static double UTStartUmbraLunarEclipse(double dy, int mn, int yr, int ds, int zc)
Calculate start time of umbra phase of lunar eclipse (UT)
static double double double int int yr1
static double double double double double double double double q UTFirstContactSolarEclipse_L7390(double x, double y, double igday, int gmonth, int gyear, double tm, double glong, double glat, double hp)
static double MagSolarEclipse(double dy, int mn, int yr, int ds, int zc, double glong, double glat)
Calculate magnitude of solar eclipse.
static double double double double qe PlanetLong_L4735(List< PlanetDataPrecise > pl, double ms, double t)
static double double double int int double gdy
static double Angle(double xx1, double xm1, double xs1, double dd1, double dm1, double ds1, double xx2, double xm2, double xs2, double dd2, double dm2, double ds2, PAAngleMeasure s)
Calculate the angle between two celestial objects.
static double double double double b1
static double double double double string s ETwilight_L3710(double gd, int gm, int gy, double sr, double di, double gp)
static double double double double double double double double double double lct MoonRiseLcDMY_L6700(double lct, int ds, int zc, double dy1, int mn1, int yr1, double gdy, int gmn, int gyr, double gLat)
static double DegreesMinutesSecondsToDecimalDegrees(double degrees, double minutes, double seconds)
Convert Degrees Minutes Seconds to Decimal Degrees.
static double double double qc
static double MoonMeanAnomaly(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate the Moon's mean anomaly.
static double double double double double double planetHLat
static double HMStoDH(double hours, double minutes, double seconds)
Convert a Civil Time (hours,minutes,seconds) to Decimal Hours.
static double TrueAnomaly(double am, double ec)
Solve Kepler's equation, and return value of the true anomaly in radians.
static double double double double dp
static double p
Helper function for parallax_ha.
static double double double double double double qf
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.
static double EquatorialCoordinatesToAltitude(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
Convert Equatorial Coordinates to Altitude (in decimal degrees)
static double cometLongDeg
Calculate longitude, latitude, and distance of parabolic-orbit comet.
PAAngleMeasure
Angle measurement units.
@ Degrees
Measurement by degrees.
PATwilightType
Twilight type.
PACoordinateType
Coordinate types.
PAWarningFlag
Warning flags for calculation results.