Exemplo n.º 1
0
        // MNeptune.Conjuction(double)
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten Durchgangs durch die Konjunktion mit der Sonne nach der julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Julianische Tageszahl des nächsten Durchgangs durch die Konjunktion mit der Sonne nach der julianischen Tageszahl.</returns>
        public static double Conjunction(double jd)
        {
            // Lokale Felder einrichten
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor((365.2425 * y + 1721060.0 - 2451569.379) / 367.486703) - 1.0;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Näherung berechnen
                k += 1.0;
                j  = 2451569.379 + k * 367.486703;

                // Hilfsfelder berechnen
                double m = MMath.Mod(MMath.ToRad(21.5569 + k * 2.194998), MMath.Pi2);
                double t = (j - 2451545.0) / 36525.0;
                double a = MMath.Mod(MMath.ToRad(207.83 + 8.51 * t), MMath.Pi2);
                double b = MMath.Mod(MMath.ToRad(276.74 + 209.98 * t), MMath.Pi2);
                double h;

                // Korrektur berechnen und anwenden
                h  = 0.0168;
                h += MMath.Polynome(t, -2.5606, 0.0088, 0.00002) * MMath.Sin(m);
                h += MMath.Polynome(t, -0.8611, -0.0037, 0.00002) * MMath.Cos(m);
                h += MMath.Polynome(t, 0.0118, -0.0004, 0.00001) * MMath.Sin(2.0 * m);
                h += MMath.Polynome(t, 0.0307, -0.0003) * MMath.Cos(2.0 * m);
                h += -0.5964 * MMath.Cos(a);
                h += 0.0728 * MMath.Cos(b);
                j += h;
            }
            return(j);
        }
Exemplo n.º 2
0
        // MNeptune.MeanLongitude(double)
        /// <summary>
        /// Liefert die mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianischen Tageszahl.</param>
        /// <returns>Mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double MeanLongitude(double jd)
        {
            // Lokale Felder einrichten und Länge berechnen
            double t = (jd - 2451545.0) / 36525.0;

            return(MMath.Mod(MMath.Polynome(t, 304.348665, 219.8833092, 0.00030882, 0.000000018), 360.0));
        }
Exemplo n.º 3
0
        // MNeptune.Opposition(double)
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten Durchgangs durch die Opposition mit der Sonne nach der aktuellen Systemzeit.
        /// </summary>
        /// <returns>Julianische Tageszahl des nächsten Durchgangs durch die Opposition mit der Sonne nach der aktuellen Systemzeit.</returns>
        public static double Opposition(double jd)
        {
            // Deklaration der lokalen Felder
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor((365.2425 * y + 1721060.0 - 2451753.122) / 367.486703) - 1.0;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Näherung berechnen
                k += 1.0;
                j  = 2451753.122 + k * 367.486703;

                // Hilfsfelder berechnen
                double m = MMath.Mod(MMath.ToRad(202.6544 + k * 2.194998), MMath.Pi2);
                double t = (j - 2451545.0) / 36525.0;
                double a = MMath.Mod(MMath.ToRad(207.83 + 8.51 * t), MMath.Pi2);
                double b = MMath.Mod(MMath.ToRad(276.74 + 209.98 * t), MMath.Pi2);
                double h;

                // Korrektur berechnen und anwenden
                h  = MMath.Polynome(t, -0.0140, 0.0000, 0.00001);
                h += MMath.Polynome(t, -1.3486, 0.0010, 0.00001) * MMath.Sin(m);
                h += MMath.Polynome(t, 0.8597, 0.0037) * MMath.Cos(m);
                h += MMath.Polynome(t, -0.0082, -0.0002, 0.00001) * MMath.Sin(2.0 * m);
                h += MMath.Polynome(t, 0.0037, -0.0003) * MMath.Cos(2.0 * m);
                h += -0.5964 * MMath.Cos(a);
                h += 0.0728 * MMath.Cos(b);
                j += h;
            }
            return(j);
        }
Exemplo n.º 4
0
        // MUranus.Conjuction(double)
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten Durchgangs durch die Konjunktion mit der Sonne nach der julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Julianische Tageszahl des nächsten Durchgangs durch die Konjunktion mit der Sonne nach der julianischen Tageszahl.</returns>
        public static double Conjunction(double jd)
        {
            // Lokale Felder einrichten
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor((365.2425 * y + 1721060.0 - 2451579.489) / 369.656035) - 1.0;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Näherung berechnen
                k += 1.0;
                j  = 2451579.489 + k * 369.656035;

                // Hilfsfelder berechnen
                double m = MMath.Mod(MMath.ToRad(31.5219 + k * 4.333093), MMath.Pi2);
                double t = (j - 2451545.0) / 36525.0;
                double a = MMath.Mod(MMath.ToRad(207.83 + 8.51 * t), MMath.Pi2);
                double b = MMath.Mod(MMath.ToRad(108.84 + 419.96 * t), MMath.Pi2);
                double h;

                // Korrektur berechnen und anwenden
                h  = MMath.Polynome(t, -0.0859, 0.0003);
                h += MMath.Polynome(t, -3.8179, -0.0148, 0.00003) * MMath.Sin(m);
                h += MMath.Polynome(t, 5.1228, -0.0105, -0.00002) * MMath.Cos(m);
                h += MMath.Polynome(t, -0.0803, 0.0011) * MMath.Sin(2.0 * m);
                h += MMath.Polynome(t, -0.1905, -0.0006) * MMath.Cos(2.0 * m);
                h += MMath.Polynome(t, 0.0088, 0.0001) * MMath.Sin(3.0 * m);
                h += 0.8850 * MMath.Cos(a);
                h += 0.2153 * MMath.Cos(b);
                j += h;
            }
            return(j);
        }
