Ejemplo n.º 1
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));
        }
Ejemplo n.º 2
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);
        }