Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws2021:raketenbahn:berechnung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws2021:raketenbahn:berechnung [2021/04/07 16:09]
konstantinflorian
ws2021:raketenbahn:berechnung [2021/04/14 01:01] (aktuell)
konstantinflorian [Schritte]
Zeile 11: Zeile 11:
 =====Hohmann-Transfer===== =====Hohmann-Transfer=====
 Der Hohmann-Transfer ist eine energie- und zeiteffiziente Methode, von einer Umlaufbahn um einen Körper auf eine andere zu gelangen. In unserem Fall wollen wir unsere Rakete von einem Planeten, beziehungsweise dessen Umlaufbahn um die Sonne zu einen anderen Planeten lenken. Beim Hohmanntansfer wird die Rakete zweimal beschleunigt,​ einmal, um von der ursprünglichen Umlaufbahn auf eine Ellipsenbahn zu kommen, und dann, um von der Ellipsenbahn auf die endgültige Umlaufbahn zu kommen. Durch die erste Beschleunigung wird das Aphel der Flugbahn auf die geplante Umlaufbahn angehoben, durch die zweite Beschleunigung,​ wenn die Rakete das Aphel erreicht hat, wird auch das Perihel angehoben, damit die Rakete die Ellipsenbahn verlässt und auf neuen Umlaufbahn bleibt. Aphel ist der von der Sonne am weitesten entfernteste Punkt und das Perihel der sonnennächste Punkt auf der Ellipse. \\ \\ Der Hohmann-Transfer ist eine energie- und zeiteffiziente Methode, von einer Umlaufbahn um einen Körper auf eine andere zu gelangen. In unserem Fall wollen wir unsere Rakete von einem Planeten, beziehungsweise dessen Umlaufbahn um die Sonne zu einen anderen Planeten lenken. Beim Hohmanntansfer wird die Rakete zweimal beschleunigt,​ einmal, um von der ursprünglichen Umlaufbahn auf eine Ellipsenbahn zu kommen, und dann, um von der Ellipsenbahn auf die endgültige Umlaufbahn zu kommen. Durch die erste Beschleunigung wird das Aphel der Flugbahn auf die geplante Umlaufbahn angehoben, durch die zweite Beschleunigung,​ wenn die Rakete das Aphel erreicht hat, wird auch das Perihel angehoben, damit die Rakete die Ellipsenbahn verlässt und auf neuen Umlaufbahn bleibt. Aphel ist der von der Sonne am weitesten entfernteste Punkt und das Perihel der sonnennächste Punkt auf der Ellipse. \\ \\
-{{ :​ws2021:​animation_of_insight_trajectory.gif?​link&​300|}}+{{ :​ws2021:​animation_of_insight_trajectory.gif?​link&​300|Abb.01 Hohmann-Transfer}}
 Die Geschwindigkeitsänderungen lassen sich mit folgenden\\ Die Geschwindigkeitsänderungen lassen sich mit folgenden\\
  ​Konstanten berechnen: ​  ​Konstanten berechnen: ​
  
-M = Masse des Zentralkörpers,​ in diesem Fall der Sonne\\ +$M= Masse des Zentralkörpers,​ in diesem Fall der Sonne\\ 
-G = Gravitationskonstante\\ +$G= Gravitationskonstante\\ 
-ra = Zielradius\\ +$ra= Zielradius\\ 
-re = Anfangsradius\\ +$re= Anfangsradius\\ 
-a = große Halbachse der Ellipse = (re+ra)/​2\\ +$a= große Halbachse der Ellipse = $(re+ra)/2\\$ 
-va = Anfangsgeschwindigkeit\\ +$va= Anfangsgeschwindigkeit\\ 
-vz = Bahngeschwindigkeit des Zielorbits\\+$vz= Bahngeschwindigkeit des Zielorbits\\
  
  
-Die Formel für die erste Geschwindigkeitsänderung dv1 ist:+Die Formel für die erste Geschwindigkeitsänderung ​$dv1ist:
  
-dv1 = sqrt[(M*G*ra)/​(re*a)] - va+$dv1 = sqrt[(M*G*ra)/​(re*a)] - va$
  
-Die Formel für die zweite Geschwindigkeitsänderung dv2 ist:+Die Formel für die zweite Geschwindigkeitsänderung ​$dv2ist:
  
-dv2 = vz - sprt[(M*G*re)/​(ra*a)]+$dv2 = vz - sprt[(M*G*re)/​(ra*a)]$
  
  
Zeile 38: Zeile 38:
  
  
-<file python ​main.py>+<file python>
 def gravitation(obj):​ def gravitation(obj):​
     a = [0, 0, 0]     a = [0, 0, 0]
Zeile 57: Zeile 57:
  
 In der Gravitationfunktion wird die Kraft aller Objekte auf ein Objekt errechnet. In der Gravitationfunktion wird die Kraft aller Objekte auf ein Objekt errechnet.