Exemplo n.º 5
0
        // MEarth.MeanLongitude(double)
        /// <summary>
        /// Liefert die mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double MeanLongitude(double jd)
        {
            // Lokale Felder einrichten und Länge berechnen
            double t = (jd - 2451545.0) / 36525.0;

            return(MMath.Mod(MMath.Polynome(t, 100.466457, 36000.7698278, 0.00030322, 0.000000020), 360.0));
        }
Exemplo n.º 6
0
        // MUranus.MeanLongitude(double)
        /// <summary>
        /// Liefert die mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianischen Tageszahl.</param>
        /// <returns>Mittlere Länge der mittleren Planetenbahn zur julianischen Tageszahl.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double MeanLongitude(double jd)
        {
            // Lokale Felder einrichten und Länge berechnen
            double t = (jd - 2451545.0) / 36525.0;

            return(MMath.Mod(MMath.Polynome(t, 314.055005, 429.8640561, 0.00030390, 0.000000026), 360.0));
        }
Exemplo n.º 7
0
        // MUranus.Opposition(double)
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten Durchgangs durch die Opposition mit der Sonne nach der aktuellen Systemzeit.
        /// </summary>
        /// <returns>Julianische Tageszahl des nächsten Durchgangs durch die Opposition mit der Sonne nach der aktuellen Systemzeit.</returns>
        public static double Opposition(double jd)
        {
            // Lokale Felder einrichten
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor((365.2425 * y + 1721060.0 - 2451764.317) / 369.656035) - 1.0;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Näherung berechnen
                k += 1.0;
                j  = 2451764.317 + k * 369.656035;

                // Hilfsfelder berechnen
                double m = MMath.Mod(MMath.ToRad(213.6884 + k * 4.333093), MMath.Pi2);
                double t = (j - 2451545.0) / 36525.0;
                double a = MMath.Mod(MMath.ToRad(207.83 + 8.51 * t), MMath.Pi2);
                double b = MMath.Mod(MMath.ToRad(108.84 + 419.96 * t), MMath.Pi2);
                double h;

                // Korrektur berechnen und anwenden
                h  = MMath.Polynome(t, 0.0844, -0.0006);
                h += MMath.Polynome(t, -0.1048, 0.0246) * MMath.Sin(m);
                h += MMath.Polynome(t, -5.1221, 0.0104, 0.00003) * MMath.Cos(m);
                h += MMath.Polynome(t, -0.1428, 0.0005) * MMath.Sin(2.0 * m);
                h += MMath.Polynome(t, -0.0148, -0.0013) * MMath.Cos(2.0 * m);
                h += 0.0055 * MMath.Cos(3.0 * m);
                h += 0.8850 * MMath.Cos(a);
                h += 0.2153 * MMath.Cos(b);
                j += h;
            }
            return(j);
        }
Exemplo n.º 8
0
        private static double m_TL4;         // Wahre Länge für Callisto.

        // ------------------- //
        // Felder und Methoden //
        // ------------------- //
        // MGalileanMoon.Calculate(double)
        /// <summary>
        /// Richtet die privaten Felder zur julianischen Tageszahl ein.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        private static void Calculate(double jd)
        {
            // Tageszahl berechnen
            m_d = jd - 2443000.5;

            // ---------- //
            // Basisdaten //
            // ---------- //

            // Mittlere Längen berechnen
            m_ML1 = MMath.ToRad(MMath.Mod(106.077187 + 203.48895579033 * m_d, 360.0));
            m_ML2 = MMath.ToRad(MMath.Mod(175.731615 + 101.37472473479 * m_d, 360.0));
            m_ML3 = MMath.ToRad(MMath.Mod(120.558829 + 50.31760920702 * m_d, 360.0));
            m_ML4 = MMath.ToRad(MMath.Mod(84.444587 + 21.57107117668 * m_d, 360.0));

            // Perijovenlängen berechnen
            m_LP1 = MMath.ToRad(MMath.Mod(97.088086 + 0.16138586144 * m_d, 360.0));
            m_LP2 = MMath.ToRad(MMath.Mod(154.866335 + 0.04726306609 * m_d, 360.0));
            m_LP3 = MMath.ToRad(MMath.Mod(188.184037 + 0.00712733949 * m_d, 360.0));
            m_LP4 = MMath.ToRad(MMath.Mod(335.286807 + 0.00183999637 * m_d, 360.0));

            // Knotenlängen berechnen
            m_LO1 = MMath.ToRad(MMath.Mod(312.334566 - 0.13279385940 * m_d, 360.0));
            m_LO2 = MMath.ToRad(MMath.Mod(100.441116 - 0.03263063731 * m_d, 360.0));
            m_LO3 = MMath.ToRad(MMath.Mod(119.194241 - 0.00717703155 * m_d, 360.0));
            m_LO4 = MMath.ToRad(MMath.Mod(322.618633 - 0.00175933880 * m_d, 360.0));

            // Korrektur der Jupiterlänge berechnen
            m_G0  = 0.33033 * MMath.Sin(MMath.ToRad(163.679 + 0.0010512 * m_d));
            m_G0 += 0.03439 * MMath.Sin(MMath.ToRad(34.486 - 0.0161731 * m_d));

            // Phase der freien Libration berechnen
            m_Phi = MMath.ToRad(MMath.Mod(199.676608 + 0.17379190461 * m_d, 360.0));

            // Knotenlänge des Jupiteräquator berechnen
            m_Psi = MMath.ToRad(MMath.Mod(316.518203 + 0.00000208362 * m_d, 360.0));

            // Mittlere Anomalien berechnen
            m_G1 = MMath.ToRad(MMath.Mod(30.237557 + 0.08309257010 * m_d + m_G0, 360.0));
            m_G2 = MMath.ToRad(MMath.Mod(31.978528 + 0.03345973390 * m_d, 360.0));

            // Länge des Perihels berechnen
            m_Pi = MMath.ToRad(13.469942);

            // ----------- //
            // Korrekturen //
            // ----------- //

            // Hilfswinkel einrichten
            m_H1 = MMath.ToRad(52.225);

            // Wahre Längen berechnen
            m_TL1 = m_ML1 + MGalileanMoon.m_dL1();
            m_TL2 = m_ML2 + MGalileanMoon.m_dL2();
            m_TL3 = m_ML3 + MGalileanMoon.m_dL3();
            m_TL4 = m_ML4 + MGalileanMoon.m_dL4();
        }
