// 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)); }
// 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); }