Ein paar kleine Anmerkungen zu Deinem interessanten Beitrag zur Simulationen zur Bahnbewegung von Planeten:
- Wenn Du nicht von Numpy Gebrauch machst dann empfehle ich gerade beim math Modul ein import * from math (also alle Symbole in den Namespace bringen) oder eine explizite Importierung (from math import atan2,sin,cos,...). Es wirkt sehr unübersichtlich wenn überall der Modulname (math.xxx) davor steht. Leider wurden die grundlegenden mathematischen Operationen nicht in den Core aufgenommen, aber Python war ja nie als mathematisch-technische Sprache entworfen worden.
- Eine Einrücktife von 4 Spaces ist bei Python üblich.
- Der Wertebereich der wahren Anomalie ist [0,360] deg. Beim ATAN2 kann das Ergebnis negativ werden, dann musst du 360 addieren. Oder Du addierst immer 360 deg und machst von der Modulo Funktion Gebrauch.
So sähe meine Version Deines Programms dann aus:
Code:
from math import atan2,sin,cos,degrees,fmod,sqrt,pi
# Ellipse
a = 1
e = 0.6
b = sqrt(1-e*e)
f_ellip = pi*a*b
# Startpunkt
t = 0
u = a*cos(t)-e
v = b*sin(t)
# Fläche ist erstmal 0
f = 0
anzahlSchritte = 200
# Schleife durch alle Werte von t
for i in range(anzahlSchritte):
t = t + 2*pi/anzahlSchritte
x = a*cos(t)-e
y = b*sin(t)
p = sqrt((x-u)**2+(y-v)**2)
q = sqrt(u**2+v**2)
r = sqrt(x**2+y**2)
s = (p+q+r)/2
f = f + sqrt(s*(s-p)*(s-q)*(s-r))
u = x
v = y
# Ephemeriden drucken
print("Teilfläche (%): ", 100*f/f_ellip)
T = fmod(atan2(y,x) + 2*pi, 2*pi)
print("Wahre Anomalie: ", degrees(T))
print("")
print("Berechnet: ", f)
print("Theorie : ", f_ellip)
print("Differenz: ", abs(f-f_ellip))
input("\nTaste drücken... ")
Und in Julia würde das Programm wie folgt aussehen:
Code:
# Ellipse
a = 1
e = 0.6
b = sqrt(1-e*e)
f_ellip = pi*a*b
# Startpunkt
t = 0
u = a*cos(t)-e
v = b*sin(t)
# Fläche ist erstmal 0
f = 0
anzahlSchritte = 200
# Schleife durch alle Werte von t
for i = 0:anzahlSchritte-1
t = t + 2*pi/anzahlSchritte
x = a*cos(t)-e
y = b*sin(t)
p = sqrt((x-u)^2+(y-v)^2)
q = sqrt(u^2+v^2)
r = sqrt(x^2+y^2)
s = (p+q+r)/2
f = f + sqrt(s*(s-p)*(s-q)*(s-r))
u = x
v = y
# Ephemeriden drucken
println("Teilfläche (%): ", 100*f/f_ellip)
T = mod(180*atan2(y,x)/pi + 360, 360)
println("Wahre Anomalie: ",180*T/pi)
println()
end
println("Berechnet: ", f)
println("Theorie : ", f_ellip)
println("Differenz: ", abs(f-f_ellip))
print("\nTaste drücken ..."); readline()
VG Mike