Quadriviale Kuriositäten/ Die Stele vom Rocher des Doms/ SaekularerAufgang

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Java-Programm zur Berechnung der säkularen Aufgänge von Gestirnen[Bearbeiten]

/*
  Source file: SaekularerAufgang.java
  Programm: säkularer Aufgang von Gestirnen
  Autor: Uwe Pilz, Leipzig (Python)
  Bearbeitung und Ergänzung: Markus Bautsch, Berlin (Java)
  Licence: public domain
  Date: 25. April 2022
  Version: 1.1
  Programming language: Java
 */

/*
  Dieses Java-Programm berechnet unter der Berücksichtigung der Eigenbewegung und der atmosphärischen Refraktion den säkularen Aufgang eines Gestirns.
  Astronomische Parameter: äquatoriale Koordinaten und Eigenbewegung des Gestirns zur astronomischen Epoche
  Geographische Parameter: Beobachtungsjahr, geographische Breite, Höhe über Normalnull
 */

public class SaekularerAufgang
{
	/* Deklaration der Klassenvariablen */

	/* Beobachtungszeitpunkt */
	private static long firstObservationYear = -3000; // Beobachtungsjahr
	private static long yearIncrement = 500;          // Schrittweite für die Jahre
	private static long epoch = 2000;                 // astronomische Epoche J2000

	/* Beobachtungsort */
	private static double phi = radians (43.95); // geographischer Breitengrad in Radiant
	private static double elevation = 55;        // Höhe über Normalnull in Metern
	private static double altitudeIncrement = 1; // Schrittweite für die Höhe über dem Horizont in Bogengrad

	/* Gestirn */
	private static java.lang.String name = "Phakt"; 
	private static double apparentMagnitude = 2.6; // Scheinbare Helligkeit in Größenklassen */
	/* Äquatoriale Koordinaten zur Epoche in Radiant */
	private static double alpha0 = radians (15 * (5 + 39/60.0 + 38.95/3600.0)); // Rektaszension
	private static double delta0 = radians (-(34 + 4/60.0 + 26.6/3600.0));      // Deklination
	/* Jährliche Veränderung der äquatorialen Koordinaten zur Epoche in Millibogensekunden */
	private static double mu_RA =   4.6; // Eigenbewegung Rektaszension
	private static double mu_DE = -29.9; // Eigenbewegung Deklination

	/* Äquatoriale Koordinaten zum Beobachtungszeitpunkt in Radiant */
	private static double alpha; // Rektaszension zum Beobachtungszeitpunkt
	private static double delta; // Deklination zum Beobachtungszeitpunkt

	/* Umrechnung von Bogengrad nach Radiant */
	private static double radians (double angleInDegrees)
	{
		double angleInRadians = angleInDegrees / 180 * java.lang.Math.PI;
		return angleInRadians;
	}

	/* Umrechnung von Radiant nach Bogengrad */
	private static double degrees (double angleInRadians)
	{
		double angleInDegrees = angleInRadians / java.lang.Math.PI * 180;
		return angleInDegrees;
	}

	/*
	  Berechnung der Extinktion in Abhängigkeit von der astronomischen Höhe "heightInDegrees" als Reduktion der scheinbaren Helligkeit
	  Formel nach https://asterism.org/resources/atmospheric-extinction-and-refraction/
	 */
	private static double extinction (double heightInDegrees)
	{
		double z = radians (90 - heightInDegrees); // Zenithöhe
		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 Präzession für das Jahr "year" nach IAU 2006 */
	private static void precession (long year)
	{
		/* Jahre in Bezug auf die Epoche */
		double jahre = year - epoch;

		/* Eigenbewegung berücksichtigen */
		alpha = alpha0 + jahre * radians (mu_RA / 3600 / 1000);
		delta = delta0 + jahre * radians (mu_DE / 3600 / 1000);

		/* Präzessionsformel 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 Bogenmaß */
		zeta = radians (zeta / 3600);
		z = radians (z / 3600);
		theta = radians (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 für die Berechnung der Höhen über dem Horizont */
	public 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 Höhe über dem Horizont in Bogengrad
		boolean altitudeObservable = false;
		do // für alle Höhen über dem Horizont
		{
			/* Aktuelle Höhe currentAltitude über dem Horizont in Bogengrad */
			double currentAltitude = altitude - 0.03 * java.lang.Math.sqrt (elevation); // Korrigiert für Kimmtiefe. In Bogengrad für Meeus-Formel

			/* Refraktion R */
			double arg = currentAltitude + 7.31 / (currentAltitude + 4.4); // in Bogengrad
			double r = (1 / java.lang.Math.tan (radians (arg))) / 60; // in Bogengrad

			/* Wirkliche Höhe ohne Atmosphäre, dort ist der Aufgangsazimut */
			double trueAltitude = radians (currentAltitude - r);

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

			java.lang.System.out.printf ("%7.1f", altitude);
			java.lang.System.out.print ("° | ");

			altitudeObservable = java.lang.Math.abs (cosAscentAzimuth) < 1; // Höhe wird vom Gestirn erreicht
			if (altitudeObservable)
			{
				double azimuth = degrees (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");
			}
			altitude = altitude + altitudeIncrement;
		} while (altitudeObservable);
		java.lang.System.out.println ();
	}

	/*  Unterprogramm für die Berechnung eines Jahres */
	public static void computeYear (long currentYear)
	{
		precession (currentYear); // Berechnung der äquatorialen 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", degrees (alpha));
		java.lang.System.out.println ("°");
		java.lang.System.out.printf ("Deklination        = %5.1f", degrees (delta));
		java.lang.System.out.println ("°");
		java.lang.System.out.printf ("Nördlichste Breite = %5.1f", 90 + degrees (delta));
		java.lang.System.out.println ("°");
		computeAltitudes ();
	}

	/* Schleife für die zu berechnenden Jahre */
	public 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 = " + degrees (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 = " + degrees (alpha0) + "°");
		java.lang.System.out.println ("Deklination   zur Epoche = " + degrees (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 // für alle Jahre "currentYear" bis zum Erreichen des Jahres der Epoche
		{
			computeYear (currentYear);
			currentYear = currentYear + yearIncrement;
		} while (currentYear <= epoch);
	}

	/* Hauptprogramm "main" */
	public static void main (java.lang.String [] arguments)
	{
		computeYears ();
	}
}

Textausgabe[Bearbeiten]

Fü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