1982 wurden von Pierre Brétagnon die Variations séculaires des orbites planétaires (VSOP-82) vorgestellt. Damit war eine Berechnung der Planetenpositionen in wirkluch gute Genauigkeit von besser 1 Bogenskunde möglich. Das hiuer bereitliegende Programm beruht auf der Verbesserung von 1987. Hier wurden die Terme umgeordnet, so dass man durch weglassen von Termen eine geringere Genauigkeit bei verringerter Rechenzeit erreichen kann.
Das Python-Programm für alle Planeten von Merkur bis Neptun ist ziemlich umfangreich. Ich habe es deshalb als Modul konzipiert, welcher via import in das Nutzprogramm eingebunden wird. Beide Programme, das Nutzprogramm und das Modul , müssen im selben Verzeichnis liegen.
Ich habe das Modul planpos.py als Zip-Archiv hinterlegt. Es sind Routinen für heliozentrische, geozentrische und topozentrische Koodinaten enthalten, nebst allem Zubehör wie Berechnung der Sternzeit. Anbei ein Anwendungsbeispiel:
# planetVsop.py
# Beispielprogramm zur Berechnung des Planetenorts:
# heliozentrisch, geozentrisch und topozentrisch.
# die Numerik steckt im Modul planpos.py
from math import *
from planpos import *
def printDegMinSec(w):
# formatiert drucken ohne Zeilenwechsel
# print("%5.3f " % (j * dt),end="")
signum = ' '
if (w < 0):
signum = '-'
w = -w
bruchteil, deg = modf(w)
w = 60 * (bruchteil)
bruchteil, min = modf(w)
w = 60 * (bruchteil)
print(signum,end=" ")
print(int(deg), end=" ")
print(int(min), end=" ")
print(w, end=" ")
# Main
# berechneHeliozentrisch(planet, JD)
# berechneGeozentrisch(pnr, JD, epoche2000)
# def berechneTopozentrisch(JD, alpha, delta, phi, L, h):
# Leipzig
phi = 51.38579;
L = -12.43629/15;
h = 110;
JD = 2452879.636806;
print("Ausgabe: l b r a d D aT dT")
print("JD=",JD)
for j in range(0,8):
x, y, z, l, b, r = berechneHeliozentrisch(j, JD)
print("Planet:",j)
printDegMinSec(l)
printDegMinSec(b)
print(r, end=" ")
if (j != 2):
alpha, delta, Delta = berechneGeozentrisch(j, JD, 0)
printDegMinSec(alpha)
printDegMinSec(delta)
print(Delta, end=" ")
alphaT, deltaT=berechneTopozentrisch(JD, alpha, delta, Delta, phi, L, h)
printDegMinSec(alphaT)
printDegMinSec(deltaT)
print("")
# Prompt am Ende
ende = input("Fertig.")
Uwe Pilz, Februar 2025