Exemplo n.º 9
0
        // MEarth.Direction(double, double, double, double)
        /// <summary>
        /// Liefert die geographische Richtung zweier Orte auf der Erdoberfläche.
        /// </summary>
        /// <param name="lamdaA">Geographische Länge des Ortes A.</param>
        /// <param name="phiA">Geographische Breite des Ortes A.</param>
        /// <param name="lamdaB">Geographische Länge des Ortes B.</param>
        /// <param name="phiB">Geographische Breite des Ortes B.</param>
        /// <returns>Geographische Richtung zweier Orte auf der Erdoberfläche.</returns>
        public static double Direction(double lamdaA, double phiA, double lamdaB, double phiB)
        {
            // Lokale Felder einrichten
            double d = MMath.Cos(phiA) * MMath.Tan(phiB) - MMath.Sin(phiA) * MMath.Cos(lamdaA - lamdaB);

            // Winkel berechnen und liefern
            if (d == 0.0)
            {
                return(0.0);
            }
            return(MMath.Mod(MMath.ArcTan(MMath.Sin(lamdaA - lamdaB), d), MMath.Pi2));
        }
Exemplo n.º 10
0
        // MEphemerides.NutationInObliquity(double)
        /// <summary>
        /// Liefert die Nutation der Ekliptikschiefe zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Nutation der Ekliptikschiefe zur julianischen Tageszahl.</returns>
        public static double NutationInObliquity(double jd)
        {
            // Lokale Felder einrichten
            double t = (jd - 2451545.0) / 36525.0;
            double d = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 297.85036, 445267.111480, -0.0019142, 1 / 189474)), MMath.Pi2);
            double s = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 357.52772, 35999.050340, -0.0001603, -1 / 300000)), MMath.Pi2);
            double m = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 134.96298, 477198.867398, 0.0086972, 1 / 56250)), MMath.Pi2);
            double f = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 93.27191, 483202.017538, -0.0036825, 1 / 327270)), MMath.Pi2);
            double o = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 125.04452, -1934.136261, 0.0020708, 1 / 450000)), MMath.Pi2);
            double e = 0.0;

            // Korrektur berechnen und anwenden
            e += (92025.0 + 8.9 * t) * MMath.Cos(o);
            e += (5736.0 - 3.1 * t) * MMath.Cos(-2.0 * d + 2.0 * f + 2.0 * o);
            e += (977.0 - 0.5 * t) * MMath.Cos(+2.0 * f + 2.0 * o);
            e += (-895.0 + 0.5 * t) * MMath.Cos(+2.0 * o);
            e += (54.0 - 0.1 * t) * MMath.Cos(s);
            e += (-7.0) * MMath.Cos(m);
            e += (224.0 - 0.6 * t) * MMath.Cos(-2.0 * d + s + 2.0 * f + 2.0 * o);
            e += (200.0) * MMath.Cos(+2.0 * f + o);
            e += (129.0 - 0.1 * t) * MMath.Cos(m + 2.0 * f + 2.0 * o);
            e += (-95.0 + 0.3 * t) * MMath.Cos(-2.0 * d - s + 2.0 * f + 2.0 * o);
            e += (-70.0) * MMath.Cos(-2.0 * d + 2.0 * f + o);
            e += (-53.0) * MMath.Cos(-m + 2.0 * f + 2.0 * o);
            e += (-33.0) * MMath.Cos(m + o);
            e += (26.0) * MMath.Cos(2.0 * d - m + 2.0 * f + 2.0 * o);
            e += (32.0) * MMath.Cos(-m + o);
            e += (27.0) * MMath.Cos(m + 2.0 * f + o);
            e += (-24.0) * MMath.Cos(-2.0 * m + 2.0 * f + o);
            e += (16.0) * MMath.Cos(2.0 * d + 2.0 * f + 2.0 * o);
            e += (13.0) * MMath.Cos(+2.0 * m + 2.0 * f + 2.0 * o);
            e += (-12.0) * MMath.Cos(-2.0 * d + m + 2.0 * f + 2.0 * o);
            e += (-10.0) * MMath.Cos(-m + 2.0 * f + o);
            e += (-8.0) * MMath.Cos(2.0 * d - m + o);
            e += (7.0) * MMath.Cos(-2.0 * d + 2.0 * s + 2.0 * f + 2.0 * o);
            e += (9.0) * MMath.Cos(s + o);
            e += (7.0) * MMath.Cos(-2.0 * d + m + o);
            e += (6.0) * MMath.Cos(-s + o);
            e += (5.0) * MMath.Cos(2.0 * d - m + 2.0 * f + o);
            e += (3.0) * MMath.Cos(2.0 * d + m + 2.0 * f + 2.0 * o);
            e += (-3.0) * MMath.Cos(s + 2.0 * f + 2.0 * o);
            e += (3.0) * MMath.Cos(-s + 2.0 * f + 2.0 * o);
            e += (3.0) * MMath.Cos(2.0 * d + 2.0 * f + o);
            e += (-3.0) * MMath.Cos(-2.0 * d + 2.0 * m + 2.0 * f + 2.0 * o);
            e += (-3.0) * MMath.Cos(-2.0 * d + m + 2.0 * f + o);
            e += (3.0) * MMath.Cos(2.0 * d - 2.0 * m + o);
            e += (3.0) * MMath.Cos(2.0 * d + o);
            e += (3.0) * MMath.Cos(-2.0 * d - s + 2.0 * f + o);
            e += (3.0) * MMath.Cos(-2.0 * d + o);
            e += (3.0) * MMath.Cos(+2.0 * m + 2.0 * f + o);
            return(MMath.ToRad(e / (10000.0 * 3600.0)));
        }
