Da die Swiss Ephemeris als Bibliothek vorliegt, muss eine Anwendung, die ihre Funktionen nutzt, nicht unbedingt selbst in C programmiert sein. Irgendeine Programmiersprache muss jedoch verwendet werden, um auf die Swiss Ephemeris zuzugreifen. Je nach verwendeter Programmiersprache müssen Sie in der Dokumentation dieser Sprache nachforschen, wie der Zugriff auf die Funktionen einer Bibliothek, z.B. unter Windows der Zugriff auf eine DLL, erfolgen muss.
Ich will in diesem Artikel demonstrieren, wie man auf einer Windows-Plattform die Tabellenkalkulationssoftware Excel verwenden kann, um Funktionen der Swiss Ephemeris aufzurufen. Unter Windows benötigen Sie die aktuelle DLL der Swiss Ephemeris. Sie heisst swedll32.dll. Vielleicht haben Sie diese DLL bereits auf Ihrer Festplatte, denn die Swiss Ephemeris ist Teil von verschiedenen populären Astrologieprogrammen. Um auf die Funktionen zugreifen zu können, muss sichergestellt sein,
Um im Tabellenkalkulationsprogramm Excel auf die Funktionen der Swiss Ephemeris zuzugreifen, verwenden Sie die von Microsoft für komplexere Zellberechnungen vorgesehene Programmiersprache Visual Basic (VBA). Sie ist in meinen Augen keine besonders schöne Programmiersprache, ja im Vergleich zu Sprachen wie Perl geradezu hässlich - aber sie tut ihre Dienste, und als Excel-Anwender müssen wir uns auf sie einlassen.
Die zu verwendenden Funktionen der Swiss Ephemeris müssen nun zu Beginn der Verarbeitung eines Excel-Sheets der VBA-Laufzeit bekanntgemacht werden. Dies geschieht durch Deklarationen wie die folgende:
Public Declare Function swe_calc_ut Lib "swedll32.dll" _
Alias "_swe_calc_ut@24" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef x As Double, _
ByVal serr As String _
) As Long
Das ist schon alles. Wünschen Sie sich ein bisschen Glück, wenn Sie nun beginnen, eigene VBA-Funktionen im Macro-Abschnitt Ihres Excel-Sheets zu programmieren. Die folgende VBA-Funktion beispielsweise berechnet die Position eines Planeten aus dem gregorianischen Datum in Jahr, Monat und Tag und gibt die ekliptikale Länge zurück:
Public Function SwissCalc(Planet As Long, Year As Integer, Month As _
Integer, Day As Integer, hour As Double) As Double
Dim lon_lat_dist(6) As Double
Dim err_msg As String
Dim flag_ret As Long
jd = swe_julday(Year, Month, Day, hour, 1)
err_msg = String(255,0)
flag_ret = swe_calc_ut(jd, Planet, SEFLG_MOSEPH, lon_lat_dist(1), err_msg)
SwissCalc = lon_lat_dist(1)
End Function
Beachten Sie, dass Sie, um einen String zu übergeben wie hier err_msg, genügend Speicher bereitstellen müssen, in den das aufgerufene Funktion ihre Daten hineinschreiben kann. Hierzu dient hier das Statement err_msg = String(255,0). Bei der Angabe des Strings err_msgals Argument einer Funktion wird dann ein Zeiger auf das erste Zeichen der Zeichenfolge an die DLL übergeben. Gemäss Programmierhandbuch der Swiss Ephemeris wird der in dieses Feld geschrieben String nie länger als 255 Zeichen sein. Nur aufgrund dieser Zusicherung wissen wir, dass keine Speicherüberschreibung auftreten kann.
Die in diesem Artikel vorgestellte Tabellenkalkulation orbit.xls kann nur dann auf die Swiss Ephemeris zugreifen, wenn die Ephemeridendateien im Verzeichnis C:\SWEPH\EPHE zu finden sind. Befinden sie sich an einem anderen Ort, z.B. an C:\SWISS\EPHE, so müssen Sie den VBA-Code so ändern, dass beim Laden der Tabellenkalkulation einmal die Funktion
swe_set_ephe_path ("C:\\SWISS\\EPHE") 'Nur nötig für abweichenden Ort der Ephemeridendateien
aufgerufen wird (beachten Sie die doppelten Backslashes, der erste ist das Fluchtsymbol für den zweiten).
Die Kalkulation hat zwei Blätter, eines heisst "Ephemeride", das andere "Orbit". Ich will zunächst das Ephemeridenblatt besprechen. Es sollte auch auf Ihrem Rechner ungefähr so aussehen wie hier links dargestellt: Dies ist der obere Teil des Ephemeridenblatts. Sie können ihn verwenden, um Horoskopstände mit der Swiss Ephemeris zu berechnen. Die Felder in Fettschrift sind die Eingabefelder. Geben Sie dort die geographische Position, die Weltzeit und das Datum ein. Verwenden Sie dabei für die Länge und Breite die Sexagesimalnotation, wie sie früher in Taschenrechnern üblich war, indem die ersten beiden Nachkommastellen die Minuten und die folgenden beiden Stellen die Sekunden bedeuten. Also z.B. 15.1632 für 15°16'32".
Excel ist so programmiert, dass während der Eingabe erst einmal überhaupt nichts passiert. Erst wenn Sie die Zelle verlassen, z.B. mit der Tabulator- oder Entertaste, werden alle Zellen, die von der eingegebenen abhängen, neu berechnet.
Dieser Teil des Ephemeridenblatts ist so aufgebaut, wie Sie früher handschriftlich ein Horoskop berechnet hätten. Aus Datum und Zeit entnahmen Sie (damals mittels Interpolation) die Planetenstände aus der Ephemeride. Die Häuserspitzen (hier für ASC und MC vorgeführt) berechneten Sie in mehreren Schritten, ausgehend von der Greenwicher Sternzeit, zu der Sie die in Zeit umgewandelte Länge des Geburtsortes hinzuzählten. Das ergab schliesslich die Sternzeit des Gebortsortes (als Zeit) oder RAMC (dasselbe als Bogen), die Grundlage für die Berechnung aller Häuserspitzen (die Sie dann für die betreffende Breite einer Häusertafel entnahmen).
Im rechten Teil desselben Ephemeridenblatts finden Sie einen anderen nützlichen Rechner: Sie können damit Datumswerte in eine fortlaufende "Julianische Tageszahl" (JD) verwandeln, wie sie in der Astronomie üblich ist.
Auch hier wieder sind die hervorgehobenen Felder für Tag, Monat und Jahr die Eingabefelder. Die Formeln der übrigen Zellen berechnen dann die fortlaufenden Julianischen Tageszahlen (JD) der beiden Daten. Unterm Strich wird dann die Differenz der beiden Daten in Tagen berechnet, daraus resultierend die Differenz in Sonnenjahren und schliesslich der Ereignisbogen unter Zugrundelegung des Schlüssels 1 Grad = 1 Jahr (Ptolemäus-Schlüssel).
Der Ereignisbogen spielt insbesondere bei der Korrektur der Geburtszeit mittels Primärdirektionen eine Rolle. Wenn Sie den Bogen eines Ereignisses kennen und dieses einer Primärdirektion zu einer Achse (Aszendent oder MC) zugeordnet haben, können Sie durch Rückrechnung die daraus resultierende Geburtssternzeit ermitteln.
Wenn Sie das Ephemeridenblatt nach unten rollen, sehen Sie das Monatsblatt einer Ephemeride. Einen Auszug habe ich hier links abgebildet.
Entscheidend ist, dass Sie den Monat und das Jahr völlig frei wählen können. Nach Eingabe eines Monats und/oder eines Jahrs werden die Positionen sämtlicher Planeten für jeden Tag des Monats für 0h Weltzeit neu berechnet. Sie haben damit in kürzester Zeit eine Ephemeride, die für einige Jahrtausende verwendbar ist (das ist besonders interessant für die astrologische Geschichtsforschung).
Diese Monatsephemeride stellt in dieser Form ein praktisches Anwendungsbeispiel dar. Sie können es leicht nach eigenen Vorstellungen abwandeln, ohne viel programmieren zu müssen. Sie könnten etwa ein ähnliches Blatt zur Berechnung der Sekundärdirektionen einer Person oder eines Ereignisses auf dieser Grundlage leicht selbst zusammenstellen. Schauen Sie sich einfach an, wie die Zellen berechnet werden. Im VBA-Editor sehen Sie die Bedeutung der Funktionsparameter. Wandeln Sie dann das Beispiel entsprechend ab.
Besonders die mundanastrologischen Überlegungen von Gerhard Lukert regten mich dazu an, einen "Orbitrechner" in Excel zu verfassen. Es ist mit dem Rechenblatt "Orbit" möglich,
In diesem Blatt gefiel es mir, die für die Eingabe vorgesehenen Tabellenfelder rosa einzufärben. Sie sehen, dass Sie die von den Astronomen zur Definition einer Bahnellipse verwendeten Elemente eingeben können:
Der Langzeitephemeride habe ich noch einige weitere hypothetische sowie einige langsam umlaufende Himmelskörper hinzugefügt. Isis (Transpluto) und Nibiru sind zwei hypothetische Planeten. Eros und Eris hingegen sind die Asteroiden der Nummer 433 und 136199 (letzterer ist auch unter seiner Katalognummer 2003UB313 bekannt). Diese werden nur dann richtig berechnet, wenn die betreffenden Ephemeridendateien im Verzeichnis C:\sweph\ephe enthalten sind. Auch diese Ephemeridendateien können Sie in der Download Area der Swiss Ephemeris herunterladen.
Für Kenner der Ephemeridenrechnung: Die Präzession habe ich hier nur näherungsweise berechnet, indem ich eine gleichförmige Präzession von 5026.87" pro Jahrhundert in Rechnung gebracht habe. Da die Epoche hier frei eingebbar ist, kann für die Umrechnung auch keine Funktion der Swiss Ephemeris verwendet werden (hier gibt es nur Umrechnungen mit festen Äquinoktien wie J1900 oder J2000). Eine Programmierung der exakten Umrechnung, wie sie z.B. in Oliver Montenbrucks Grundlagen der Ephemeridenrechnung, Verlag Sterne und Weltraum, München 1987, Kapitel 4 angegeben ist, erschien mir an dieser Stelle übertrieben, da es ja nur um einen groben Überblick der Bahnbewegung im Laufe der Jahrtausende geht.
Frameworks für solche, auch unter dem Namen Unit Tests laufenden Testsuiten gibt es in den meisten Programmiersprachen. Es ist auch nicht schwer, ein kleines Framework dafür zu schreiben, wie ich es hier für das Excel-VBA getan habe. Ich habe das Excel-Programm orbit.xls um eine kleine Sammlung besonders wichtiger Selbsttests erweitert, die sich bei Fehlermeldungen leicht um weitere Tests ergänzen lässt. Hier eine Ansicht auf das Blatt "Selbsttest" mit dem Knopf "Tests ausführen"
Um weitere Tests hinzuzufügen, ergänzt man den Namen des Tests in der Spalte "Funktionsname" und verfasst dann im VBA-Code zu diesem Blatt eine Funktion dieses Namens. Der Aufruf erfolgt dynamisch mit der VBA-Funktion CallByName().
| Zum Anfang | Zurück zur Homepage |