Quadriviale Kuriositäten/ Die Stele vom Rocher des Doms/ SaekularerAufgang
Java-Programm zur Berechnung der säkularen Aufgänge von Gestirnen
Bearbeiten/*
Source file: SaekularerAufgang.java
Programm: saekularer Aufgang von Gestirnen
Urspruenglicher Autor: Uwe Pilz, Leipzig (Python)
Ueberarbeitung und Ergaenzung: Markus Bautsch, Berlin (Java)
Licence: public domain
Date: 25. April 2022
Version: 1.3 (15 May 2023)
Programming language: Java
*/
/*
Dieses Java-Programm berechnet unter der Beruecksichtigung der Eigenbewegung und der atmosphaerischen Refraktion den saekularen Aufgang eines Gestirns.
Astronomische Parameter: aequatoriale Koordinaten und Eigenbewegung des Gestirns zur astronomischen Epoche
Geographische Parameter: Beobachtungsjahr, geographische Breite, Hoehe ueber Normalnull
*/
public class SaekularerAufgang
{
/* Deklaration der Klassenvariablen */
/* Beobachtungszeitpunkt */
private static final long firstObservationYear = -3000; // erstes Beobachtungsjahr
private static final long yearIncrement = 500; // Schrittweite fuer die Jahre
private static final long lastObservationYear = 2000; // letztes Beobachtungsjahr
private static final long epoch = 2000; // astronomische Epoche J2000
/* Beobachtungsort */
private static double phi = java.lang.Math.toRadians (43.95); // geographischer Breitengrad in Radiant
private static double REarth = 6371000; // Erdradius in Metern
private static double elevation = 55; // Hoehe ueber Normalnull in Metern
private static double chineInDegrees = java.lang.Math.toDegrees (java.lang.Math.acos (REarth / (REarth + elevation))); // Kimmwinkel in Bogengrad
private static double altitudeIncrement = 1; // Schrittweite fuer die Hoehe ueber dem Horizont in Bogengrad
/* Gestirn */
private static java.lang.String name = "Phakt";
private static double apparentMagnitude = 2.6; // Scheinbare Helligkeit in Groessenklassen
/* Aequatoriale Koordinaten zur Epoche in Radiant */
private static double alpha0 = java.lang.Math.toRadians (15 * (5 + 39/60.0 + 38.95/3600.0)); // Rektaszension
private static double delta0 = java.lang.Math.toRadians (-(34 + 4/60.0 + 26.6/3600.0)); // Deklination
/* Jaehrliche Veraenderung der aequatorialen Koordinaten zur Epoche in Millibogensekunden */
private static double mu_RA = 4.6; // Eigenbewegung Rektaszension
private static double mu_DE = -29.9; // Eigenbewegung Deklination
/* Aequatoriale Koordinaten zum Beobachtungszeitpunkt in Radiant */
private static double alpha; // Rektaszension zum Beobachtungszeitpunkt
private static double delta; // Deklination zum Beobachtungszeitpunkt
/*
Berechnung der Extinktion in Abhaengigkeit von der astronomischen Hoehe "heightInDegrees" als Reduktion der scheinbaren Helligkeit
Formel nach https://asterism.org/resources/atmospheric-extinction-and-refraction/
*/
private static double extinction (double heightInDegrees)
{
double z = java.lang.Math.toRadians (90 - heightInDegrees); // Zenithoehe
double cosz = java.lang.Math.cos (z);
double airMass = 1 / (cosz + 0.025 * java.lang.Math.exp (-11 * cosz)); // Luftmassen
double extinction = 0.28 * airMass; // Extinktion
return extinction;
}
/* Berechnung der Praezession fuer das Jahr "year" nach IAU 2006 */
private static void precession (long year)
{
/* Jahre in Bezug auf die Epoche */
double jahre = year - epoch;
/* Eigenbewegung beruecksichtigen */
alpha = alpha0 + jahre * java.lang.Math.toRadians (mu_RA / 3600 / 1000);
delta = delta0 + jahre * java.lang.Math.toRadians (mu_DE / 3600 / 1000);
/* Praezessionsformel arbeitet mit Jahrhunderten */
double jahrhunderte = jahre / 100.0;
/* IAU 2006 */
double zeta = (((((-0.0000003173 * jahrhunderte - 0.000005971) * jahrhunderte + 0.01801828)
* jahrhunderte + 0.2988499) * jahrhunderte + 2306.083227) * jahrhunderte + 2.650545);
double z = (((((-0.0000002904 * jahrhunderte - 0.000028596) * jahrhunderte + 0.01826837)
* jahrhunderte + 1.0927348) * jahrhunderte + 2306.077181) * jahrhunderte - 2.650545);
double theta = ((((-0.00000011274 * jahrhunderte - 0.000007089) * jahrhunderte - 0.04182264)
* jahrhunderte - 0.4294934) * jahrhunderte + 2004.191903) * jahrhunderte;
/* Umrechnung nach Bogenmass */
zeta = java.lang.Math.toRadians (zeta / 3600);
z = java.lang.Math.toRadians (z / 3600);
theta = java.lang.Math.toRadians (theta / 3600);
double A = java.lang.Math.cos (delta) * java.lang.Math.sin (alpha + zeta);
double B = java.lang.Math.cos (theta) * java.lang.Math.cos (delta) * java.lang.Math.cos (alpha + zeta) - java.lang.Math.sin (theta) * java.lang.Math.sin (delta);
double C = java.lang.Math.sin (theta) * java.lang.Math.cos (delta) * java.lang.Math.cos (alpha + zeta) + java.lang.Math.cos (theta) * java.lang.Math.sin (delta);
alpha = java.lang.Math.atan2 (A, B) + z;
if (alpha < 0)
{
alpha = alpha + 2 * java.lang.Math.PI;
}
delta = java.lang.Math.asin (C);
}
/* Unterprogramm fuer die Ausgabe einer Hoehe ueber dem Horizont */
private static boolean printAltitudeLine (double altitude, double cosAscentAzimuth)
{
java.lang.System.out.printf ("%7.1f", altitude);
java.lang.System.out.print ("° | ");
boolean altitudeObservable = java.lang.Math.abs (cosAscentAzimuth) < 1; // Hoehe wird vom Gestirn erreicht
if (altitudeObservable)
{
double azimuth = java.lang.Math.toDegrees (java.lang.Math.acos (cosAscentAzimuth));
double visualMagnitude = apparentMagnitude + extinction (altitude);
java.lang.System.out.printf ("%8.1f", azimuth);
java.lang.System.out.printf ("° | %9.1f", 360 - azimuth);
java.lang.System.out.printf ("° | %9.1f", visualMagnitude);
java.lang.System.out.print ("m");
java.lang.System.out.println ();
}
else
{
java.lang.System.out.println ("wird nicht erreicht");
}
return altitudeObservable;
}
/* Unterprogramm fuer die Berechnung der Hoehen ueber dem Horizont */
private static void computeAltitudes ()
{
java.lang.System.out.println ("Aufgang und Untergang am südlichen Meridian:");
java.lang.System.out.println (" | östlicher | westlicher | effektive");
java.lang.System.out.println (" Höhe | Azimut | Azimut | Helligkeit");
double altitude = 0; // Aktuelle Hoehe ueber dem Horizont in Bogengrad
boolean altitudeObservable = false;
do // fuer alle Hoehen ueber dem Horizont
{
/* Aktuelle Hoehe currentAltitude ueber dem Horizont korrigiert fuer Kimmtiefe in Bogengrad */
double currentAltitude = altitude - chineInDegrees;
/* Refraktion R in Bogengrad */
double arg = currentAltitude + (7.31 / (currentAltitude + 4.4));
double rho = (1 / java.lang.Math.tan (java.lang.Math.toRadians (arg))) / 60; // Umrechnung von Bogenminuten nach Bogengrad
/* Wirkliche Hoehe ohne Atmosphaere, dort ist der Aufgangsazimut */
double trueAltitude = java.lang.Math.toRadians (currentAltitude - rho);
/* Azimut des Aufgangs auf dem Horizont in Bogengrad */
double cosAscentAzimuth = (java.lang.Math.sin (delta) - java.lang.Math.sin (phi) * java.lang.Math.sin (trueAltitude)) / (java.lang.Math.cos (phi) * java.lang.Math.cos (trueAltitude));
/* Ergebnisse fuer Hoehe ausgeben */
altitudeObservable = printAltitudeLine (altitude, cosAscentAzimuth);
altitude = altitude + altitudeIncrement;
} while (altitudeObservable);
java.lang.System.out.println ();
}
/* Unterprogramm fuer die Berechnung eines Jahres */
private static void computeYear (long currentYear)
{
precession (currentYear); // Berechnung der aequatorialen Koordinaten zum Zielzeitpunkt inklusive der Eigenbewegung
java.lang.System.out.println ("Beobachtungsjahr = " + currentYear + " zur Epoche J" + epoch);
java.lang.System.out.printf ("Rektaszension = %5.1f", java.lang.Math.toDegrees (alpha));
java.lang.System.out.println ("°");
java.lang.System.out.printf ("Deklination = %5.1f", java.lang.Math.toDegrees (delta));
java.lang.System.out.println ("°");
java.lang.System.out.printf ("Nördlichste Breite = %5.1f", 90 + java.lang.Math.toDegrees (delta));
java.lang.System.out.println ("°");
computeAltitudes ();
}
/* Schleife fuer die zu berechnenden Jahre */
private static void computeYears ()
{
java.lang.System.out.println ("Berechnung der säkularen Aufgänge des Gestirns " + name);
java.lang.System.out.println ("Scheinbare Helligkeit = " + apparentMagnitude + "m");
java.lang.System.out.println ("Breitengrad der Beobachtung = " + java.lang.Math.toDegrees (phi) + "°");
java.lang.System.out.println ("Höhe des Beobachtungspunkts über Normalnull = " + elevation + " Meter\n");
java.lang.System.out.println ("Epoche = J" + epoch);
java.lang.System.out.println ("Rektaszension zur Epoche = " + java.lang.Math.toDegrees (alpha0) + "°");
java.lang.System.out.println ("Deklination zur Epoche = " + java.lang.Math.toDegrees (delta0) + "°");
java.lang.System.out.println ("Eigenbewegung Rektaszension pro Jahr, mu_RA = " + mu_RA + " mas/a");
java.lang.System.out.println ("Eigenbewegung Deklination pro Jahr, mu_DE = " + mu_DE + " mas/a");
java.lang.System.out.println ();
long currentYear = firstObservationYear; // Aktuelles Jahr der Berechnung
/* Die Schleife berechnet gegebenenfalls mehrere Jahre in der Vergangenheit */
do // fuer alle Jahre "currentYear" bis zum Erreichen des Jahres der Epoche
{
computeYear (currentYear);
currentYear = currentYear + yearIncrement;
} while (currentYear <= lastObservationYear);
}
/* Aufrufbares Hauptprogramm "main" */
public static void main (java.lang.String [] arguments)
{
computeYears ();
}
}
Textausgabe
BearbeitenFür den Stern Phakt wird beispielsweise mit den oben angegebenen Parametern diese Textausgabe erzeugt:
Berechnung der säkularen Aufgänge des Gestirns Phakt
Scheinbare Helligkeit = 2.6m
Breitengrad der Beobachtung = 43.95°
Höhe des Beobachtungspunkts über Normalnull = 55.0 Meter
Epoche = J2000
Rektaszension zur Epoche = 84.91229166666668°
Deklination zur Epoche = -34.07405555555556°
Eigenbewegung Rektaszension pro Jahr, mu_RA = 4.6 mas/a
Eigenbewegung Deklination pro Jahr, mu_DE = -29.9 mas/a
Beobachtungsjahr = -3000 zur Epoche J2000
Rektaszension = 41,2°
Deklination = -46,6°
Nördlichste Breite = 43,4°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 174,5° | 185,5° | 13,8m 1,0° | wird nicht erreicht
Beobachtungsjahr = -2500 zur Epoche J2000
Rektaszension = 45,4°
Deklination = -44,6°
Nördlichste Breite = 45,4°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 163,8° | 196,2° | 13,8m 1,0° | 168,6° | 191,4° | 10,0m 2,0° | 177,9° | 182,1° | 8,0m 3,0° | wird nicht erreicht
Beobachtungsjahr = -2000 zur Epoche J2000
Rektaszension = 49,7°
Deklination = -42,7°
Nördlichste Breite = 47,3°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 158,0° | 202,0° | 13,8m 1,0° | 161,2° | 198,8° | 10,0m 2,0° | 165,0° | 195,0° | 8,0m 3,0° | 169,9° | 190,1° | 6,8m 4,0° | wird nicht erreicht
Beobachtungsjahr = -1500 zur Epoche J2000
Rektaszension = 54,0°
Deklination = -40,9°
Nördlichste Breite = 49,1°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 153,6° | 206,4° | 13,8m 1,0° | 156,3° | 203,7° | 10,0m 2,0° | 159,1° | 200,9° | 8,0m 3,0° | 162,4° | 197,6° | 6,8m 4,0° | 166,3° | 193,7° | 6,0m 5,0° | 172,0° | 188,0° | 5,5m 6,0° | wird nicht erreicht
Beobachtungsjahr = -1000 zur Epoche J2000
Rektaszension = 58,3°
Deklination = -39,3°
Nördlichste Breite = 50,7°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 150,0° | 210,0° | 13,8m 1,0° | 152,4° | 207,6° | 10,0m 2,0° | 154,9° | 205,1° | 8,0m 3,0° | 157,5° | 202,5° | 6,8m 4,0° | 160,5° | 199,5° | 6,0m 5,0° | 164,0° | 196,0° | 5,5m 6,0° | 168,5° | 191,5° | 5,1m 7,0° | 177,3° | 182,7° | 4,8m 8,0° | wird nicht erreicht
Beobachtungsjahr = -500 zur Epoche J2000
Rektaszension = 62,7°
Deklination = -38,0°
Nördlichste Breite = 52,0°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 147,2° | 212,8° | 13,8m 1,0° | 149,3° | 210,7° | 10,0m 2,0° | 151,5° | 208,5° | 8,0m 3,0° | 153,9° | 206,1° | 6,8m 4,0° | 156,4° | 203,6° | 6,0m 5,0° | 159,2° | 200,8° | 5,5m 6,0° | 162,5° | 197,5° | 5,1m 7,0° | 166,5° | 193,5° | 4,8m 8,0° | 172,6° | 187,4° | 4,5m 9,0° | wird nicht erreicht
Beobachtungsjahr = 0 zur Epoche J2000
Rektaszension = 67,0°
Deklination = -36,8°
Nördlichste Breite = 53,2°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 144,8° | 215,2° | 13,8m 1,0° | 146,8° | 213,2° | 10,0m 2,0° | 148,9° | 211,1° | 8,0m 3,0° | 151,0° | 209,0° | 6,8m 4,0° | 153,3° | 206,7° | 6,0m 5,0° | 155,8° | 204,2° | 5,5m 6,0° | 158,5° | 201,5° | 5,1m 7,0° | 161,7° | 198,3° | 4,8m 8,0° | 165,6° | 194,4° | 4,5m 9,0° | 171,2° | 188,8° | 4,3m 10,0° | wird nicht erreicht
Beobachtungsjahr = 500 zur Epoche J2000
Rektaszension = 71,5°
Deklination = -35,8°
Nördlichste Breite = 54,2°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 142,9° | 217,1° | 13,8m 1,0° | 144,9° | 215,1° | 10,0m 2,0° | 146,8° | 213,2° | 8,0m 3,0° | 148,8° | 211,2° | 6,8m 4,0° | 150,9° | 209,1° | 6,0m 5,0° | 153,2° | 206,8° | 5,5m 6,0° | 155,7° | 204,3° | 5,1m 7,0° | 158,4° | 201,6° | 4,8m 8,0° | 161,6° | 198,4° | 4,5m 9,0° | 165,6° | 194,4° | 4,3m 10,0° | 171,2° | 188,8° | 4,2m 11,0° | wird nicht erreicht
Beobachtungsjahr = 1000 zur Epoche J2000
Rektaszension = 75,9°
Deklination = -35,0°
Nördlichste Breite = 55,0°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 141,5° | 218,5° | 13,8m 1,0° | 143,4° | 216,6° | 10,0m 2,0° | 145,2° | 214,8° | 8,0m 3,0° | 147,1° | 212,9° | 6,8m 4,0° | 149,1° | 210,9° | 6,0m 5,0° | 151,3° | 208,7° | 5,5m 6,0° | 153,6° | 206,4° | 5,1m 7,0° | 156,1° | 203,9° | 4,8m 8,0° | 159,0° | 201,0° | 4,5m 9,0° | 162,4° | 197,6° | 4,3m 10,0° | 166,6° | 193,4° | 4,2m 11,0° | 173,1° | 186,9° | 4,0m 12,0° | wird nicht erreicht
Beobachtungsjahr = 1500 zur Epoche J2000
Rektaszension = 80,4°
Deklination = -34,4°
Nördlichste Breite = 55,6°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 140,5° | 219,5° | 13,8m 1,0° | 142,3° | 217,7° | 10,0m 2,0° | 144,1° | 215,9° | 8,0m 3,0° | 146,0° | 214,0° | 6,8m 4,0° | 147,9° | 212,1° | 6,0m 5,0° | 149,9° | 210,1° | 5,5m 6,0° | 152,1° | 207,9° | 5,1m 7,0° | 154,6° | 205,4° | 4,8m 8,0° | 157,2° | 202,8° | 4,5m 9,0° | 160,3° | 199,7° | 4,3m 10,0° | 164,0° | 196,0° | 4,2m 11,0° | 168,9° | 191,1° | 4,0m 12,0° | wird nicht erreicht
Beobachtungsjahr = 2000 zur Epoche J2000
Rektaszension = 84,9°
Deklination = -34,1°
Nördlichste Breite = 55,9°
Aufgang und Untergang am südlichen Meridian:
| östlicher | westlicher | effektive Höhe | Azimut | Azimut | Helligkeit 0,0° | 139,8° | 220,2° | 13,8m 1,0° | 141,6° | 218,4° | 10,0m 2,0° | 143,4° | 216,6° | 8,0m 3,0° | 145,2° | 214,8° | 6,8m 4,0° | 147,1° | 212,9° | 6,0m 5,0° | 149,1° | 210,9° | 5,5m 6,0° | 151,3° | 208,7° | 5,1m 7,0° | 153,6° | 206,4° | 4,8m 8,0° | 156,2° | 203,8° | 4,5m 9,0° | 159,1° | 200,9° | 4,3m 10,0° | 162,6° | 197,4° | 4,2m 11,0° | 166,9° | 193,1° | 4,0m 12,0° | 173,9° | 186,1° | 3,9m 13,0° | wird nicht erreicht