Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1718:raketensimulation:protokolle:14.12.17

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

ws1718:raketensimulation:protokolle:14.12.17 [2017/12/14 17:30]
leogummersbach angelegt
ws1718:raketensimulation:protokolle:14.12.17 [2018/03/07 16:41] (aktuell)
aike.teichmann
Zeile 6: Zeile 6:
 von der Erde entfernt. Trotzdem haben wir viel erreicht, zum Beispiel konnten wir ein Vektorproblem lösen von der Erde entfernt. Trotzdem haben wir viel erreicht, zum Beispiel konnten wir ein Vektorproblem lösen
 und damit haben wir nun eine Funktion zum Ausrechnen des Ortes auf Basis der wirkenden Kräfte. und damit haben wir nun eine Funktion zum Ausrechnen des Ortes auf Basis der wirkenden Kräfte.
 +
 +Unser bisheriges Projekt:
 +
 +<code python>
 +
 +import numpy as np
 +
 +class Himmelskoerper(object):​
 +
 + Liste_der_Kraefte = [np.array([0.0,​1.0,​0.0]),​np.array([0.0,​2.0,​0.0]),​np.array([1.0,​0.0,​3.0]),​np.array([1.0,​2.0,​0.0])] #​die Liste der Kraefte gefuellt mit Beispielen
 + m = 1.0
 + v = np.array([0.0,​0.0,​0.0])
 + ort = np.array([0.0,​0.0,​0.0])
 + name = ""​
 +
 + def __repr__(self):​
 + return self.name
 +
 + def __init__(self,​name,​m):​
 + self.name = name
 + self.m = m
 +
 +
 + def berechne_gravitationskraft(self,​objekt1):​
 + """​
 + Gibt die Gravitationskraft aus, die zwischen den Objekten "​objekt1"​ und "​objekt2"​ herrscht
 + Das Ergebnis wird als Vektor ausgegeben, immer in Richtung von objekt1 bis objekt2
 + """​
 + verbindungsvektor = objekt1.ort-self.ort
 + betrag = np.linalg.norm(verbindungsvektor)
 + F_betrag = (welt.gravitationskonstante * objekt1.m * self.m)/​betrag**2
 + F = (F_betrag/​betrag)*verbindungsvektor
 + return F
 +
 + def berechne_kraefte_neu(self,​welt):​
 + self.Liste_der_Kraefte = []
 + for i in welt.Liste_der_Objekte:​
 + if i.name != self.name:
 + k = i.berechne_gravitationskraft(self)
 + self.Liste_der_Kraefte.append(k)
 +
 + def berechne_resultierende_Kraft(self,​welt):​
 + self.berechne_kraefte_neu(welt)
 + r = np.array([0.0,​0.0,​0.0]) #​resultierende Kraft
 + for i in self.Liste_der_Kraefte:​
 + r = r + i
 + return r
 +
 + def berechne_beschleunigung(self,​welt):​
 + r = self.berechne_resultierende_Kraft(welt)
 + a = r/self.m
 + return a
 +
 + def berechne_geschwindigkeitsvektor(self,​zeitschritt,​welt):​
 + a = self.berechne_beschleunigung(welt)
 + v = a*zeitschritt
 + return self.v + v #alte und neue Geschwindigkeit addiert
 +
 + def berechne_ort(self,​zeitschritt,​welt):​
 + v = self.berechne_geschwindigkeitsvektor(zeitschritt,​welt)
 + s = v*zeitschritt #​zurueckgelegte Strecke im Zeitintervall
 + ort = self.ort + s
 + return ort
 +
 +#​------------------------------------------------------------------------------------------------------------------------------------
 +
 +class Planet(Himmelskoerper):​
 +
 + Abstand_zur_Sonne = 0
 + min_Temperatur = 0
 + max_Temperatur = 0
 + Umlaufperiode = 0
 + Rotationsperiode = 0
 +
 +
 +
 +#​------------------------------------------------------------------------------------------------------------------------------------
 +
 +
 +class Welt(object):​
 +                        
 + gravitationskonstante = 6.673 * 10**(-11) #​Gravitationskonstante
 + Liste_der_Objekte = []
 +
 +
 +
 +
 + def objekt_hinzufuegen(self,​objekt,​ort):​
 + """​
 + Fuegt der Welt ein Objekt hinzu
 + """​
 + self.Liste_der_Objekte.append(objekt)
 + objekt.ort = ort
 +
 + def objekt_als_satellit_hinzufuegen(self,​objekt,​satellit,​abstand):​
 + """​
 + Fuegt ein Objekt ("​satellit"​ genannt) in die Welt ein, welches sich
 + um ein anderes Objekt ("​objekt"​ genannt) dreht. Es ist dabei in einem stabilen Orbit.
 + der Abstand ("​abstand"​ genannt) ist dabei der Abstand zwischen den Mittelpunkten.
 + Ansatz: F_g = F_r
 + Nach aufloesung erhaelt man: v = sqrt(gravitationskonstante*masse_objekt/​abstand)
 + """​
 + satellit.v = (self.gravitationskonstante*objekt.m/​abstand)**0.5
 + ort = objekt.ort + np.array([abstand,​0,​0])
 + self.objekt_hinzufuegen(satellit,​ort)
 +
 +#​------------------------------------------------------------------------------------------------------------------------------------
 +
 +erde = Planet("​Erde",​5.972E24)
 +mond = Planet("​Mond",​7.35E22)
 +welt = Welt()
 +welt.objekt_hinzufuegen(erde,​np.array([0.0,​0.0,​0.0]))
 +welt.objekt_als_satellit_hinzufuegen(erde,​mond,​384400000.0)
 +print erde.ort
 +print mond.ort
 +a = mond.ort-erde.ort
 +for i in xrange(2200000):​
 + erde.ort = erde.berechne_ort(1.0,​welt)
 + mond.ort = mond.berechne_ort(1.0,​welt)
 + #print "Erde: "+ str(erde.ort)
 + #print np.linalg.norm(mond.ort-erde.ort)
 + print i/100000.0
 +b = mond.ort-erde.ort
 +print np.arccos(np.dot(a,​b)/​(np.linalg.norm(a)*np.linalg.norm(b)))
 +#print a*b
 +
 +
 +</​code>​
ws1718/raketensimulation/protokolle/14.12.17.1513269048.txt.gz · Zuletzt geändert: 2017/12/14 17:30 von leogummersbach