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