SteviePhysics
Simple Physik Engine für 2D. Nicht für Spiele bzw. interaktive Echtzeitanwendungen sondern einfach nur viel Physik. Gute Möglichkeit um die physikalischen Formel in der “Praxis” auszuprobieren.
Der Schiefe Wurf, ein einfacher Start
Wir befinden uns in der klassischen Mechanik und beginnen mit Newtons Gesetzt. “Kraft gleich Masse mal Beschleunigung”. Was ist Kraft? Da hört unsere Vorstellung auf, aber es funktioniert ja alles gut.
![]()
Zu beachten ist das sowohl die Kraft als auch die Beschleunigung eine vektorielle Größe sind, also eine Richtung haben.
Beschleunigung ist nichts anderes als die Änderung der Geschwindigkeit, und Geschwindigkeit ist die Änderung der Position. Für die Position interessieren uns wir dann letztendlich auch, der Rest existiert ja nur “gedacht”.
![]()
Jetzt legen wir los mit dem Schiefen Wurf, die einzige Kraft die hier Wirkt ist die Gravitation, in der einfachsten Darstellung:
![]()
Das minus und das
in der y-Komponente wirkt ist hier erstmal willkürlich gewählt und hängt natürlich vom Koordinatensystem ab.
Eingesetzt bekommen wir die erste Differenzialgleichung, die jetzt noch recht simpel ist.
![]()
Diese Gleichung beschreibt die Bewegung von unseren Körper und wir können sie benutzen um
auszurechnen, also die Position des Körpers abhängig von der Zeit, denn die Position ist alles was uns letztendlich interessiert. Generell gibt es bei Differenzialgleichungen mehrere Lösungsstrategien, bei dieser einfachen können wir direkt zwei mal Integrieren und erhalten:
![]()
Unsere Differenzialgleichung hat nicht eine eindeutige Lösung, sondern unendlich viele. Jede Funktion die zweimal abgeleitet gleich
ergibt ist eine Lösung für unser Problem. Was übrig bleibt sind die Integrationskonstanten, bzw. die Anfangswerte.
beschreibt die Geschwindigkeit die der Körper am Anfang hatte und
den Anfangsort.
Die Gleichung kann man jetzt genauso in einer Physik-Engine verwenden, um die Position von Objekten zu berechnen.
Welche Annahmen wurden getroffen?
Damit die Berechnung und das Modell funktioniert, wurden einige vereinfachende, idealisierende Annahmen getroffen. So haben wir beispielsweise die Luftreibung ignoriert, die Gravitation vereinfacht und auch die geometrische Beschaffenheit unseres Wurfobjektes ignoriert. Wenn wir unsere Simulation des schiefen Wurfes jetzt realistischer Gestalten möchten, wird es um einiges komplizierter und wir benötigen mehr Informationen über die eigentliche Sache die wir berechnen möchten. Werfen wir unser Objekt in Luft? Oder in einem anderen Medium Wasser? Befinden wir uns auf der Erde? Oder auf einen anderem Planeten, mit anderer Gravitation, welche Planeten befinden sich um uns herum, in welcher Entfernung? Hier stellt sich natürlich auch die Frage welche Fragen für das was wir mit der Physik Engine eigentlich machen wollen relevant sind. Im folgenden möchte ich anschneiden wie eine realistischere Beschreibung des schiefen Wurfes aussehen könnte.
Schiefer Wurf mit Luftwiderstand
Die Gleichung für die Luftwiderstandskraft lautet:
![]()
interessant ist hierbei das die Gleichung proportional zum Quadrat der Geschwindigkeit ist, ein Umstand der z.b. beim Rennradfahren wichtig ist. Bei hohen Geschwindigkeiten in der Ebene spielt das Windschatten fahren eine große Rolle, bei Bergen hingegen ist es nicht wichtig. Die anderen Variablen beschreiben verschiedene Parameter die noch in die Gleichung mit einfließen,
ist die Dichte des Mediums,
die Fläche des Gegenstandes der auf die Luft trifft und
ein zusätzlicher Parameter für die Oberflächenbeschaffenheit und die Form. Woher diese Gleichung kommt und wieso genau diese Parameter eine Rolle spielen, ist eine gute Frage. Einige Parameter könnten auch zusätzlich von der Geschwindigkeit oder dem Ort abhängen, aber um zu überhaupt einen Ergebnis zu kommen müssen wir ständig Kompromisse eingehen und nicht zu viel Nachfragen.
Die Kraft für den Luftwiderstand können wir nun mit der Gravitationskraft zusammenführen, um eine neue etwas genauere Differenzialgleichung für den Schiefen Wurf zu erhalten:
.
Das Vorzeichen bei der Luftwiderstandskraft stimmt jetzt nicht ganz, da der Luftwiderstand immer entgegen der Bewegung ist, die Gravitationskraft aber immer nach unten zeigt. Deswegen müssen wir den Wurf in drei Phasen unterteilen und die jeweiligen DGL lösen. Das setzt natürlich voraus das die Abhängigkeit von der Geschwindigkeit Komponenten weise Unabhängig ist, was eine weitere Vereinfachung darstellt.
Horizontal:
![]()
Diese DGL ist jetzt schon etwas komplizierter, um sie zu lösen gibt es mehrere Möglichkeiten, wir benützen Trennung der Veränderlichen und kommen auf:
![]()
Siehe: https://matheplanet.com/default3.html?call=article.php?sid=735
Vertikal:
In vertikaler Richtung kann die Luftwiderstandskraft jetzt einmal entgegen der Gravitation wirken und in Richtung der Gravitation, also:
(I)![]()
(II)![]()
Hier wird es nun schon ziemlich kompliziert und unhandlich, da beide DGLs keine einfache Lösung besitzen. Für die erste Gleichung kann man wieder Trennung der Veränderlichen benützen und muss dann nicht ganz einfache Integrale lösen. Das Ergebnis ist dann:
(I)![]()
mit
und![]()
und
(II)![]()
Wenn wir jetzt etwas genauer werde wollen und nicht mehr annehmen das die Reibekraft unabhängig in x- und y-Richtung wirkt, sondern vom Betragsquadrat der Geschwindigkeit abhängt, dann haben wir ein Problem. Die dann erhaltene DGL ist nicht mehr analytisch lösbar.
Numerisches Lösen der Bewegungsgleichungen
Um die Newton Bewegungsleichungen numerisch zu lösen, formulieren wir die DGL zweiter Ordnung in zwei Gleichungen erster Ordnung um.
=> eine Gleichung zweiter Ordnung
![]()
=> zwei Gleichungen erster Ordnung
DGL erster Ordnung können jetzt einfach in äquivalente Integralgleichungen umgeformt werden, dabei darf natürlich nicht die Integrationskonstante bzw. der Anfangswert vergessen werden.
![]()
![]()
Diese beiden Integrale können jetzt numerisch gelöst werden, eine einfache Regel wäre dafür das explizite Euler-Verfahren, was ähnlich zur Riemann Summe ist. Wir zerlegen das Integral in viele kleine Teile die jeweils im Abstand
voneinander entfernt sind, um nähern das jedes Teilstück mit einem Rechteck an. Alles aufsummiert ergibt dann das Ergebnis. Je kleiner
ist, desto genauer ist natürlich das Ergebnis. In der Literatur wird das Verfahren immer rekursiv definiert, das mache ich hier genauso, ist auch praktisch für die Implementation.
![]()
![]()
=> monte carlo
Ziehe Zufallszahl zwischen Intervallgrenzen und nähere Integral an. Integralgrenzen sind die Startzeit (=0) und die aktuelle gewünschte Zeit. Das erste Integral verweist dann über
auf die zweite Gleichung. Wie aber
zu einem Zeitpunkt
auswerten, wenn
mit der Reibung wieder auf
verweist?
Schiefer Wurf als Zwei-Körperproblem
Eine weitere mögliche Erweiterung ist es den schiefen Wurf als Zwei-Körper Problem zu betrachten. Nach unseren Vorstellungen der Physik wirkt die Gravitation in beide Richtungen, d.h. unser Wurfgeschoss wird von der Erde (oder einen anderen Planeten) angezogen, aber genauso wird auch die Erde von unseren Wurfgeschoss angezogen. Natürlich unterscheiden sich die beiden Massen enorm, wodurch dieser Effekt kaum zum Tragen kommt. Wenn man diese beidseitige Anziehung als Differenzialgleichungen formuliert und auflöst, kommt man zu den Keplerbahnen, welche eine Ellipse darstellen. Kepler hatte dieses Problem bei der Gravitation von Planeten untereinander untersucht, hier sind die Massen natürlich wesentlich näher zusammen. Genau genommen ist ein Zwei-Körperproblem immer noch zu eng gefasst, unser Wurfgeschoss wird ja eigentlich nicht nur von der Erde angezogen, sondern auch von der Sonne (und allen anderen Objekten im Universum, die Gravitation hört laut Theorie nie auf). Doch beim Drei-Körper-Problem gibt es schon keine Lösung mehr der Differentialgleichungen, und das ganze verfällt schnell in ein chaotisches System.
Jetzt wird gependelt
Das Fadenpendel, zum Einstieg wieder mit einfacher Gewichtskraft und mit ohne Reibung. Auf die Masser wirkt wieder die Gewichtskraft, aber durch den Faden wird ein Teil der Gewichtskraft durch die Gegenkraft des Fadens kompensiert. Wenn wir den Kraftvektor der Gewichtskraft in einen Radial und einen Tangentialteil aufteilen, dann wird der Radialteil vollständig vom Faden kompensiert und nur die Tangentialekraft spielt für die Bewegung eine Rolle. Hier eignen sich nun Polarkoordinaten, da dann eine Koordinate eleminiert werden kann. (genau die Radiale eben)
$$ x = r \cos{\theta}$$ $$ y = r \ sin{\theta}$$
Mit der neuen Koordinate $\theta$ können wir jetzt die Bewegungsgleichung mit der Tangentialkraft formulieren.
$$ \ddot{\theta} = - \frac{g}{l} \sin{\theta} $$
Wobei $l$ die Länge des Fadens ist.
Für kleine Winkel kann der sinus als gute Annäherung weggelassen werden und die dann einfachere Gleichung kann mit einem Exponential Ansatz oder den sinus/cosinus Funktionen gelöst werden. So wie die Gleichung eigentlich lautet führt die Lösung auf elliptische Integrale, die dann keine explizite Lösung haben, sondern sich z.B. als unendlich Reihe annähern lassen.
$$ \theta = \theta_0 \cos{\frac{g}{l} t} $$
Diese Gleichung kann jetzt als Pendelsimulation verwendet werden, aber natürlich muss die Koordinate $\theta$ noch in die Koordinaten x und y zurücktransformiert werden, wie oben beschrieben, da ja unser Bildschirm rechteckig ist und somit letztlich nur kartesische Koordinaten versteht.
Lagrange-Mechanik (Pendel, beispiel für Schiefer Wurf?)
=> keine Reibung mit Lagrange (Was ist Reibung?)
Finde Bewegungsgleichungen mit Lagrange-Ansatz und füge dann Reibungskräfte hinzu.