Exemplo n.º 11
0
        // MMoon.m_LongitudeLow(double)
        /// <summary>
        /// Liefert die geozentrisch-ekliptikale Länge des Mondes zur julianischen Tageszahl in geringer Genauigkeit.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl</param>
        /// <returns>Geozentrisch-ekliptikale Länge des Mondes zur julianischen Tageszahl.</returns>
        private static double m_LongitudeLow(double jd)
        {
            // Lokale Felder einrichten
            double t = (jd - 2451545.0) / 36525.0;
            double l = MMath.Mod(218.32 + 481267.883 * t, 360.0);

            // Terme aufsummieren
            l += 6.29 * MMath.Sin(MMath.ToRad(134.9 + 477198.85 * t));
            l += -1.27 * MMath.Sin(MMath.ToRad(259.2 - 413335.38 * t));
            l += 0.66 * MMath.Sin(MMath.ToRad(235.7 + 890534.23 * t));
            l += 0.21 * MMath.Sin(MMath.ToRad(269.9 + 954397.70 * t));
            l += -0.19 * MMath.Sin(MMath.ToRad(357.5 + 35999.05 * t));
            l += -0.11 * MMath.Sin(MMath.ToRad(186.6 + 966404.05 * t));
            return(MMath.ToRad(MMath.Mod(l, 360.0)));
        }
Exemplo n.º 12
0
 // MNeptune.MeanAnomaly(double)
 /// <summary>
 /// Liefert die mittlere Anomalie der mittleren Planetenbahn zur julianischen Tageszahl.
 /// </summary>
 /// <param name="jd">Julianische Tageszahl.</param>
 /// <returns>Mittlere Anomalie der mittleren Planetenbahn zur julianischen Tageszahl.</returns>
 /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
 public static double MeanAnomaly(double jd)
 {
     // Rückgabe
     return(MMath.Mod(MNeptune.MeanLongitude(jd) + MNeptune.LongitudeOfPerihelion(jd), 360.0));
 }
