Exemple #1
0
        // MUranus.LongitudeOfPerihelion()
        /// <summary>
        /// Liefert die Länge des Perihels der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Länge des Perihels der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double LongitudeOfPerihelion()
        {
            // Lokale Felder einrichten und Länge berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.LongitudeOfPerihelion(jd));
        }
Exemple #2
0
        // MUranus.Inclination()
        /// <summary>
        /// Liefert die Neigung der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Neigung der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double Inclination()
        {
            // Lokale Felder einrichten und Bahnneigung berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Inclination(jd));
        }
Exemple #3
0
        // MUranus.MeanAnomaly()
        /// <summary>
        /// Liefert die mittlere Anomalie der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Mittlere Anomalie der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double MeanAnomaly()
        {
            // Lokale Felder einrichten und Anomalie berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.MeanAnomaly(jd));
        }
Exemple #4
0
        // MUranus.Eccentricity()
        /// <summary>
        /// Liefert die Exzentrizität der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Exzentrizität der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        public static double Eccentricity()
        {
            // Lokale Felder einrichten und Exzentrizität berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Eccentricity(jd));
        }
Exemple #5
0
        // MUranus.Conjunction()
        /// <summary>
        /// Liefert die julianische Tageszahl des nächsten Durchgangs durch die obere Konjunktion mit der Sonne nach der aktuellen Systemzeit.
        /// </summary>
        /// <returns>Julianische Tageszahl des nächsten Durchgangs durch die obere Konjunktion mit der Sonne nach der aktuellen Systemzeit.</returns>
        public static double Conjunction()
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Conjunction(jd));
        }
Exemple #6
0
        // ------------------- //
        // Felder und Methoden //
        // ------------------- //
        // MUranus.Latitude(EPrecision)
        /// <summary>
        /// Liefert die heliozentrisch-ekliptikale Breite zur aktuellen Systemzeit.
        /// </summary>
        /// <param name="value">Genauigkeitskennung.</param>
        /// <returns>Heliozentrisch-ekliptikale Breite zur aktuellen Systemzeit.</returns>
        public static double Latitude(EPrecision value)
        {
            // Lokale Felder einrichten
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Latitude(value, jd));
        }
Exemple #7
0
        // MUranus.Transit(double, double, double)
        /// <summary>
        /// Liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.</returns>
        public static double Transit(double lambda, double phi, double jd)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double h = 0.0;

            return(MUranus.Transit(lambda, phi, jd, ref h));
        }
Exemple #8
0
        // MUranus.MeanLongitude()
        /// <summary>
        /// Liefert die mittlere Länge der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Mittlere Länge der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        /// <remarks>Die Winkelangabe erfolgt in Gradmaß.</remarks>
        public static double MeanLongitude()
        {
            // Lokale Felder einrichten und Länge berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.MeanLongitude(jd));
        }
Exemple #9
0
        // MUranus.Set(double, double, ref double, double)
        /// <summary>
        /// Setzt die julianische Tageszahl des Untergangs am geographischen Ort und zur julianischen Tageszahl und liefert die Ereigniskennung.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <param name="jdEvent">Julianische Tageszahl des Untergangs.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Ereigniskennung.</returns>
        public static EEventType Set(double lambda, double phi, ref double jdEvent, double jd)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double azm = 0.0;

            return(MUranus.Set(lambda, phi, ref jdEvent, jd, ref azm));
        }
Exemple #10
0
        // MUranus.SemimajorAxis()
        /// <summary>
        /// Liefert die große Halbachse der mittleren Planetenbahn zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Große Halbachse der mittleren Planetenbahn zur aktuellen Systemzeit.</returns>
        public static double SemimajorAxis()
        {
            // Lokale Felder einrichten und große Halbachse bestimmen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.SemimajorAxis(jd));
        }
Exemple #11
0
        // MUranus.PositionEquatorial()
        /// <summary>
        /// Liefert die (scheinbare) geozentrisch-äquatoriale Position zur aktuellen Systemzeit.
        /// </summary>
        /// <returns>Geozentrisch-äquatoriale Position zur aktuellen Systemzeit.</returns>
        public static CPolar PositionEquatorial()
        {
            // Lokale Felder einrichten und Position berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.PositionEquatorial(jd));
        }
