JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Michael Wand
Christian Ali Mehmeti-Göpel
Wintersemester 2020/21DIGITAL

Nachbearbeitung 02

Aufgabe
Einführung in die Softwareentwicklung



Aufgabe Die teuerste Pi-Approximation der Welt

Letzte Änderung: 09. October 2020, 09:29 Uhr
\(5\) Punkteim Detail
Ansicht:   |  

Startkonfiguration: Wir stellen uns das folgende Szenario vor: Auf einer Ebene befinden sich zwei Objekte an den Positionen \(x_1 = 1/2\) und \(x_2 = 1\) mit den Geschwindigkeiten \(v_1 = 0\) und \(v_2 = 0\) und den Gewichten \(m_1 = 1\) und \(m_2 = 10^{2\cdot k}\) (für variables \(k=0,1,\dots,\)). In unserer Simulation gibt es keine Reibung; die Objekte können, einmal angestoßen ewig auf der x-Achse nach links beziehungsweise rechts gleiten. Wir stoßen nun Objekt 2 nach links hin an und geben ihm also die Geschwindigkeit \(v_2=-1\).



Bemerkung: Die Quelle der Idee ist das Youtube-Video https://www.youtube.com/watch?v=HEfHFsfGXjs. In dem Video ist auch eine sehr schöne Visualisierung zu sehen und eine Erklärung sowie eine detaillierte Herleitung für die Interessierten.


Nun zur Simulation selbst: Die Geschwindigkeit eines Objektes ist die Ableitung dessen Ortes nach der Zeit. Oder mathematisch ausgedrückt: \[ x' = \frac{dx}{t} =: v. \] Dies können wir nicht unendlich genau auflösen (Computer können nur diskrete Zeitschritte darstellen). Aus dem Grund approximieren wir einen Zeitschritt durch \[ x \leftarrow x + v\cdot t, \] das heißt, wir gehen einen infitesimalen Schritt in Richtung der Geschwindigkeit des Objektes. Konkret heißt das, dass sich im ersten Simulationsschritt „Objekt 2“ ein kleines Stück nach links bewegt und „Objekt 1“ gar nicht bewegt.


Das könnte nun iterativ wiederholt werden, bis sich „Objekt 2“ zur Milchstraße (-Infinity) bewegt hat. Aus dem Grund möchten wir nun Kollision zur Simulation hinzunehmen. Wir gehen dabei von einem elastischen Stoß aus. Das bedeutet dass das System durch die Kollision keine Energie verliert, \(\delta E = 0\).



Wie bestimmen wir nun \(\pi\)?: Wir haben also eine einfache Simulation mit Kollision(zumindest auf dem Papier) gebaut. Das Interessante ist nun, dass wir nun nur noch Zählen müssen wie oft „Objekt 1“ insgesamt (mit der Wand oder mit „Objekt 2“) eine Kollision wiederfährt. Wenn wir nun das Gewicht von „Objekt 2“ folgendermaßen wählen, also \[ m_2 = 10^{2\cdot k}, \quad \text{mit} \quad k = 0, 1, 2, \dots, \] sollten sie an der Anzahl der Kollisionen direkt eine Beziehung zu \(\Pi\) erkennen.


Aufgaben

Ihre Aufgabe ist es nun, diese Simulation zu implementieren. (Keine Angst vor der Komplexität; eine direkte Implementierung „ohne Tricks“ umfasst lediglich rund 30 Zeilen Code.) Dazu gibt es einige Dinge, die Sie beachten können: