Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss2021:project2:partikelsimulation [2021/10/14 22:58] Moritz02 |
ss2021:project2:partikelsimulation [2021/10/14 23:37] (aktuell) Moritz02 [Partikelsimulation] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | //Gruppenmitglieder:\\ | ||
+ | Paulina Marie Fritze, Berhan Rêzan Isik, Moritz Merkel und Amelie Schäfer//\\ | ||
======Partikelsimulation======= | ======Partikelsimulation======= | ||
- | Im Rahmen des Projektlabor Mathesis, welches im MINTgrün Orientierungsstudium angesiedelt ist, wurde dieses Projekt umgesetzt. Wie bereits der Name andeutet, ist das Ziel des Projekts eine Simulation von Partikeln im dreidimensionalen Raum. Besonders auf die drei Kerneigenschaften Gravitation, Reibung und Kollision wird hierbei wertgelegt. | + | Im Rahmen des Projektlabor Mathesis, welches im MINTgrün Orientierungsstudium angesiedelt ist, wurde dieses Projekt umgesetzt. Wie bereits der Name andeutet, ist das Ziel des Projekts eine Simulation von Partikeln im dreidimensionalen Raum. Besonders auf die drei Kerneigenschaften Gravitation, Reibung und Kollision wird hierbei wertgelegt.\\ |
- | Während der Arbeit an unserem Projekt hielten wir unsere Fortschritte in diesem [[ss2021:project2:protokoll|Protokoll]] fest. | + | Während der Arbeit an unserem Projekt hielten wir unsere Fortschritte in diesem [[ss2021:project2:protokoll|Protokoll]] fest. Der überwiegende Teil des Projekts entstand beim gemeinsamen Arbeiten in der Gruppe. |
=====Struktur des Programms===== | =====Struktur des Programms===== | ||
Zeile 38: | Zeile 39: | ||
Aus physikalischer Sicht steht jeder Frame für eine Sekunde, wobei die Simulation (aus ästhetischen und praktischen Gründen) deutlich schneller abgespielt wird. | 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|}} | + | {{:ss2021:project2:code_schleife1.jpg?600|}} |
+ | >Abbildung 1: Die Umsetzung der Gravitation und der Reibung | ||
Zeile 60: | Zeile 62: | ||
=====Herausforderungen und Pläne für die Zukunft===== | =====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. Als nächstes mussten wir eine sinnvolle Struktur finden, um die Partikel im Code zu repräsentieren. Wir entschieden uns für die Dictionaries, da mit diesem Datentyp verständlich auf Eigenschaften der Partikel zugegriffen werden kann. Wir begannen die Simulation, indem wir zunächst die Hauptschleife sehr einfach aufbauten, der einzige Vorgang war hierbei die Aktualisierung der Position durch das Hinzurechnen der Geschwindigkeitsvektoren bei allen Partikeln. Anschließend setzten wir die Gravitation und die Reibung um. Bei beiden Eigenschaften fingen wir mit physikalischen Vorüberlegungen an und erstellten hinterher die entsprechenden Funktionen mit der passenden Implementierung innerhalb der Hauptschleife. Schwierigkeiten bereitete uns auch die Kollision. Zunächst suchten wir eine Möglichkeit Objekte aus unserer Simulation verschwinden zu lassen, vpython bot entsprechende Möglichkeiten an.\\ | 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. Als nächstes mussten wir eine sinnvolle Struktur finden, um die Partikel im Code zu repräsentieren. Wir entschieden uns für die Dictionaries, da mit diesem Datentyp verständlich auf Eigenschaften der Partikel zugegriffen werden kann. Wir begannen die Simulation, indem wir zunächst die Hauptschleife sehr einfach aufbauten, der einzige Vorgang war hierbei die Aktualisierung der Position durch das Hinzurechnen der Geschwindigkeitsvektoren bei allen Partikeln. Anschließend setzten wir die Gravitation und die Reibung um. Bei beiden Eigenschaften fingen wir mit physikalischen Vorüberlegungen an und erstellten hinterher die entsprechenden Funktionen mit der passenden Implementierung innerhalb der Hauptschleife. Schwierigkeiten bereitete uns auch die Kollision. Zunächst suchten wir eine Möglichkeit Objekte aus unserer Simulation verschwinden zu lassen, vpython bot entsprechende Möglichkeiten an.\\ | ||
+ | |||
{{ :ss2021:project2:entfernen_von_partikeln.png?400 |}} | {{ :ss2021:project2:entfernen_von_partikeln.png?400 |}} | ||
>Abbildung 2: Hier wurden die Partikel noch nicht entfernt | >Abbildung 2: Hier wurden die Partikel noch nicht entfernt | ||
- | Bei der eigentlichen Programmierung bestand die Herausforderung darin, mit entfernten Objekten umzugehen. Anders als bei zum Beispiel der Gravitation konnten wir nun nicht mehr zwei for-Schleifen in einander verschachteln, um mögliche Kollisionen festzustellen und dann auch auszuführen, da sobald Partikel aus der Kollision entfernt wurden, die Schleifen frühzeitig abgebrochen werden konnten. Wir nutzten zwei while-Schleifen um diese Problematik zu umgehen. Die Fusion ließ sich recht problemlos umsetzten, aber die Explosion bereitete uns Schwierigkeiten und bot eine Menge Fehlerquellen auf.\\ | + | Bei der eigentlichen Programmierung bestand die Herausforderung darin, mit entfernten Objekten umzugehen. Anders als bei zum Beispiel der Gravitation konnten wir nun nicht mehr zwei for-Schleifen in einander verschachteln, um mögliche Kollisionen festzustellen und dann auch auszuführen, da sobald Partikel aus der Kollision entfernt wurden, die Schleifen frühzeitig abgebrochen werden konnten. Wir nutzten zwei while-Schleifen um diese Problematik zu umgehen. Die Fusion ließ sich recht problemlos umsetzten, aber die Explosion bereitete uns Schwierigkeiten und bot eine Menge Fehlerquellen auf.\\ |
{{ :ss2021:project2:explosion_fehlerresultate.png?400 |}} | {{ :ss2021:project2:explosion_fehlerresultate.png?400 |}} | ||
>Abbildung 3: Das Ergebnis eines Fehlers auf dem Weg zur Explosion | >Abbildung 3: Das Ergebnis eines Fehlers auf dem Weg zur Explosion | ||
Schlussendlich konnten wir diese Punkte aber umsetzen. Man könnte das Projekt noch gut fortführen, indem bespielsweise noch interaktive Funktionen hinzugefügt werden, um Konstanten der Simulation, wie zum Beispiel bei der Gravitation, zu verändern. Auch die Codestruktur kann noch verbessert werden, indem zum Bespiel Vektoren zu einem Objekt zusammengefasst werden. Unser Projekt bot eine Menge Potential für kreative Ideen und wir konnten auch einige darin verwirklichen. | Schlussendlich konnten wir diese Punkte aber umsetzen. Man könnte das Projekt noch gut fortführen, indem bespielsweise noch interaktive Funktionen hinzugefügt werden, um Konstanten der Simulation, wie zum Beispiel bei der Gravitation, zu verändern. Auch die Codestruktur kann noch verbessert werden, indem zum Bespiel Vektoren zu einem Objekt zusammengefasst werden. Unser Projekt bot eine Menge Potential für kreative Ideen und wir konnten auch einige darin verwirklichen. | ||
=====Der Code des Projektes===== | =====Der Code des Projektes===== | ||
- | Damit das Programm funktioniert muss vpython installiert sein. Es sollte sich beim Ausführen ein Browserfenster mit einem Bild öffnen. Dieses Bild kann vergrößert werden, indem man die Ränder des Bildes nach außen zieht. Daher startet die Simulation erst nach fünf Sekunden. In der Simulation bewegen kann man sich mit (Shift/Strg/Alt)+Linksklick für Bewegung, Rotation und Zoom. | + | Damit das Programm funktioniert, muss die Bibliothek vpython installiert sein. Es sollte sich beim Ausführen ein Browserfenster mit einem Bild öffnen. Dieses Bild kann vergrößert werden, indem man die Ränder des Bildes nach außen zieht. Daher startet die Simulation erst nach fünf Sekunden. In der Simulation bewegen kann man sich mit (Shift/Strg/Alt)+Linksklick für Bewegung, Rotation und Zoom. |
<code python> | <code python> | ||
''' | ''' | ||
Zeile 187: | Zeile 191: | ||
kugeln[i].pos=vp.vector(partikel[i]['x'],partikel[i]['y'],partikel[i]['z']) | kugeln[i].pos=vp.vector(partikel[i]['x'],partikel[i]['y'],partikel[i]['z']) | ||
</code> | </code> | ||
+ | Zu guter letzt ist hier der Code und die erforderlichen Anforderungen für die Bibliotheken zusammengefasst. | ||
+ | {{:ss2021:project2:partikelsimulation.zip|}} |