Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss2021:project4:brueckensimulation

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:project4:brueckensimulation [2021/10/11 14:10]
berscjak [Entwicklung des Programms]
ss2021:project4:brueckensimulation [2021/10/14 12:27] (aktuell)
berscjak [Literaturangaben]
Zeile 5: Zeile 5:
  
 =====Ziel===== =====Ziel=====
-Unser Projektziel ist es, das Verhalten verschiedener ​Balkenbrücken ​abhängig von verschiedenen Ausgangsbedingungen zu simulieren. Dabei soll der Benutzer selbst einstellen können, welches Material verbaut wurde, wie die Belastung ist und wie die Brücke konstruiert ist. Mit der Software soll es möglich sein, zu überprüfen,​ ob die Brücke stabil ist und eine Belastung aushalten würde. Das Ergebnis soll dann entsprechend visualisiert werden.+Unser Projektziel ist es, das Verhalten verschiedener ​Brücken ​abhängig von verschiedenen Ausgangsbedingungen zu simulieren. Dabei soll der Benutzer selbst einstellen können, welches Material verbaut wurde, wie die Belastung ist und wie die Brücke konstruiert ist. Mit der Software soll es möglich sein, zu überprüfen,​ ob die Brücke stabil ist und eine Belastung aushalten würde. Das Ergebnis soll dann entsprechend visualisiert werden.
  
 =====Protokolle===== =====Protokolle=====
Zeile 17: Zeile 17:
 ===Vereinfachungen / Annahmen=== ===Vereinfachungen / Annahmen===
  
-Wir haben uns für das Projekt ​dafür ​entschieden,​ dass wir uns zunächst auf zweidimensionale Fachwerkbrücken beschränken. Außerdem soll das Programm für den Nutzer bereits die Lagerung der Brücke festlegen (Festlager auf der linken Seite und Loslager auf der rechten Seite). Die Brückenkonstruktionen sollen statisch bestimmt sein, was durch das Programm überprüft werden soll. Diese Annahmen erleichtern uns die Berechnung der Lager-und Stabkräfte und die Implementierung im Code.+Wir haben uns für das Projekt ​dazu entschieden,​ dass wir uns zunächst auf zweidimensionale Fachwerkbrücken beschränken. Außerdem soll das Programm für den Nutzer bereits die Lagerung der Brücke festlegen (Festlager auf der linken Seite und Loslager auf der rechten Seite). Die Brückenkonstruktionen sollen statisch bestimmt sein, was durch das Programm überprüft werden soll. Diese Annahmen erleichtern uns die Berechnung der Lager-und Stabkräfte und die Implementierung im Code.
  
 ===Ideales Fachwerk=== ===Ideales Fachwerk===
Zeile 55: Zeile 55:
   * pygame   * pygame
  
-Während uns numpy und math schon aus dem Crashkurs bekannt waren, mussten wir uns in pygame zunächst einarbeiten. +Während uns numpy und math schon aus dem Crashkurs ​als Bibliotheken,​ die hilfreich für das Lösen mathematischer Probleme sind, bekannt waren, mussten wir uns in pygame zunächst einarbeiten. Mit Hilfe von pygame ist es möglich, Grafiken zu bewegen, Töne abzuspielen oder auch Eingaben, wie z.B. Mausklicks oder Tastendrücke,​ abzufragen. ​Letzteres war für uns am wichtigsten,​ da so der Nutzer seine Vorstellung einer Fachwerkbrücke gut übermitteln kann. Wie der Name „pygame“ vermuten lässt, wird diese Bibliothek häufig für das Erstellen von Spielen genutzt. Unsere Anwendung ist zwar kein richtiges Spiel, aber wie ein einfaches, mit Hilfe von pygame programmiertes Spiel aufgebaut. Hauptbestandteil ist dabei eine while-Schleife,​ die die gesamte Zeit läuft, es sei denn, das Event „pygame.Quit“ findet statt. In dieser while-Schleife befindet sich eine große for-Schleife,​ in der die Art einer jeden stattfindenden Eingabe abgefragt und daraufhin spezifische Aktionen ausgeführt werden. Einige dieser Aktionen sind außerhalb der while-Schleife als Funktonen definiert. 
-Mit Hilfe von pygame ist es möglich, Grafiken zu bewegen, Töne abzuspielen oder auch Eingaben, wie z.B. Mausklicks oder Tastendrücke,​ abzufragen. ​tbc+ 
 +Einige ausgewählte Funktionen aus pygame, die wir häufig genutzt haben oder als besonders wichtig erachten, sind folgende: 
 + 
 +  * pygame.event.get():​ dient zur Übermittlung einer jeden getätigten Eingabe ​  
 +  * pygame.Rect(x-Koordinate links, y-Koordinate oben, Breite, Höhe): Erstellen eines Rechtecks  
 +  * pygame.draw.rect(Zeichenfenster,​ Farbe, Rechteck): Zeichnen des erstellten Rechtecks 
 +  * pygame.KEYDOWN:​ Wird eine Taste auf der Tastatur gedrückt, so ist das der type der jeweiligen Eingabe; jede einzelne Taste an sich hat nochmals eigene Bezeichnungen (z.B. Enter = pygame.K_RETURN,​ P = pygame.K_p, … ) 
 +  * pygame.MOUSEBUTTONDOWN:​ Wird eine Taste auf der Maus gedrückt, so ist das der type der jeweiligen Eingabe 
 + 
 +Unsere Infos zu Funktionen aus pygame haben wir aus der [[https://​www.pygame.org/​docs/​|pygame-Dokumentation]] gezogen. 
 + 
 + 
  
 ==== Entwicklung des Programms==== ==== Entwicklung des Programms====
Zeile 143: Zeile 155:
 {{ :​ss2021:​project4:​gleichungssystem.jpg |}} {{ :​ss2021:​project4:​gleichungssystem.jpg |}}
  
-Anhand dieser Struktur lässt sich auch erkennen, dass es im Vergleich zum Knotenpunktverfahren wie zuvor beschrieben einige Vereinfachungen gibt. So sind viele Zwischenschritte,​ die beim händischen Lösungsverfahren den Prozess erleichtern,​ nicht mehr nötig. Das heißt, man muss die Knoten und Stäbe nicht mehr nummerieren oder zuvor die Auflagerreaktionen und Nullstäbe bestimmen, da dies alles in einem Schritt als Gleichungssystem berechnet wird. Anhand dieser Struktur kann man auch sehen, dass die statische Bestimmtheit insofern wichtig ist, als dass es gleich viele Unbekannte wie Gleichung gibt, um das Gleichungssystem zu lösen. Der Lösungsvektor $x$ hat $s+k$ Unbekannte und es gibt insgesamt $2*k$ Gleichungen.+Anhand dieser Struktur lässt sich auch erkennen, dass es im Vergleich zum Knotenpunktverfahren wie zuvor beschrieben einige Vereinfachungen gibt. So sind viele Zwischenschritte,​ die beim händischen Lösungsverfahren den Prozess erleichtern,​ nicht mehr nötig. Das heißt, man muss die Knoten und Stäbe nicht mehr nummerieren oder zuvor die Auflagerreaktionen und Nullstäbe bestimmen, da dies alles in einem Schritt als Gleichungssystem berechnet wird. Anhand dieser Struktur kann man auch sehen, dass die statische Bestimmtheit insofern wichtig ist, als dass es gleich viele Unbekannte wie Gleichung gibt, um das Gleichungssystem zu lösen. Der Lösungsvektor $x$ hat $s+r$ Unbekannte und es gibt insgesamt $2*k$ Gleichungen.
  
 Die Berechnung wird mit der Funktion click_berechnen durchgeführt. Die Berechnung wird mit der Funktion click_berechnen durchgeführt.
Zeile 234: Zeile 246:
 </​code>​ </​code>​
    
-=== Visualisierungen ​===+Dazu wird nach der zuvor dargestellten Struktur den Arrays N und y ihre Werte zugeordnet. Abschließend wird überprüft,​ ob diese Werte die angegebenen zulässigen Grenzwerte für Stab-und Lagerkräfte nicht überschreiten. Je nach Ergebnis wird dann eine entsprechende Meldung ausgegeben. 
 +=== Visualisierung ​=== 
 + 
 +Der Nutzer des Programmes hat zu Beginn eine bestimmte Vorstellung eines zweidimensionalen Fachwerks. Diese muss er irgendwie übermitteln können. Dazu gäbe es mehrere Optionen:  
 +  * Es könnte eine Auswahl von Fachwerken zur Verfügung gestellt werden, aus der der User sich ein Fachwerk aussucht. Dann wären die Möglichkeiten jedoch sehr begrenzt und das Fachwerk könnte häufig nicht der Vorstellung des Nutzers entsprechen. 
 +  * Eine andere Möglichkeit wäre, den User dazu aufzufordern,​ Koordinaten für die Knotenpunkte als Zahlenwerte und die Anzahl der Stäbe einzugeben. Das wäre jedoch etwas unintuitiv. 
 +  * Die Möglichkeit,​ für die wir uns letztlich entschieden haben, ist die, dass wir den Nutzer das Fachwerk selber zeichnen lassen. So können alle Werte gut übermittelt werden und der Nutzer hat genügend kreativen Freiraum. 
 + 
 +Das ganze läuft dann in ungefähr 10 Schritten ab: 
 + 
 +{{ :​ss2021:​project4:​screenshot_151_.png |}}   
 + 
 +Das Startlager ist einfachheitshalber in jedem Fall das Festlager. Sobald ein Knotenpunkt als Startpunkt dient, wird er für diesen Zeitraum rot markiert. Damit es möglich ist, wirklich parallele Stäbe zu zeichnen, gibt es die Optionen "​Horizontal"​ und "​Vertikal"​. Eine weitere Zeichenhilfe ist die, dass wenn ungefähr auf einen schon existierenden Knotenpunkt geklickt wird, genau dieser wieder ausgewählt wird, bzw. dass wenn, je nachdem ob horizontal oder vertikal ausgewählt wurde, auf einen bereits existierenden Knotenpunkt geklickt wird, die x- oder y-Koordinaten übernommen werden. Die Ausgabe der Rechenergebnisse erfolgt als Liste über die Konsole. 
 + 
 +Der gesamte Code befindet sich in dieser Datei: {{:​ss2021:​project4:​brueckensimulationen.zip|}} 
  
 ===== Verlauf der Projektarbeit ===== ===== Verlauf der Projektarbeit =====
 +
 +Den Verlauf unserer Projektarbeit kann man den im Laufe der Zeit angefertigten Protokollen entnehmen: [[ss2021:​project4:​brueckensimulation:​Protokolle|]]
 +
 +  * ab 27.05.2021: Themenfindung,​ Planung und Recherche ​
 +  * ab 17.06.2021: Arbeitsteilung Code zur Berechnung, Code zur Visualisierung
 +  * ab 7.10.2021: Zusammenführen beider Programme
 ===== Fazit und Ausblick ===== ===== Fazit und Ausblick =====
  
-Das Programm weist immer noch ein paar kleine Defizite auf. So kann man beispielsweise noch keine Zahleneingabe abbrechen oder eine gerade geschrieben Zahl löschen. Auch die Reset-Funktion ​arbeitet ​an manchen Stellen noch nicht so, wie sie es eigentlich soll. ...+Das Programm weist immer noch ein paar kleine Defizite auf. So kann man beispielsweise noch keine Zahleneingabe abbrechen oder eine gerade geschrieben Zahl löschen. Auch die Reset-Funktion ​und die Undo-Option arbeiten ​an manchen Stellen noch nicht so, wie sie es eigentlich soll. Zudem kommt, dass ein paar Stellen im Code noch etwas unstrukturiert sind und möglicherweise mehr mit Klassen gearbeitet hätte werden sollen. Im Allgemeinen haben wir jedoch viel geschafft und ein funktionierendes Programm entwickelt, das sich größtenteils gut bedienen lässt und unseren Vorstellungen entspricht. 
 + 
 +Unserer Projekt bietet aber auch Potential, es weiter zu entwickeln. Weiterführende Ideen wären zum einen die Umsetzung des Ganzen im dreidimensionalen Raum. Auch eine Ausweitung auf andere Brückentypen wie Hängebrücken oder Balkenbrücken wäre denkbar. Außerdem könnte man noch versuchen, die Finite Elemente Methode, die unteranderem die Verformung von Festkörpern untersucht, mit einzubringen,​ um die Ergebnisse genauer und auch realistischer werden zu lassen.  
 + 
 +===== Literaturangaben ===== 
 + 
 +===Grundlagen Stabwerke=== 
 +[[https://​www.studyhelp.de/​online-lernen/​mechanik/​statische-bestimmtheit/​|StudyHelp:​ Statische Bestimmtheit]] 
 + 
 +Popov, Valentin: Statik und elementare Festigkeitslehre (Mechanik I) Vorlesungsnotizen WiSe 2020/​21:​{{:​ss2021:​project4:​vorlesungsskript_ws_2020_21.pdf|}} 
 + 
 +===Pygame=== 
 +[[https://​youtu.be/​jO6qQDNa2UY|Pygame in 90 Minutes - For Beginners]] 
 + 
 +[[https://​www.pygame.org/​docs/​|pygame-Dokumentation]]
  
-Weiterführende Ideen wären zum einen die Umsetzung des ganzen im dreidimensionalen Raum. Auch eine Ausweitung auf andere Brückentypen wie Hängebrücken oder Balkenbrücken wäre denkbar. Außerdem könnte man noch versuchen, die Finite Elemente Methode, die unteranderem die Verformung von Festkörpern untersucht, mit einzubringen,​ um die Ergebnisse genauer und auch realistischer werden zu lassen. ... 
ss2021/project4/brueckensimulation.1633954255.txt.gz · Zuletzt geändert: 2021/10/11 14:10 von berscjak