Exemplo n.º 13
0
        // MEphemerides.NutationInLongitude(double)
        /// <summary>
        /// Liefert die Nutation der Länge zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Nutation der Länge zur julianischen Tageszahl.</returns>
        public static double NutationInLongitude(double jd)
        {
            // Lokale Felder einrichten
            double t = (jd - 2451545.0) / 36525.0;
            double d = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 297.85036, 445267.111480, -0.0019142, 1 / 189474)), MMath.Pi2);
            double s = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 357.52772, 35999.050340, -0.0001603, -1 / 300000)), MMath.Pi2);
            double m = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 134.96298, 477198.867398, 0.0086972, 1 / 56250)), MMath.Pi2);
            double f = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 93.27191, 483202.017538, -0.0036825, 1 / 327270)), MMath.Pi2);
            double o = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 125.04452, -1934.136261, 0.0020708, 1 / 450000)), MMath.Pi2);
            double p = 0.0;

            // Korrektur berechnen und anwenden
            p += (-171996.0 - 174.2 * t) * MMath.Sin(o);
            p += (-13187.0 - 1.6 * t) * MMath.Sin(-2.0 * d + 2.0 * f + 2.0 * o);
            p += (-2274.0 - 0.2 * t) * MMath.Sin(+2.0 * f + 2.0 * o);
            p += (2062.0 + 0.2 * t) * MMath.Sin(2.0 * o);
            p += (1426.0 - 3.4 * t) * MMath.Sin(s);
            p += (712.0 + 0.1 * t) * MMath.Sin(m);
            p += (-517.0 + 1.2 * t) * MMath.Sin(-2.0 * d + s + 2.0 * f + 2.0 * o);
            p += (-386.0 - 0.4 * t) * MMath.Sin(2.0 * f + o);
            p += (-301.0) * MMath.Sin(m + 2.0 * f + 2.0 * o);
            p += (217.0 - 0.5 * t) * MMath.Sin(-2.0 * d - s + 2.0 * f + 2.0 * o);
            p += (-158.0) * MMath.Sin(-2.0 * d + m);
            p += (129.0 + 0.1 * t) * MMath.Sin(-2.0 * d + 2.0 * f + o);
            p += (123.0) * MMath.Sin(-m + 2.0 * f + 2.0 * o);
            p += (63.0) * MMath.Sin(2.0 * d);
            p += (63.0 + 1.0 * t) * MMath.Sin(m + o);
            p += (-59.0) * MMath.Sin(2.0 * d - m + 2.0 * f + 2.0 * o);
            p += (-58.0 - 0.1 * t) * MMath.Sin(-m + o);
            p += (-51.0) * MMath.Sin(m + 2.0 * f + o);
            p += (48.0) * MMath.Sin(-2.0 * d + 2.0 * m);
            p += (46.0) * MMath.Sin(-2.0 * m + 2.0 * f + o);
            p += (-38.0) * MMath.Sin(2.0 * d + 2.0 * f + 2.0 * o);
            p += (-31.0) * MMath.Sin(+2.0 * m + 2.0 * f + 2.0 * o);
            p += (29.0) * MMath.Sin(+2.0 * m);
            p += (29.0) * MMath.Sin(-2.0 * d + m + 2.0 * f + 2.0 * o);
            p += (26.0) * MMath.Sin(+2.0 * f);
            p += (-22.0) * MMath.Sin(-2.0 * d + 2.0 * f);
            p += (21.0) * MMath.Sin(-m + 2.0 * f + o);
            p += (17.0 - 0.1 * t) * MMath.Sin(+2.0 * s);
            p += (16.0) * MMath.Sin(-m + o);
            p += (-16.0 + 0.1 * t) * MMath.Sin(-2.0 * d + 2.0 * s + 2.0 * f + 2.0 * o);
            p += (-15.0) * MMath.Sin(s + o);
            p += (-13.0) * MMath.Sin(-2.0 * d + m + o);
            p += (-12.0) * MMath.Sin(-s + o);
            p += (11.0) * MMath.Sin(+2.0 * m - 2.0 * f);
            p += (-10.0) * MMath.Sin(2.0 * d - m + 2.0 * f + o);
            p += (-8.0) * MMath.Sin(2.0 * d + m + 2.0 * f + 2.0 * o);
            p += (7.0) * MMath.Sin(s + 2.0 * f + 2.0 * o);
            p += (-7.0) * MMath.Sin(-2.0 * d + s + m);
            p += (-7.0) * MMath.Sin(-s + 2.0 * f + 2.0 * o);
            p += (-7.0) * MMath.Sin(2.0 * d + 2.0 * f + o);
            p += (6.0) * MMath.Sin(2.0 * d + m);
            p += (6.0) * MMath.Sin(-2.0 * d + 2.0 * m + 2.0 * f + 2.0 * o);
            p += (6.0) * MMath.Sin(-2.0 * d + m + 2.0 * f + o);
            p += (-6.0) * MMath.Sin(2.0 * d - 2.0 * m + o);
            p += (-6.0) * MMath.Sin(2.0 * d + o);
            p += (5.0) * MMath.Sin(-s + m);
            p += (-5.0) * MMath.Sin(-2.0 * d - s + 2.0 * f + o);
            p += (-5.0) * MMath.Sin(-2.0 * d + o);
            p += (-5.0) * MMath.Sin(+2.0 * m + 2.0 * f + o);
            p += (4.0) * MMath.Sin(-2.0 * d + 2.0 * m + o);
            p += (4.0) * MMath.Sin(-2.0 * d + s + 2.0 * f + o);
            p += (4.0) * MMath.Sin(-m - 2.0 * f);
            p += (-4.0) * MMath.Sin(-d - m);
            p += (-4.0) * MMath.Sin(-2.0 * d + s);
            p += (-4.0) * MMath.Sin(d);
            p += (3.0) * MMath.Sin(m + 2.0 * f);
            p += (-3.0) * MMath.Sin(-2.0 * m + 2.0 * f + 2.0 * o);
            p += (-3.0) * MMath.Sin(-d - s + m);
            p += (-3.0) * MMath.Sin(s + m);
            p += (-3.0) * MMath.Sin(s + m + 2.0 * f + 2.0 * o);
            p += (-3.0) * MMath.Sin(2.0 * d + s - m + 2.0 * f + 2.0 * o);
            p += (-3.0) * MMath.Sin(+3.0 * m + 2.0 * f + 2.0 * o);
            p += (-3.0) * MMath.Sin(2.0 * d - s + 2.0 * f + 2.0 * o);
            return(MMath.ToRad(p / (10000.0 * 3600.0)));
        }