Exemple #12
0
        // MUranus.Transit(CPolar, double)
        /// <summary>
        /// Liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.
        /// </summary>
        /// <param name="position">Geographische Position.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.</returns>
        public static double Transit(CPolar position, double jd)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double h = 0.0;

            return(MUranus.Transit(position.Longitude, position.Latitude, jd, ref h));
        }
Exemple #13
0
        // MUranus.PositionEcliptical(EPrecision)
        /// <summary>
        /// Liefert die heliozentrisch-ekliptikale Position zur aktuellen Systemzeit.
        /// </summary>
        /// <param name="value">Genauigkeitskennung.</param>
        /// <returns>Heliozentrisch-ekliptikale Position zur aktuellen Systemzeit.</returns>
        public static CPolar PositionEcliptical(EPrecision value)
        {
            // Lokale Felder einrichten und Position berechnen
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.PositionEcliptical(value, jd));
        }
Exemple #14
0
        // MUranus.Set(CPolar, ref double, double)
        /// <summary>
        /// Setzt die julianische Tageszahl des Untergangs am geographischen Ort und zur julianischen Tageszahl und liefert die Ereigniskennung.
        /// </summary>
        /// <param name="position">Geographisches Position.</param>
        /// <param name="jdEvent">Julianische Tageszahl des Untergangs.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Ereigniskennung.</returns>
        public static EEventType Set(CPolar position, ref double jdEvent, double jd)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double azm = 0.0;

            return(MUranus.Set(position.Longitude, position.Latitude, ref jdEvent, jd, ref azm));
        }
Exemple #15
0
        // MUranus.PositionEquatorial()
        /// <summary>
        /// Liefert die (scheinbare) geozentrisch-äquatoriale Position zur julianischen Tageszahl.
        /// </summary>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Geozentrisch-äquatoriale Position zur julianischen Tageszahl.</returns>
        public static CPolar PositionEquatorial(double jd)
        {
            // Lokale Felder einrichten
            double bG  = 0.0;             // Geozentrische Breite.
            double bH  = 0.0;             // Heliozentrische Breite.
            double jdn = jd;              // Julianische Tageszahl.
            double lG  = 0.0;             // Geozentrische Länge.
            double lH  = 0.0;             // Heliozentrische Länge.
            double rG  = 0.0;             // Geozentrischer Radius.
            double rH  = 0.0;             // Heliozentrischer Radius.
            double tau = 0.0;             // Lichtlaufzeit.
            double tmp = 0.0;             // Temporärwert.

            // ------------- //
            // Lichtlaufzeit //
            // ------------- //

            // Lichtlaufzeit iterieren
            while (true)
            {
                // Heliozentrische Position bestimmen
                bH = MUranus.Latitude(EPrecision.High, jdn);
                lH = MUranus.Longitude(EPrecision.High, jdn);
                rH = MUranus.Radius(EPrecision.High, jdn);

                // Geozentrische Position berechnen und Abbruchbedinungen verarbeiten
                tmp = MEphemerides.ToGeocentric(lH, bH, rH, jdn, ref lG, ref bG, ref rG, EPrecision.High);
                if (MMath.Abs(tau - tmp) < 0.00005)
                {
                    break;                                                // Ausreichende Genauigkeit sicherstellen
                }
                if (tau != 0.0 && tmp >= tau)
                {
                    break;                                                // Abbruch bei Schwingung sicherstellen
                }
                // Wert anwenden und nächsten Iterationsschritt vorbereiten
                jdn += tmp;
                tau  = tmp;
            }

            // ----------------------- //
            // Aberration und Nutation //
            // ----------------------- //

            // Aberation und Nutation anwenden
            MEphemerides.AberrationEcliptical(ref lG, ref bG, jdn);
            lG += MEphemerides.NutationInLongitude(jdn);
            bG += MEphemerides.NutationInObliquity(jdn);

            // ------------------------- //
            // Koordinatentransformation //
            // ------------------------- //

            // Äquatoriale Position berechnen und anwenden
            double a = MEphemerides.ToAlpha(lG, bG, EObliquity.True, jdn);
            double d = MEphemerides.ToDelta(lG, bG, EObliquity.True, jdn);

            return(new CPolar(a, d, rG));
        }