-Dazu geht die for-Schleife alle Objekte durch und berechnet ​den Normalenvektor ​und die Beschleunigung zu diesem.\\ ​+Dazu geht die for-Schleife alle Objekte durch und berechnet ​einen genormten Vektor (Länge : 1) und die Beschleunigung zu diesem.\\ ​
 Der Wert wird jeden Durchgang der Schleife auf den Beschleunigungsvektor addiert, welcher dann am Ende zurückgegeben wird Der Wert wird jeden Durchgang der Schleife auf den Beschleunigungsvektor addiert, welcher dann am Ende zurückgegeben wird
  
Zeile 63: Zeile 63:
 =====Datenimport===== =====Datenimport=====
  
-<file python ​main.py>+<file python>
 def import_objects():​ def import_objects():​
     i = 0     i = 0
Zeile 81: Zeile 81:
  
 Jedes Objekt in dieser Datenbank hat eine ID, mit der man sich die gewünschten Daten abgreifen kann. Jedes Objekt in dieser Datenbank hat eine ID, mit der man sich die gewünschten Daten abgreifen kann.
-[[https://​ssd.jpl.nasa.gov/​horizons.cgi?​s_target=1#​top|NASA HORIZONS]]+[[https://​ssd.jpl.nasa.gov/​horizons.cgi?​s_target=1#​top|NASA HORIZONS]]\\
 Es lassen sich auch eigene Objekte, wie die Sonne hinzufügen. Es lassen sich auch eigene Objekte, wie die Sonne hinzufügen.
 +
 +
 +=====Klasse Objekt=====
 +
 +<file python>
 +class object():
 +    def __init__(self,​ size, name, id, m, x, y, z, vx=0, vy=0, vz=0):
 +        global objects
 +        self.size = size
 +        self.id = id
 +        self.name = name
 +        self.m = m
 +        self.pos = [x * 149597900000,​ y * 149597900000,​ z * 149597900000] ​ # AU in m
 +        self.v = [vx * 1731460, vy * 1731460, vz * 1731460] ​ # AU/d in m/s
 +
 +    def update(self):​
 +        dt = 100
 +        a = gravitation(self)
 +        self.v[0] += dt * a[0]
 +        self.v[1] += dt * a[1]
 +        self.v[2] += dt * a[2]
 +        self.pos[0] += dt * self.v[0]
 +        self.pos[1] += dt * self.v[1]
 +        self.pos[2] += dt * self.v[2]
 +
 +
 +</​file>​
 +
 +Die Klasse **object()** bildet das Kernstück der Simulation. Alles zu Simulierende wird durch das Erstellen einer Instanz dem System hinzugefügt.\\
 +Neben den grundlegenden Variablen wie Positions- und Geschwindigkeitsvektor hat die Klasse auch die Funktion update()\\
 +Diese ruft bei jeder Aktivierung die Gravitationsfunktion mit sich selbst als Parameter auf.\\
 +Nach Durchlauf der Funktion werden die Eigenschaften Geschwindigkeit und Position des Objekts aktualisiert ​
 +
 +
 +=====Schritte=====
 +
 +<file python>
 +data = {"​x":​ [],  # Speicherort der Frame
 +        "​y":​ [],
 +        "​z":​ [],
 +        "​size":​ [],
 +        "​Object":​ [],
 +        "​date":​ []}
 +        ​
 +        ​
 +def get_data():
 +    i = 1
 +    j = 365
 +
 +    step = 0  # Tag:86400 Sekunden, pro tag 864 Updates-->​ Beschleunigung mit Faktor 100
 +    steps = 864
 +    while i <= j:
 +        print("​calc frame :", str(i))
 +        for obj in objects:
 +            # geht objekte durch und ruft update-funktion auf
 +            data["​x"​].append(obj.pos[0] / 149597900000)
 +            data["​y"​].append(obj.pos[1] / 149597900000) ​ # speichert objektvariablen in data in AU
 +            data["​z"​].append(obj.pos[2] / 149597900000)
 +            data["​size"​].append(obj.size)
 +            data["​Object"​].append(obj.name)
 +            data["​date"​].append(i)
 +        while step < steps:
 +            for obj_ in objects:
 +                obj_.update()
 +
 +            step += 1
 +        step = 0
 +        i += 1
 +</​file>​
 +
 +Die Funktion get_data() dient zum Aktualisieren und Speichern der Schritte in dem Dictionary data.
 +Um eine annährend genaue, aber auch relativ schnelle Berechnung zu erhalten haben wir uns für eine Einteilung von 864 Zeitschritten pro Tag à 100 Sekunden entschieden.\\
 +Diese Aufteilung ist klein genug um auch schnelle Trabanten mit geringer Orbithöhe zuverlässig zu simulieren.\\
 +Das Programm geht die Tage und Zeitschritte der Tage durch und speichert den Zustand aller Objekte.\\
 +
 +
  
  
  
  
ws2021/raketenbahn/berechnung.1617804559.txt.gz · Zuletzt geändert: 2021/04/07 16:09 von konstantinflorian