Exemplo n.º 14
0
        // MMoon.m_LongitudeMedium(double)
        /// <summary>
        /// Liefert die geozentrisch-ekliptikale Länge des Mondes zur julianischen Tageszahl in mittlerer Genauigkeit.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Geozentrisch-ekliptikale Länge des Mondes zur julianischen Tageszahl.</returns>
        private static double m_LongitudeMedium(double jd)
        {
            // Lokale Felder einrichten
            double t  = (jd - 2451545.0) / 36525.0;
            double dl = 0.0;
            double l  = MMath.ToRad(MMath.Mod(MMath.Polynome(t, 218.3164477, 481267.88123421, -0.0015786, 1 / 538841, -1 / 65194000), 360.0));
            double d  = MMath.ToRad(MMath.Mod(MMath.Polynome(t, 297.8501921, 445267.1114034, -0.0018819, 1 / 545868, -1 / 113065000), 360.0));
            double s  = MMath.ToRad(MMath.Mod(MMath.Polynome(t, 357.5291092, 35999.0502909, -0.0001536, 1 / 24490000), 360.0));
            double m  = MMath.ToRad(MMath.Mod(MMath.Polynome(t, 134.9633964, 477198.8675055, 0.0087414, 1 / 69699, -1 / 14712000), 360.0));
            double f  = MMath.ToRad(MMath.Mod(MMath.Polynome(t, 93.2720950, 483202.0175233, -0.0036539, 1 / 3526000, 1 / 863310000), 360.0));

            // Störungen durch Planeten Jupiter, Venus und Erde
            double a1 = MMath.ToRad(MMath.Mod(119.75 + 131.849 * t, 360.0));
            double a2 = MMath.ToRad(MMath.Mod(53.09 + 479264.290 * t, 360.0));
            double a3 = MMath.ToRad(MMath.Mod(313.45 + 481266.848 * t, 360.0));

            // Terme für Extentrizität
            double e0 = 1.0;
            double e1 = MMath.Polynome(t, 1.0, -0.002516, -0.0000074);
            double e2 = e1 * e1;

            // Störungsterme aufsummieren
            dl += 6288774 * e0 * MMath.Sin(+m);
            dl += 1274027 * e0 * MMath.Sin(2.0 * d - m);
            dl += 658314 * e0 * MMath.Sin(2.0 * d);
            dl += 213618 * e0 * MMath.Sin(+2.0 * m);
            dl += -185116 * e1 * MMath.Sin(+s);
            dl += -114332 * e0 * MMath.Sin(+2.0 * f);
            dl += 58793 * e0 * MMath.Sin(2.0 * d - 2.0 * m);
            dl += 57066 * e1 * MMath.Sin(2.0 * d - s - m);
            dl += 53322 * e0 * MMath.Sin(2.0 * d + m);
            dl += 45758 * e1 * MMath.Sin(2.0 * d - s);
            dl += -40923 * e1 * MMath.Sin(+s - m);
            dl += -34720 * e0 * MMath.Sin(d);
            dl += -30383 * e1 * MMath.Sin(+s - m);
            dl += 15327 * e0 * MMath.Sin(2.0 * d - 2.0 * f);
            dl += -12528 * e0 * MMath.Sin(+m + 2.0 * f);
            dl += 10980 * e0 * MMath.Sin(+m - 2.0 * f);
            dl += 10675 * e0 * MMath.Sin(4.0 * d - m);
            dl += 10034 * e0 * MMath.Sin(+3.0 * m);
            dl += 8548 * e0 * MMath.Sin(4.0 * d - 2.0 * m);
            dl += -7888 * e1 * MMath.Sin(2.0 * d + s - m);
            dl += -6766 * e1 * MMath.Sin(2.0 * d + s);
            dl += -5163 * e0 * MMath.Sin(d - m);
            dl += 4987 * e1 * MMath.Sin(d + s);
            dl += 4036 * e1 * MMath.Sin(2.0 * d - s);
            dl += 3994 * e0 * MMath.Sin(2.0 * d + 2.0 * m);
            dl += 3861 * e0 * MMath.Sin(4.0 * d);
            dl += 3665 * e0 * MMath.Sin(2.0 * d - 3.0 * m);
            dl += -2689 * e1 * MMath.Sin(+s - 2.0 * m);
            dl += -2602 * e0 * MMath.Sin(2.0 * d - m + 2.0 * f);
            dl += 2390 * e1 * MMath.Sin(2.0 * d - s - 2.0 * m);
            dl += -2348 * e0 * MMath.Sin(d + m);
            dl += 2236 * e2 * MMath.Sin(2.0 * d + 2.0 * s);
            dl += -2120 * e1 * MMath.Sin(s + 2.0 * m);
            dl += -2069 * e2 * MMath.Sin(2.0 * s);
            dl += 2048 * e2 * MMath.Sin(2.0 * d - 2.0 * s - m);
            dl += -1773 * e0 * MMath.Sin(2.0 * d + m - 2.0 * f);
            dl += -1595 * e0 * MMath.Sin(2.0 * d + 2.0 * f);
            dl += 1215 * e1 * MMath.Sin(4.0 * d - s - m);
            dl += -1110 * e0 * MMath.Sin(2.0 * m + 2.0 * f);
            dl += -892 * e0 * MMath.Sin(3.0 * d - m);
            dl += -810 * e1 * MMath.Sin(2.0 * d + s + m);
            dl += 759 * e1 * MMath.Sin(4.0 * d - s - 2.0 * m);
            dl += -713 * e2 * MMath.Sin(2.0 * s - m);
            dl += -700 * e2 * MMath.Sin(2.0 * d + 2.0 * s - m);
            dl += 691 * e1 * MMath.Sin(2.0 * d - s - 2.0 * m);
            dl += 596 * e1 * MMath.Sin(2.0 * d - s - 2.0 * f);
            dl += 549 * e0 * MMath.Sin(4.0 * d + m);
            dl += 537 * e0 * MMath.Sin(4.0 * m);
            dl += 520 * e1 * MMath.Sin(4.0 * d - s);
            dl += -487 * e0 * MMath.Sin(d - 2.0 * m);
            dl += -399 * e1 * MMath.Sin(2.0 * d - s - 2.0 * f);
            dl += -381 * e0 * MMath.Sin(2.0 * m - 2.0 * f);
            dl += 351 * e1 * MMath.Sin(d + s + m);
            dl += -340 * e0 * MMath.Sin(3.0 * d - 2.0 * m);
            dl += 330 * e0 * MMath.Sin(4.0 * d - 3.0 * m);
            dl += 327 * e1 * MMath.Sin(2.0 * d - s + 2.0 * m);
            dl += -323 * e2 * MMath.Sin(2.0 * s + m);
            dl += 299 * e1 * MMath.Sin(d + s - m);
            dl += 294 * e0 * MMath.Sin(2.0 * d + 3.0 * m);

            // Störungen durch Planeten
            dl += 3958 * MMath.Sin(a1);
            dl += 1962 * MMath.Sin(l - f);
            dl += 318 * MMath.Sin(a2);

            // Terme anwenden und Länge normalisieren
            return(MMath.ToRad(MMath.Mod(l + dl / 1000000.0, 360.0)));
        }