Exemple #16
0
        // MUranus.Radius(EPrecision)         » MUranus.Radius.cs
        // MUranus.Radius(EPrecision, double) » MUranus.Radius.cs

        // MUranus.Rise(CPolar, ref double)
        /// <summary>
        /// Setzt die julianische Tageszahl des Aufgangs am geographischen Ort und zur aktuellen Systemzeit und liefert die Ereigniskennung.
        /// </summary>
        /// <param name="position">Geographische Position.</param>
        /// <param name="jdEvent">Julianische Tageszahl des Aufgangs.</param>
        /// <returns>Ereigniskennung.</returns>
        public static EEventType Rise(CPolar position, ref double jdEvent)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double jd  = MCalendar.FromDateTime(DateTime.Now);
            double azm = 0.0;

            return(MUranus.Rise(position.Longitude, position.Latitude, ref jdEvent, jd, ref azm));
        }
Exemple #17
0
        // MUranus.Set(double, double, ref double)
        /// <summary>
        /// Setzt die julianische Tageszahl des Untergangs am geographischen Ort und zur aktuellen Systemzeit und liefert die Ereigniskennung.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <param name="jdEvent">Julianische Tageszahl des Untergangs.</param>
        /// <returns>Ereigniskennung.</returns>
        public static EEventType Set(double lambda, double phi, ref double jdEvent)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double jd  = MCalendar.FromDateTime(DateTime.Now);
            double azm = 0.0;

            return(MUranus.Set(lambda, phi, ref jdEvent, jd, ref azm));
        }
Exemple #18
0
        // MUranus.Transit(double, double)
        /// <summary>
        /// Liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur aktuellen Systemzeit.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <returns>Liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur aktuellen Systemzeit.</returns>
        public static double Transit(double lambda, double phi)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double h  = 0.0;
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Transit(lambda, phi, jd, ref h));
        }
Exemple #19
0
        // MUranus.Transit(CPolar)
        /// <summary>
        /// Liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur aktuellen Systemzeit.
        /// </summary>
        /// <param name="position">Geographische Position.</param>
        /// <returns>Julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur aktuellen Systemzeit.</returns>
        public static double Transit(CPolar position)
        {
            // Lokale Felder einrichten und Ereigniszeit bestimmen
            double h  = 0.0;
            double jd = MCalendar.FromDateTime(DateTime.Now);

            return(MUranus.Transit(position.Longitude, position.Latitude, jd, ref h));
        }
Exemple #20
0
        // MUranus.PositionEcliptical(EPrecision, double)
        /// <summary>
        /// Liefert die heliozentrisch-ekliptikale Position zur julianischen Tageszahl.
        /// </summary>
        /// <param name="value">Genauigkeitskennung.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Heliozentrisch-ekliptikale Position zur julianischen Tageszahl.</returns>
        public static CPolar PositionEcliptical(EPrecision value, double jd)
        {
            // Lokale Felder einrichten
            CPolar rtn = new CPolar();

            rtn.Latitude  = MUranus.Latitude(value, jd);
            rtn.Longitude = MUranus.Longitude(value, jd);
            rtn.Radius    = MUranus.Radius(value, jd);
            return(rtn);
        }
Exemple #21
0
        // MUranus.Latitude(EPrecision, double)
        /// <summary>
        /// Liefert die heliozentrisch-ekliptikale Breite zur julianischen Tageszahl.
        /// </summary>
        /// <param name="value">Genauigkeitskennung.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <returns>Heliozentrisch-ekliptikale Breite zur julianischen Tageszahl.</returns>
        public static double Latitude(EPrecision value, double jd)
        {
            // Lokale Felder einrichten
            double t  = (jd - 2451545.0) / 365250.0;             // Jahrhundertbruchteil
            double b0 = MUranus.m_B0(value, t);
            double b1 = MUranus.m_B1(value, t);
            double b2 = MUranus.m_B2(value, t);
            double b3 = MUranus.m_B3(value, t);
            double b4 = MUranus.m_B4(value, t);

            // Breite berechnen
            return(MMath.Polynome(t, b0, b1, b2, b3, b4));
        }
