====== Vektoren, Kinematik & Python ====== ===== - Uniforme Bewegung, Vektoren & Kollisionen ===== ==== - Uniforme Bewegung ==== **Uniforme Bewegung** bedeutet, dass man sich mit konstanter Geschwindigkeit fortbewegt. Bewegt man sich während der Zeit $t$ mit der konstanten Geschwindigkeit $v$, so legt man folgende Distanz zurück: $$s = v t$$ === Uniforme Bewegung in 2 Dimensionen === Betrachtet man die Bewegung in **2 Dimensionen**, so ist es am einfachsten, wenn man die Position und die Geschwindigkeiten als **Vektor** betrachtet: $$\vec{s} = \begin{pmatrix}s_x \\ s_y \end{pmatrix}$$ $$\vec{v} = \begin{pmatrix}v_x \\ v_y \end{pmatrix}$$ Dabei nennt man ...: * $v_x$ die **$x-$Komponente** des Geschwindigkeitsvektors $\vec{v}$. * $v_y$ die **$y-$Komponente** des Geschwindigkeitsvektors $\vec{v}$. Ein Vektor hat immer sowohl eine **Richtung** als auch eine **Länge**. Die Länge berechnet man mit dem Satz von Pythagoras: $$v = |\vec{v}| = \sqrt{v_x^2 + v_y^2}$$ Wie beschreibt man nun die Bewegung eines Objekts in 2 Dimensionen? Dieses Objekt befinde sich zum Zeitpunkt $t=0$ am Ort $\vec{s_0} = \begin{pmatrix}s_x^0 \\ s_y^0 \end{pmatrix}$ und es bewege sich mit der Geschwindigkeit $\vec{v_0} = \begin{pmatrix}v_x^0 \\ v_y^0 \end{pmatrix}$. Die Position des Objekts ist dann gegeben durch: $$\vec{s}(t) = \vec{s_0} + \vec{v_0}t$$ Beachte, dass die Position eine Funktion der Zeit ist: Je länger sich das bewegt, desto weiter ist es von seiner ursprünglichen Position $\vec{s}_0$ entfernt. === Beispiel === Machen wir ein Beispiel. * Ein Ball befinde sich anfangs (zum Zeitpunkt $t=0$) am Ort $\vec{s}_0 = \begin{pmatrix}5 \\ 2 \end{pmatrix}$. Dies bedeutet, dass sich der Ball an der Position $(5|2)$ im Koordinatensystem befindet. * Der Ball bewege er sich mit dem Geschwindigkeitsvektor $\vec{v} = \begin{pmatrix}-2 \\ 4 \end{pmatrix}$. Das bedeutet, dass sich der Ball um 2 Teile in die negative $x-$Richtung (nach links) und $4$ in die positive $y-$Richtung (nach oben in der Mathe, nach unten in Pygame) bewegt. Die Länge des Vektors ist $v = \sqrt{(-2)^2+4^2} = 5$, hat also die Geschwindigkeit $5$. An welcher Position befindet man sich nach der $1$ Zeiteinheit , $2$ Zeiteinheiten oder $60$ Zeiteinheiten? Die **Position** ist gegeben durch: $$\vec{s}(t) = \vec{s_0} + \vec{v_0}t = \begin{pmatrix}5 \\ 2 \end{pmatrix} + \begin{pmatrix}-2 \\ 4 \end{pmatrix}t = \begin{pmatrix}5 - 2 t \\2 - 4 t \end{pmatrix}$$ Nach der Zeiteinheit $1$ befindet man sich also an der Position $\vec{s}(1) = \begin{pmatrix}3 \\-2 \end{pmatrix}$ ==== - Vektoren mit Numpy ==== **Numpy** ist eine Python-Library, die dafür konzipiert wurde, Mathematik zu betreiben. Die darin vorhandenen **Numpy-Arrays** sind dafür geeignet, Vektoren in Python darzustellen. Das Erstellen eines solchen Numpy-Arrays geht ganz einfach: Nimm eine normale Liste `L` und wandle diese in ein solches Array um: `np.array(L)`. Wichtig: Importiere dazu zuerst numpy wie folgt: `import numpy as np`. Das oben aufgeführte Beispiel kann man in Numpy wie folgt aufsetzen: s0 = np.array([5,2]) v0 = np.array([-2,4]) t = 6 s = s0 + v0*t ==== - Kollisionen ==== Seien `v1` und `v2` die Geschwindigkeitsvektoren kollidierender Bälle bevor sie kollidieren. Welche Geschwindigkeitsvektoren haben sie nach der Kollision? Diese sind gegeben durch eine Formel, welche du im folgenden Dossier findest: {{ :talit:collisions.pdf | Dossier Kollision}}. Eine solche Kollision heisst **elastische Kollision** oder **elastischer Stoss**. //Tipp:// Am einfachsten arbeitet man mit Numpy-Arrays (z.B. `v1 = np.array([3,-7])`). Dies macht die Berechnung der neuen Geschwindigkeitsvektoren relativ einfach. Quelle: https://en.wikipedia.org/wiki/Elastic_collision#Two-dimensional (letzte beiden Formeln des Anschnitts) ===== - Uniforme Beschleunigung & Gravitation ===== ==== - Uniforme Beschleunigung ==== Eine **Beschleunigung** ist eine //Änderung der Geschwindigkeit pro Zeit// $$a = \frac{\Delta v}{t}$$ wobei: * $\Delta v:$ Änderung der Geschwindigkeit, SI-Einheit $\frac{\text{m}}{\text{s}}$ * $t:$ Zeit, in der Geschwindigkeit verändert wird, SI-Einheit $\text{t}$ * $a$: Beschleunigung (acceleration), SI-Einheit: $\frac{\text{m}}{\text{s}^2}$ Eine **Uniforme Beschleunigung** ist einfach eine konstante Beschleunigung. Die Beschleunigung ist also immer gleich stark und verändert sich nicht mit der Zeit. === Uniforme Beschleunigung in 1D === Bewegung entlang der $x-$Achse: * $s_0:$ Position bei Beginn der Beschleunigung (zum Zeitpunkt $t=0$) * $v_0:$ Geschwindigkeit bei Beginn der Beschleunigung (zum Zeitpunkt $t=0$) * $a:$ Beschleunigung, mit der beschleunigt wird * $t:$ Zeit, in der Beschleunigt wird Nachdem für die Zeit $t$ mit $a$ beschleunigt wurde, befindet man sich an der Position $s$ und hat Geschwindigkeit $v$, gegeben durch: $$v(t) = v_0 + a t$$ $$s(t) = s_0 + v_0 t + \frac12 a t^2$$ === Uniforme Beschleunigung in 2D === Ein Objekt befindet sich zum Zeitpunkt $t=0$ am Ort $\vec{s_0} = \begin{pmatrix}s_x^0 \\ s_y^0 \end{pmatrix}$ und bewegt sich mit der Geschwindigkeit $\vec{v_0} = \begin{pmatrix}v_x^0 \\ v_y^0 \end{pmatrix}$. Das Objekte werde jetzt durch den Beschleunigungsvektor $\vec{a} = \begin{pmatrix}a_x \\ a_y \end{pmatrix}$ beschleunigt. Dann verändern sich Geschwindigkeit und Position wie folgt mit der Zeit: $$\vec{v}(t) = \vec{v_0} + \vec{a}t$$ $$\vec{s}(t) = \vec{s_0} + \vec{v_0}t + \frac12 \vec{a} t^2$$ ==== - Gravitation ==== Lässt man etwas fallen, so wird es mit der Beschleunigung $g = 9.81\text{m}/\text{s}^2$ nach unten beschleunigt. Da diese Beschleunigung sehr wichtig ist, hat sie einen eigenen Namen erhalten und man schreibt typischerweise $g$ anstelle von $a$. Auf der Erdoberfläche ist die Gravitationsbeschleunigung in etwa konstant, weshalb man guten Gewissens bei der Gravitation von ein uniformen Beschleunigung sprechen kann. In 2 Dimensionen beschreibt man die Gravitation mit dem folgenden Vektor: $$\vec{g} = \begin{pmatrix}0 \\ - 9.81\text{m}/\text{s}^2 \end{pmatrix}$$ Beachte: Hier wird die übliche Konvention in Physik und Mathematik verwendet, dass //nach oben// durch die positive $y-$Richtung dargestellt wird. In Pygame ist dies anders. Dort sollte der Gravitationsvektor z.B. wie folgt aussehen: `g = np.array([0,1])`. Beachte, dass der genaue Zahlenwert nicht relevant ist und durch ausprobieren eingestellt werden sollte. Ganz wichtig: //Eine Änderung der Geschwindigkeit in eine Richtung tritt nur dann auf, wenn in diese Richtung eine Beschleunigung wirkt.// Beispiele: * Die Gravitation wirke in die y-Richtung: $\vec{g} = \begin{pmatrix}0 \\ - 9.81\text{m}/\text{s}^2 \end{pmatrix}$. Damit hat sie nur einen Einfluss auf die $y-$Komponente eines Geschwindigkeitsvektors. Ein Ball habe zum Zeitpunkt $t = 0$ den Geschwindigkeitsvektor $\vec{v} = \begin{pmatrix}2 \\ 3 \end{pmatrix}$. Der Ball bewegt sich also nach rechts oben, allerdings mehr nach oben als nach rechts. Die Gravitation beeinflusst also nur die $y-$Komponente: Zu Beginn ist sie $3$ und nimmt dann stetig ab bis sie Null ist (höchster Punkt der Flugbahn). Danach nimmt sie weiter ab und wird also negativ: Der Ball bewegt sich jetzt nach unten. Je länger man wartet, desto schneller bewegt es sich nach unten. Das Ganze hat aber //keinen Einfluss// auf die $x-$Komponente des Geschwindigkeitsvektors; diese ist und bleibt $2$.