Exemplo n.º 15
0
        // MMoon.NewMoon(double, ref EEclipseType)
        /// <summary>
        /// Setzt die Kennung der Finsternisabschätzung und liefert die julianische Tageszahl des nächsten Neumondes nach der julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <param name="type">Kennung der Finsternisabschätzung.</param>
        /// <returns>Julianische Tageszahl des nächsten Neumondes nach der julianischen Tageszahl.</returns>
        public static double NewMoon(double jd, ref EEclipseType type)
        {
            // Lokale Felder einrichten und Ereigniszeit berechen
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor(12.3685 * (y - 2000.0)) - 1.0;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Lunation inkrementieren und lokale Felder einrichten
                k += 1.0;
                double t = k / 1236.85;

                // Näherung berechnen und Hilfsfelder einrichten
                j = MMath.Polynome(t, 2451550.09766 + 29.530588861 * k, 0.0, 0.00015437, -0.000000150, 0.00000000073);
                double e1 = MMath.Polynome(t, 1.0, -0.002516, -0.0000074);
                double e2 = e1 * e1;
                double m  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 2.5534 + 29.10535670 * k, 0.0, -0.0000014, -0.00000011)), MMath.Pi2);
                double a  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 201.5643 + 385.81693528 * k, 0.0, 0.0107582, 0.00001238, -0.000000058)), MMath.Pi2);
                double f  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 160.7108 + 390.67050284 * k, 0.0, -0.0016118, -0.00000227, 0.000000011)), MMath.Pi2);
                double o  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 124.7746 - 1.56375588 * k, 0.0, 0.0020672, 0.00000215)), MMath.Pi2);
                double h;

                // Korrektur berechnen
                h  = -0.40720 * MMath.Sin(a);
                h += 0.17241 * e1 * MMath.Sin(m);
                h += 0.01608 * MMath.Sin(2.0 * a);
                h += 0.01039 * MMath.Sin(2.0 * f);
                h += 0.00739 * e1 * MMath.Sin(a - m);
                h += -0.00514 * e1 * MMath.Sin(a + m);
                h += 0.00208 * e2 * MMath.Sin(2.0 * m);
                h += -0.00111 * MMath.Sin(a - 2.0 * f);
                h += -0.00057 * MMath.Sin(a + 2.0 * f);
                h += 0.00056 * e1 * MMath.Sin(2.0 * a + m);
                h += -0.00042 * MMath.Sin(3.0 * a);
                h += 0.00042 * e1 * MMath.Sin(m + 2.0 * f);
                h += 0.00038 * e1 * MMath.Sin(m - 2.0 * f);
                h += -0.00024 * e1 * MMath.Sin(2.0 * a - m);
                h += -0.00017 * MMath.Sin(o);
                h += -0.00007 * MMath.Sin(a + 2.0 * m);
                h += 0.00004 * MMath.Sin(2.0 * a - 2.0 * f);
                h += 0.00004 * MMath.Sin(3.0 * m);
                h += 0.00003 * MMath.Sin(a + m - 2.0 * f);
                h += 0.00003 * MMath.Sin(2.0 * a + 2.0 * f);
                h += -0.00003 * MMath.Sin(a + m + 2.0 * f);
                h += 0.00003 * MMath.Sin(a - m + 2.0 * f);
                h += -0.00002 * MMath.Sin(a - m - 2.0 * f);
                h += -0.00002 * MMath.Sin(3.0 * a + m);
                h += 0.00002 * MMath.Sin(4.0 * a);

                // Störungen durch Planeten berechnen
                h += 0.000325 * MMath.Sin(MMath.ToRad(299.77 + 0.107408 * k - 0.009173 * t * t));
                h += 0.000165 * MMath.Sin(MMath.ToRad(251.88 + 0.016321 * k));
                h += 0.000164 * MMath.Sin(MMath.ToRad(251.83 + 26.651886 * k));
                h += 0.000126 * MMath.Sin(MMath.ToRad(349.42 + 36.412478 * k));
                h += 0.000110 * MMath.Sin(MMath.ToRad(84.66 + 18.206239 * k));
                h += 0.000062 * MMath.Sin(MMath.ToRad(141.74 + 53.303771 * k));
                h += 0.000060 * MMath.Sin(MMath.ToRad(207.14 + 2.453732 * k));
                h += 0.000056 * MMath.Sin(MMath.ToRad(154.84 + 7.306860 * k));
                h += 0.000047 * MMath.Sin(MMath.ToRad(34.52 + 27.261239 * k));
                h += 0.000042 * MMath.Sin(MMath.ToRad(207.19 + 0.121824 * k));
                h += 0.000040 * MMath.Sin(MMath.ToRad(291.34 + 1.844379 * k));
                h += 0.000037 * MMath.Sin(MMath.ToRad(161.72 + 24.198154 * k));
                h += 0.000035 * MMath.Sin(MMath.ToRad(239.56 + 25.513099 * k));
                h += 0.000023 * MMath.Sin(MMath.ToRad(331.55 + 3.592518 * k));

                // Korrekturen anwenden
                j += h;
            }

            // Ekliptikale Breite berechnen und Finsternisabschätzung bestimmen
            double b = MMath.Abs(MMoon.Latitude(EPrecision.Medium, j));

            if (b < 0.015223)
            {
                type = EEclipseType.SunCentralDefinite;
            }
            else if (b < 0.018210)
            {
                type = EEclipseType.SunCentralPotential;
            }
            else if (b < 0.024595)
            {
                type = EEclipseType.SunPartialDefinite;
            }
            else if (b < 0.027586)
            {
                type = EEclipseType.SunPartialPotential;
            }
            else
            {
                type = EEclipseType.SunNoEclipse;
            }
            return(j);
        }