Exemple #22
0
 // MUranus.Set(CPolar, ref double, double, ref double)
 /// <summary>
 /// Setzt die julianische Tageszahl des Untergangs und die Abendweite am geographischen Ort und zur julianischen Tageszahl und liefert die Ereigniskennung.
 /// </summary>
 /// <param name="position">Geographische Position.</param>
 /// <param name="jdEvent">Julianische Tageszahl des Untergangs.</param>
 /// <param name="jd">Julianische Tageszahl.</param>
 /// <param name="azimuth">Abendweite.</param>
 /// <returns>Ereigniskennung.</returns>
 public static EEventType Set(CPolar position, ref double jdEvent, double jd, ref double azimuth)
 {
     // Rückgabe
     return(MUranus.Set(position.Longitude, position.Latitude, ref jdEvent, jd, ref azimuth));
 }
Exemple #23
0
 // MUranus.Transit(CPolar, double, ref double)
 /// <summary>
 /// Setzt die Höhe und liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.
 /// </summary>
 /// <param name="position">Geographische Position.</param>
 /// <param name="jd">Julianische Tageszahl.</param>
 /// <param name="height">Höhe.</param>
 /// <returns>Julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.</returns>
 public static double Transit(CPolar position, double jd, ref double height)
 {
     // Rückgabe
     return(MUranus.Transit(position.Longitude, position.Latitude, jd, ref height));
 }
Exemple #24
0
        // MUranus.Set(double, double, ref double, double, ref double)
        /// <summary>
        /// Setzt die julianische Tageszahl des Untergangs und die Abendweite am geographischen Ort und zur julianischen Tageszahl und liefert die Ereigniskennung.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <param name="jdEvent">Julianische Tageszahl des Untergangs.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <param name="azimuth">Abendweite.</param>
        /// <returns>Ereigniskennung.</returns>
        public static EEventType Set(double lambda, double phi, ref double jdEvent, double jd, ref double azimuth)
        {
            // Lokale Felder einrichten
            double jdn  = MMath.Floor(jd - 0.5) + 0.5;                    // Tageszahl um Mitternacht
            double l    = 0.0;                                            // Geozentrische Länge
            double b    = 0.0;                                            // Geozentrische Breite
            double a    = 0.0;                                            // Rektaszension
            double d    = 0.0;                                            // Deklination
            double dm   = 1.0;                                            // Korrekturglied
            double h    = 0.0;                                            //
            double h0   = MEphemerides.GeocentricHeight_Star;             // Refraktionswinkel
            double H    = 0.0;                                            //
            double sinP = MMath.Sin(phi);                                 // Breitensinus
            double cosP = MMath.Cos(phi);                                 // Breitencosinus

            // Position für nachfolgenden Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn + 1.0);
            b = MUranus.Latitude(EPrecision.Low, jdn + 1.0);
            double aP = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jd + 1.0);
            double dP = MEphemerides.ToDelta(l, b, EObliquity.Mean, jd + 1.0);

            // Position für gegebenen Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn);
            b = MUranus.Latitude(EPrecision.Low, jdn);
            double a0 = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jdn);

            if (MMath.Abs(aP - a0) > 1.0)
            {
                a0 += MMath.Sgn(aP - a0) * MMath.Pi2;
            }
            double d0 = MEphemerides.ToDelta(l, b, EObliquity.Mean, jdn);

            // Position für vorhergehenden Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn - 1.0);
            b = MUranus.Latitude(EPrecision.Low, jdn - 1.0);
            double aM = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jd - 1.0);

            if (MMath.Abs(a0 - aM) > 1.0)
            {
                aM += MMath.Sgn(a0 - aM) * MMath.Pi2;
            }
            double dM = MEphemerides.ToDelta(l, b, EObliquity.Mean, jd - 1.0);

            // Stundenwinkel berechnen und prüfen
            double cosH = (MMath.Sin(h0) - sinP * MMath.Sin(dP)) / (cosP * MMath.Cos(dP));

            if (MMath.Abs(cosH) > 1.0)
            {
                return(cosH < 1.0 ? EEventType.AlwaysAboveHorizon : EEventType.AlwaysBeneathHorizon);
            }
            H = MMath.ArcCos(cosH);

            // ------------------- //
            // Ereigniszeit nähern //
            // ------------------- //

            // Sternzeit und Stundenwinkel zum gegebenen Zeitpunkt bestimmen
            double t0 = MEphemerides.Gmst(jdn);
            double m  = MMath.Div((a0 + lambda - t0 + H) / MMath.Pi2);

            if (m < 0.0)
            {
                m += 1.0;
            }

            // Ereigniszeit iterieren
            while (MMath.Abs(dm) >= 0.0001)
            {
                // Iteration durchführen und nächsten Iterationsschritt vorbereiten
                a  = MMath.Bessel(m, aM, a0, aP);
                d  = MMath.Bessel(m, dM, d0, dP);
                H  = t0 + 6.300388093 * m - lambda - a;
                h  = MMath.ArcSin(sinP * MMath.Sin(d) + cosP * MMath.Cos(d) * MMath.Cos(H));
                dm = (h - h0) / (MMath.Pi2 * MMath.Cos(d) * cosP * MMath.Sin(H));
                m += dm;
            }

            // Iteration anwenden, Azimut berechnen und Rückgabewert setzen
            jdEvent = jd + m;
            azimuth = MEphemerides.ToAzimuth(H, d, phi);
            return(EEventType.Normal);
        }
