Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss2021:project2:doku

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
ss2021:project2:doku [2021/10/08 11:42]
Moritz02 Kollision
ss2021:project2:doku [2021/10/14 15:23] (aktuell)
pauli_fritze [Reibung]
Zeile 11: Zeile 11:
 Die Gravitation war die erste und bleibt nach wie vor die wichtigste programmierte Eigenschaft in unserem Code. Die Gravitation war die erste und bleibt nach wie vor die wichtigste programmierte Eigenschaft in unserem Code.
 ===Theorie=== ===Theorie===
-$F_g=\gamma\frac{m_1\cdot m_2}{r^2}$+ 
 + 
 + 
 +$F=m\cdot a$ 
 + 
 +Als Gravitation bezeichnet man die Anziehungskraft zwischen Massen. Jede Masse im Universum zieht sich gegenseitig an, $F_G=\gamma\cdot\frac{m_1\cdot m_2}{r^2}$ ​dabei ist die Stärke der Anziehungskraft abhängig von Masse und Abstand der Massekörper. Die Abhängigkeit vom Abstand zwischen den Körpern führt dazu, dass bei sehr geringen Abständen (limes r gegen null) die Gravitationskraft sehr groß wird. Da Körper ihre Masse nicht in einen Punkt konzentrieren,​ dreidimensionale Objekte sind, kommt es zu Kollisionen,​ bevor die Stärke der Gravitation sozusagen ins unendliche schießt. [Zur Kollision in unserer Simulation folgt später ein Abschnitt] 
 +Die Gravitationskonstante $\gamma$ beträgt im Universum ungefähr $6,​67\cdot10^{-11}\frac{m^3}{kg\cdot s^2}$, weshalb die Gravitation zwischen kleinen Massen üblicherweise nicht zu einer spürbaren Beschleunigung führt. In unserer Simulation haben wir größere Konstanten gewählt, und somit die Stärke der Anziehungskraft deutlich erhöht.  
 + 
 +Bei den Berechnungen stoßen wir, sobald mehr als zwei Massekörper im Spiel sind, auf das sogenannte Dreikörperproblem (([[ https://​www.spektrum.de/​lexikon/​physik/​dreikoerperproblem/​3389 ]])) : für drei und mehr Körper ist es bisher (bis auf Spezialfälle) nicht gelungen, exakte analytische Lösungen zu finden und Bahnkurven genau vorherzusagen,​ die Differentialgleichungen beinhalten zu viele unbekannte Variablen. 
 +Numerische Berechnungen sind dennoch möglich, wobei für jedes Paar von Massekörpern in jedem Zeitschritt die Kraft bestimmt -und aus allen Kräften für die einzelnen Partikel die resultierende Beschleunigung aufsummiert wird.  
 +Mit dieser neuen Beschleunigung ergibt sich eine aktuelle Momentangeschwindigkeit für jedes Partikel, und die Position im nächsten Zeitschritt wird für die erneute Berechnung verwendet. Mithilfe dieser Methode konnten wir in unserer Simulation die Wechselwirkung vieler Massen aufeinander darstellen. 
 ===Umsetzung=== ===Umsetzung===
 +
 +In jedem Frame, also Zeitschritt,​ unserer Simulation, werden die einzelnen Partikel nacheinander betrachtet.
 +Dieses Schema zeigt grob die durchlaufenen Schleifen:
 +
 +Zunächst werden die Abstände zu den anderen Partikeln berechnet, und anschließend entweder eines der beiden Kollisions-szenarien (Fusion/​Explosion),​ oder die Gravitations-beschleunigung berechnet.
 +Für die Berechnung der Beschleunigung erstellten wir die Funktion "​Gravitation"​. Als Input nimmt sie die Positionen zweier Partikel (diese sind als x,y,z Koordinate in der Partikelliste gegeben) und die Stärke der Gravitationskonstante,​ und als Output erhalten wir die Beschleunigung,​ welche auf Partikel i wirkt. In einem Zeitschritt von einer Sekunde entspricht diese Beschleunigung dem Geschwindigkeitsvektor,​ welcher durch diese Beschleunigung an dem Partikel ansetzt, da $a=\frac{v}{s}$ gilt. Diese Geschwindigkeitsvektoren werden alle auf die 
 +vorherige Geschwindigkeit von Partikel i hinzu addiert, und es ergibt sich die neue Momentangeschwindigkeit.
 +
 +Aus physikalischer Sicht steht jeder Frame für eine Sekunde, wobei die Simulation (aus ästhetischen und praktischen Gründen) deutlich schneller abgespielt wird. 
 +
 +{{:​ss2021:​project2:​code_schleife.jpg?​800|}}
 +
 +
 ====Reibung==== ====Reibung====
 ===Theorie=== ===Theorie===
 +Als einen weiteren Bestandteil unserer Simulation haben wir Reibung eingebaut, welche die Bewegung dämpft, da kinetische Energie umgewandelt wird. Es gibt verschiedene Arten von Reibung, Abhängig von beispielsweise der größe der Angriffsfläche des Objekts und der Beschaffenheit der Umgebung durch die es sich bewegt.
 +Wir haben uns dfür entschieden,​ abhängig von Geschwindigkeit und Masse der Partikel, einen geringen Geschwindigkeitsverlust zu kalkulieren.
 +
 +Wenn sich also einige Partikel in einem Kräftegleichgewicht auf stabilen Bahnen bewegen, führt die Reibung in der Simulation dazu, dass sie stetig kleine Anteile ihrer Bewegungsenergie verlieren, und die Bahnen nicht endlos als stabile Bewegung gegeben bleiben.
 +
 ===Umsetzung=== ===Umsetzung===
 ====Kollision==== ====Kollision====
Zeile 26: Zeile 55:
 ===Fusion oder Explosion=== ===Fusion oder Explosion===
 Um zu entscheiden,​ welche der beiden Vorgänge bei einer Kollision passieren, nehmen wir zunächst die Norm der Differenz der Richtungsvektoren der beiden alten Partikel. Wenn nun dieses Ergebnis kleiner als eine Konstante namens "​threshold"​ ist, entsteht eine Fusion, sonst eine Explosion. Es ist schwierig diesen Grenzwert so zu wählen, dass weder alles Explodiert, noch alles in sich zusammenfällt. Um zu entscheiden,​ welche der beiden Vorgänge bei einer Kollision passieren, nehmen wir zunächst die Norm der Differenz der Richtungsvektoren der beiden alten Partikel. Wenn nun dieses Ergebnis kleiner als eine Konstante namens "​threshold"​ ist, entsteht eine Fusion, sonst eine Explosion. Es ist schwierig diesen Grenzwert so zu wählen, dass weder alles Explodiert, noch alles in sich zusammenfällt.
-=====Hier noch was einfügen=====+=====Herausforderungen und Pläne für die Zukunft===== 
 +Die erste Herausforderung dieses Projektes war eine passende Bibliothek zu finden, um die graphische Umsetzung zu ermöglichen. Anfangs wollten wir matplotlib nutzen, aber schnell war klar, dass diese Bibliothek nicht unseren Vorstellungen entsprach. Alles funktionierte nur sehr langsam und war zuzüglich sehr umständlich. Wir entschieden uns für die Bibliothek vpyhthon, welche uns auf eine einfache Weise ermöglichte,​ Körper in einer dreidimensionalen Welt zu platzieren. In dieser Welt kann man sich sogar bewegen, die Simulation konnten wir uns so von allen Seiten anschauen und waren nicht auf einen Blickwinkel beschränkt. 
 +<code python>​ 
 +raise TypeError 
 +</​code>​
ss2021/project2/doku.1633686166.txt.gz · Zuletzt geändert: 2021/10/08 11:42 von Moritz02