Exemplo n.º 16
0
        // MMoon.FirstQuarter(double)
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten ersten Viertels nach der julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Julianische Tageszahl des nächsten ersten Viertels nach der julianischen Tageszahl.</returns>
        public static double FirstQuarter(double jd)
        {
            // Lokale Felder einrichten
            double y = (double)MCalendar.GregorianYear(jd) + MEphemerides.YearFragment(jd);
            double k = MMath.Floor(12.3685 * (y - 2000.0)) - 0.75;
            double j = 0.0;

            // Berechnungsschleife
            while (j <= jd)
            {
                // Lunation inkrementieren und lokale Felder einrichten
                k += 1.0;
                double t = k / 1236.85;

                // Näherung berechnen und Hilfsfelder einrichten
                j = MMath.Polynome(t, 2451550.09766 + 29.530588861 * k, 0.0, 0.00015437, -0.000000150, 0.00000000073);
                double e1 = MMath.Polynome(t, 1.0, -0.002516, -0.0000074);
                double e2 = e1 * e1;
                double m  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 2.5534 + 29.10535670 * k, 0.0, -0.0000014, -0.00000011)), MMath.Pi2);
                double a  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 201.5643 + 385.81693528 * k, 0.0, 0.0107582, 0.00001238, -0.000000058)), MMath.Pi2);
                double f  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 160.7108 + 390.67050284 * k, 0.0, -0.0016118, -0.00000227, 0.000000011)), MMath.Pi2);
                double o  = MMath.Mod(MMath.ToRad(MMath.Polynome(t, 124.7746 - 1.56375588 * k, 0.0, 0.0020672, 0.00000215)), MMath.Pi2);
                double h  = 0.0;

                // Korrektur berechnen
                h  = -0.62801 * MMath.Sin(a);
                h += 0.17172 * e1 * MMath.Sin(m);
                h += -0.01183 * e1 * MMath.Sin(a + m);
                h += 0.00862 * MMath.Sin(2.0 * a);
                h += 0.00804 * MMath.Sin(2.0 * f);
                h += 0.00454 * e1 * MMath.Sin(a - m);
                h += 0.00204 * e2 * MMath.Sin(2.0 * m);
                h += -0.00180 * MMath.Sin(a - 2.0 * f);
                h += -0.00070 * MMath.Sin(a + 2.0 * f);
                h += -0.00040 * MMath.Sin(3.0 * a);
                h += -0.00034 * e1 * MMath.Sin(2.0 * a - m);
                h += 0.00032 * e1 * MMath.Sin(m + 2.0 * f);
                h += 0.00032 * e1 * MMath.Sin(m - 2.0 * f);
                h += -0.00028 * e2 * MMath.Sin(a + 2.0 * m);
                h += 0.00027 * e1 * MMath.Sin(2.0 * a + m);
                h += -0.00017 * MMath.Sin(o);
                h += -0.00005 * MMath.Sin(a - m - 2.0 * f);
                h += 0.00004 * MMath.Sin(2.0 * a + 2.0 * f);
                h += -0.00004 * MMath.Sin(a + m + 2.0 * f);
                h += 0.00004 * MMath.Sin(a - 2.0 * m);
                h += 0.00003 * MMath.Sin(a + m - 2.0 * f);
                h += 0.00003 * MMath.Sin(3.0 * m);
                h += 0.00002 * MMath.Sin(2.0 * a - 2.0 * f);
                h += 0.00002 * MMath.Sin(a - m + 2.0 * f);
                h += -0.00002 * MMath.Sin(3.0 * a + m);

                // Viertelkorrektur berechnen
                h += 0.00306;
                h += -0.00038 * e1 * MMath.Cos(m);
                h += 0.00026 * MMath.Cos(a);
                h += -0.00002 * MMath.Cos(a - m);
                h += 0.00002 * MMath.Cos(a + m);
                h += 0.00002 * MMath.Cos(2.0 * f);

                // Störungen durch Planeten berechnen
                h += 0.000325 * MMath.Sin(MMath.ToRad(299.77 + 0.107408 * k - 0.009173 * t * t));
                h += 0.000165 * MMath.Sin(MMath.ToRad(251.88 + 0.016321 * k));
                h += 0.000164 * MMath.Sin(MMath.ToRad(251.83 + 26.651886 * k));
                h += 0.000126 * MMath.Sin(MMath.ToRad(349.42 + 36.412478 * k));
                h += 0.000110 * MMath.Sin(MMath.ToRad(84.66 + 18.206239 * k));
                h += 0.000062 * MMath.Sin(MMath.ToRad(141.74 + 53.303771 * k));
                h += 0.000060 * MMath.Sin(MMath.ToRad(207.14 + 2.453732 * k));
                h += 0.000056 * MMath.Sin(MMath.ToRad(154.84 + 7.306860 * k));
                h += 0.000047 * MMath.Sin(MMath.ToRad(34.52 + 27.261239 * k));
                h += 0.000042 * MMath.Sin(MMath.ToRad(207.19 + 0.121824 * k));
                h += 0.000040 * MMath.Sin(MMath.ToRad(291.34 + 1.844379 * k));
                h += 0.000037 * MMath.Sin(MMath.ToRad(161.72 + 24.198154 * k));
                h += 0.000035 * MMath.Sin(MMath.ToRad(239.56 + 25.513099 * k));
                h += 0.000023 * MMath.Sin(MMath.ToRad(331.55 + 3.592518 * k));

                // Korrekturen anwenden
                j += h;
            }
            return(j);
        }