Hallo,
im Laufe der Zeit haben sich bei mir einige Funktionen zur Berechnung astronomischer Daten gesammelt, die ich nun in eine
Unit gepackt habe :
Tag im Jahr, Woche im jahr, Schaltjahr(boolean), Sommerzeit(boolean), Jahreszeit,
Feiertage (in Abhängigkeit vom Bundesland), Sternzeichen ...
Für Mond und Sonne : -Aufgang, Untergang, Höchststand,
Mondphase, Mondalter, nächste und vorige Mondphase ...
Funktionen :
Delphi-Quellcode:
function GetDayOfYear(CDate:TDateTime):Integer;
function GetDaysPerYear(CDate:TDateTime):Integer;
function IsLeapYear(CDate:TDateTime):boolean;
function GetWeekOfYear(CDate:TDateTime):Integer;
function GetWeeksPerYear(CDate:TDateTime):Integer;
function GetDaysPerMonth(CDate:TDateTime):Integer;
function GetFirstDayOfWeek(CDate:TDateTime; DayIndex:Integer):TDateTime;
function IsSummertime(CDate:TDateTime):boolean;
function GetHolidayIndex(CDate:TDateTime; Land:TdeState):integer;
function last_phase(date:TDateTime; phase:TMoonPhase):TDateTime;
function next_phase(date:TDateTime; phase:TMoonPhase):TDateTime;
function age_of_moon(date: TDateTime):extended;
function current_phase(date:TDateTime):extended;
function moon_distance(date: TDateTime): extended;
function lunation(date:TDateTime):integer;
function sun_distance(date: TDateTime): extended;
function nextperigee(date:TDateTime):TDateTime;
function nextapogee(date:TDateTime):TDateTime;
function StartSeason(year: integer; season:TSeason):TDateTime;
function Eclipse(var date:TDateTime; sun:boolean):TEclipse;
function NextEclipse(var date:TDateTime; sun:boolean):TEclipse;
function Sun_Rise(date:TDateTime; latitude, longitude:extended):TDateTime;
function Sun_Set(date:TDateTime; latitude, longitude:extended):TDateTime;
function Sun_Transit(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Rise(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Set(date:TDateTime; latitude, longitude:extended):TDateTime;
function Moon_Transit(date:TDateTime; latitude, longitude:extended):TDateTime;
function GetSternzeichen(const CDat:TDateTime):Integer;
function GetSeason(CDat:TDate):String;
function StartDateSeason(CDat:TDate; Season:TSeason): TDate;
function GetMoonPhase(const Dat:TDateTime): String;
function GetMoonPhaseNum(Age : extended):Integer;
function GetMoonPhaseConst(Age : extended):TMoonPhase8;
function DateTimeReal(DtTm : TDateTime; Long : extended):TDateTime;
function DateTimeTZ(DtTm : TDateTime; Hour : ShortInt):TDateTime;
im Anhang :
- die
Unit : AstroUnit
- ein Demo zur Übersicht
- ein Screenshot vom Demo
falls Ihr noch Funktionen vermisst >>> lässt sich ja noch einfügen
--> 21.12.2013 : Version 4 angefügt (Astro4.rar) :
hinzugekommen sind Berechnungen zum "Blue Moon":
function BlueMoon . . . - hier wird auf vier Vollmonde in einer Jahreszeit geprüft, der
dritte Vollmond ist dann der Blue Moon.
Im Aufruf der Funktion kann dann noch festgelegt werden, ob der
vergangene Winter oder der kommende Winter berücksichtigt wird,
geprüft wird über vier Jahreszeiten.
function Double Moon . . . - hier wird auf zwei Vollmonde in einem Monat geprüft, je nach
Definition (es gibt mehrere) ist dann der zweite Vollmond
(30. od. 31. eines Monats) der Blue Moon.
-- allg. Überarbeitung
-- in Kürze : Auswahl der Berechnungen zu Sonnenstand, Auf-Untergang nach
realer (-0,83333°), bürgerlicher(-6°), nautischer(-12°), astronomischer(-18°) Dämmerung -->
erledigt.
die Funktionen Sun_Rise ... und Sun_Set... erhalten nun einen weiteren Parameter vom Typ TCalcType (ctNull, ctGeneral, ctZivil, ctNautic, ctAstronomical)
Diese Parameter berechnen den Sonnen-Auf- bzw. Untergang nach einer Winkelabweichung von (0°, -0,8333°, -6°, -12°, -18°)
0° --> theor. Werte
-0,8333° allg. gültige Berechnung zu Soonen-Auf und Untergang
-6° bürgerliche Dämmerung
-12° nautische Dämmerung
-18° astronomische Dämmerung
Delphi-Quellcode:
function Jul_Date(Year, Month, Day, Houre, Minute, Second : Word) : Extended; // Julianisches Datum [JD]
function Jul_Day(JulianDate : Extended) : Extended; // Julianische Tageszahl [n]
function TimeZoneBias:longint; // TimeZone
function TransformDate(Datum: TDatetime): TDateTime; // Umwandlung TDateTIME
function Julian_Date(Date : TDateTime): Extended; // Julianisches Datum [JD, nach 15.10.1582]
function Delphi_Date(J_Date : Extended): TDateTime; // Delphi Datum
function Star_Time(Date : TDateTime): Extended; // Sternenzeit
function DayOfYear(Date : TDateTime): Integer; // Tag im Jahr
function DaysPerYear(Date : TDateTime): Integer; // Schaltjahr (?)
function IsLeapYear(Date : TDateTime): Boolean; // Woche im Jahr
function WeekOfYear(Date : TDateTime): Integer; // akt. Woche im jahr (KW)
function WeeksPerYear(Date : TDateTime): Integer; // Anzahl der Wochen im Jahr
function DaysPerMonth(Date : TDateTime): Integer; // Anzahl Tage im Monat
function FirstDayOfWeek(Date : TDateTime; DayIndex : Integer): TDateTime; // Erster Tag in der Woche
function DayFromDate(Date : TDate): Integer; // Tag aus Datum
function IsSummertime(Date : TDateTime): Boolean; // Sommerzeit (?)
function GetHolidayIndex(Date : TDateTime; Land : TdeState): Integer; // Feiertage (--> Index)
procedure calc_geocentric(var coord : t_coord; Date : TDateTime); // Rektaszension, Deklination
function sun_coordinate(Date : TDateTime): t_coord; // Koordinaten der Sonne
function moon_coordinate(Date : TDateTime): t_coord; // Koordinaten des Mondes
procedure calc_phase_data(Date : TDateTime;
phase : TMoonPhase; var jde, kk, m, ms, f, o, e: Extended); // Daten für Mondphase
function nextphase(Date : TDateTime; phase : TMoonPhase): TDateTime; // nächste MondPhase, Berechnung
function last_phase(Date : TDateTime; phase : TMoonPhase): TDateTime; // vorige Mondphase, Ausgabe
function next_phase(Date : TDateTime; phase : TMoonPhase): TDateTime; // nächste Mondphase, Ausgabe
function moon_phase_angle(Date: TDateTime): Extended; // Mondphase, Winkel
function age_of_moon(Date: TDateTime): Extended; // Mondalter in Tagen
function current_phase(Date : TDateTime): Extended; // aktuelle Mondphase
function moon_distance(Date: TDateTime): Extended; // Entfernung zum Mond
function lunation(Date: TDateTime): Integer; // Mondwechsel, synodische Umlaufzeit (29,530589 d), Bezug 16.01.1923
function sun_distance(Date : TDateTime): Extended; // Entfernung zur Sonne
function sun_diameter(Date : TDateTime): Extended; // rel. Sonnen-Durchmesser
function moon_diameter(Date : TDateTime): Extended; // rel. Mond-Durchmesser
function nextXXXgee(Date : TDateTime; apo: Boolean): TDateTime; // Berechnung Apogee, Perigee
function nextperigee(Date : TDateTime): TDateTime; // Perigee, Ausgabe
function nextapogee(Date : TDateTime): TDateTime; // Apogee, Ausgabe
function StartSeason(year : Integer; season : TSeason): TDateTime; // Anfang d. Jahreszeiten
function Eclipse(var Date : TDateTime; sun : Boolean) : TEclipse; // Finsternis
function NextEclipse(var Date : TDateTime; sun : Boolean): TEclipse; // nächste Finsternis
procedure correct_position(var position :t_coord; Date : TDateTime;
Latitude, Longitude, Height: Extended); // Positionsberechnungen
function Calc_Set_Rise(Date : TDateTime; Latitude, Longitude : Extended;
sun: Boolean; kind: T_RiseSet): TDateTime; // Auf- Untergang, Berechnungen
function Sun_Rise(Date : TDateTime; Latitude, Longitude : Extended;
CalcType : TCalcType): TDateTime; // Sonnenaufgang
function Sun_Set(Date : TDateTime; Latitude, Longitude : Extended;
CalcType : TCalcType): TDateTime; // Sonnenuntergang
function Sun_Transit(Date : TDateTime; Latitude, Longitude : Extended): TDateTime; // Sonnenhöchststand
function Moon_Rise(Date : TDateTime; Latitude, Longitude : Extended): TDateTime; // Mondaufgang
function Moon_Set(Date : TDateTime; Latitude, Longitude : Extended): TDateTime; // Monduntergang
function Moon_Transit(Date : TDateTime; Latitude, Longitude : Extended): TDateTime; // Mondhöchststand
function GetSternzeichen(const Date : TDateTime): Integer; // Sternzeichen --> uTable - Sternzeichen : array[1..12] of String
function GetSeason(Date : TDate): String; // Jahreszeit
function StartDateSeason(Date : TDate; Season : TSeason): TDate; // Anfangsdatum für Jahreszeiten
function GetMoonPhase(const Date : TDateTime): String; // Mondphase (String)
function GetFullMoonPhase(const Date : TDateTime): Boolean; // Vollmond ?
function GetMoonPhaseNum(Age : Extended): Integer; // Mondphase (Integer, 1 .. 8)
function DateTimeReal(DtTm : TDateTime; Long : Extended): TDateTime; // TDateTime an der aktuellen Position
function DateTimeTZ(DtTm : TDateTime; Hour : ShortInt): TDateTime; // TDateTime in der Zeitzone
procedure InitLocale; // lokale Einstellungen TDateTime
function BlueMoon(Year : Word; WinterBefore : Boolean): TDateTime; // Datum BlueMoon --> 4 Vollmonde in einer Jahreszeit
function DoubleMoon(Year, Month : Word): TDateTime; // Datum zweiter Vollmond in einem Monat
Markus H.