Exemple #25
0
        // MUranus.Transit(double, double, double, ref double)
        /// <summary>
        /// Setzt die Höhe und liefert die julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.
        /// </summary>
        /// <param name="lambda">Geographische Länge.</param>
        /// <param name="phi">Geographische Breite.</param>
        /// <param name="jd">Julianische Tageszahl.</param>
        /// <param name="height">Höhe.</param>
        /// <returns>Julianische Tageszahl des Meridiandurchgangs am geographischen Ort und zur julianischen Tageszahl.</returns>
        public static double Transit(double lambda, double phi, double jd, ref double height)
        {
            // Lokale Felder einrichten
            double jdn = MMath.Floor(jd - 0.5) + 0.5;             // Tageszahl um Mitternacht
            double l   = 0.0;                                     // Geozentrische Länge
            double b   = 0.0;                                     // Geozentrische Breite
            double a   = 0.0;                                     // Rektaszension
            double d   = 0.0;                                     // Deklination
            double dm  = 1.0;                                     // Korrekturglied

            // Position für nachfolgenden Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn + 1.0);
            b = MUranus.Latitude(EPrecision.Low, jdn + 1.0);
            double aP = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jdn + 1.0);
            double dP = MEphemerides.ToDelta(l, b, EObliquity.Mean, jdn + 1.0);

            // Position für gegebenen Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn);
            b = MUranus.Latitude(EPrecision.Low, jdn);
            double a0 = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jdn);

            if (MMath.Abs(aP - a0) > 1.0)
            {
                a0 += MMath.Sgn(aP - a0) * MMath.Pi2;
            }
            double d0 = MEphemerides.ToDelta(l, b, EObliquity.Mean, jdn);

            // Position für vorhergehenden Tag berechnen
            l = MUranus.Longitude(EPrecision.Low, jdn - 1.0);
            b = MUranus.Latitude(EPrecision.Low, jdn - 1.0);
            double aM = MEphemerides.ToAlpha(l, b, EObliquity.Mean, jdn - 1.0);

            if (MMath.Abs(a0 - aM) > 1.0)
            {
                aM += MMath.Sgn(a0 - aM) * MMath.Pi2;
            }
            double dM = MEphemerides.ToDelta(l, b, EObliquity.Mean, jdn - 1.0);

            // ------------------- //
            // Ereigniszeit nähern //
            // ------------------- //

            // Sternzeit und Stundenwinkel zum gegebenen Zeitpunkt bestimmen
            double t0 = MEphemerides.Gmst(jdn);
            double m  = MMath.Div((aP + lambda - t0) / MMath.Pi2);

            if (m < 0.0)
            {
                m += 1.0;
            }

            // Ereigniszeit iterieren
            while (MMath.Abs(dm) >= 0.0001)
            {
                // Iteration durchführen und nächsten Iterationsschritt vorbereiten
                a  = MMath.Bessel(m, aM, a0, aP);
                dm = MMath.Div((a + lambda - t0 - 6.300388093 * m) / MMath.Pi2);
                if (MMath.Abs(dm) > 0.5)
                {
                    dm -= MMath.Sgn(dm);
                }
                m += dm;
            }

            // Iteration anwenden, Höhe berechnen und Rückgabewert setzen
            d      = MMath.Bessel(m, dM, d0, dP);
            height = MEphemerides.ToHeight(0.0, d, phi);
            return(jd + m);
        }
Exemple #26
0
 // MUranus.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(MUranus.MeanLongitude(jd) + MUranus.LongitudeOfPerihelion(jd), 360.0));
 }