THE MATHEMATICS OF PARTICLES & THE LAWS OF MOTION THE MATHEMATICS OF PARTICLES Vektoren & „Calculus“ - Definition - „The handedness of space“ - Mathematik und Vektoren ------------------------------------ „differential calculus“ - „integral calculus“ Vektoren ---------------------------------- - Verschiedene Ansichten auf Vektoren: als einfache Gleichungen (x=2y; y=2,3 => x=4,6), mal als Struktur mit Skalaren zur Multiplikation, Addition und Subtraktion der Werte. - Im 2D und 3D dienen Vektoren als Abbildung von Positionen in einem Raum. Und jede Position hat nur einen beschreibenden Vektor. - „handedness of space“ - 2 Wege zur Einrichtung eines Koordinaten-Systems: - „left-handed way“ & „right-handed way“ - Es gibt kein einheitliches System dafür – Jeder Entwickler nimmt eine andere Form – es spielt für den Code der Physik keine Rolle. - Vektoren können aber auch die Angaben einer Veränderung der Position beschreiben: class Vector3 { // ... Other Vector3 code as before ... /** Gets the magnitude of this vector. */ real magnitude() const { return real_sqrt(x*x+y*y+z*z); } /** Gets the squared magnitude of this vector. */ real squareMagnitude() const { return x*x+y*y+z*z; } /** Turns a non-zero vector into a vector of unit length. */ void normalize() { real l = magnitude(); if (l > 0) { (*this)*=((real)1)/l; } } }; Skalar- und Vektor-Multiplikation - Alle Komponente des Vektors werden mit dem Skalar multipliziert: class Vector3 { // ... Other Vector3 code as before ... /** Multiplies this vector by the given scalar. */ void operator*=(const real value) { x *= value; y *= value; z *= value; } /** Returns a copy of this vector scaled to the given value. */ Vector3 operator*(const real value) const { return Vector3(x*value, y*value, z*value); } }; Vektor Addition und Subtraktion class Vector3 { // ... Other Vector3 code as before ... /** Adds the given vector to this. */ void operator+=(const Vector3& v) { x += v.x; y += v.y; z += v.z; } /** * Returns the value of the given vector added to this. */ Vector3 operator+(const Vector3& v) const { return Vector3(x+v.x, y+v.y, z+v.z); } }; Komponenten-Produkt & Skalar-Produkt - „KP“ ist nichts anderes als eine einfache Multiplikation von zwei Vektoren, mit einem Vektor als Ergebnis: - Beim „SP“ werden die Vektoren ebenfalls multipliziert, allerdings wird das Ergebnis zu einem Skalar: Vektor-Produkt - auch genannt: Kreuz-Produkt, aufgrund der überkreuzenden Berechnung: - ist nicht kommutativ, d.h. a x b ungleich b x a. Bei den anderen Operatoren wäre das Ergebnis trotz Tausches korrekt. Für ein korrektes Ergebnis müsste man daraus folgendes machen: a x b = -b x a - geometrisch gesehen, ist das „VP“ sehr wichtig für die Richtungsangaben, da jede Richtung orthogonal angegeben wird. Orthogonale Ebene - für die Erstellung einer orthogonalen Ebene mit 3 gleichen Vektoren, wollen wir diese Normalisieren. „1. Find vector c by performing the cross product c = a × b. 2. If vector c has a zero magnitude, then give up: this means that a and b are parallel. 3. Now we need to make sure a and b are at right angles. We can do this by recalculating b based on a, and c using the cross product: b = c × a (note the order). 4. Normalize each of the vectors to give the output: a, b, and c.“ - Vektoren sind zu einander orthogonal, wenn ihr Skalar-Produkt 0 ergibt! Calculus ------------------------------ Definition - jede Form von mathematischen Systemen. - in unserem Fall, spricht man von der Analysis: => „the study of functions that operate on real numbers“ - Veränderung über Zeit: Position des Objekts oder seine Geschwindigkeit. - 2 Wege zum Verstehen: 1. Beschreibung der Veränderung an sich. 2. Beschreibung des Ergebnis der Veränderung. DIFFERENTIAL CALCULUS - Für die Rate der Veränderung einer Position wird in der Programmierung von dem Begriff „velocity“ gesprochen. - Berechnung der „velocity“: - Genauere Lösung indem die Lücke unendlich klein gemacht wird: - Zur Vereinfachung: Beschleunigung - Neben der Geschwindigkeit besitzt das Objekt eine Beschleunigung. - Wenn p (Position) und v( „velocity“) gegeben sind, können wir diese berechnen. - Die Beschleunigung ist die Rate der Veränderung der Geschwindigkeit eines Objekts. - Formel: „Vector Differential Calculus“ - bei Vektoren sieht die Bestimmung ähnlich aus. - die vorangegangenen Formeln zur Bestimmung von Geschwindigkeit und Beschleunigung, sind für 3D geeignet und lassen sich so, auf jede einzelne Variable eines Vektors anwenden: Integral Calculus - in physics engines wird die Integration dazu benutzt, Position und die Geschwindigkeit zu aktualisieren. - Formel: p° = Geschwindigkeit am Anfang des Zeitintervals p°° = Beschleunigung über die komplette Zeitspanne - In der Mathematik werden die Formeln immer so umgestellt, das man aus einer Formel für die Beschleunigung, eine Formel für Geschwindigkeit erhält usw. „Vector Integral Calculus“ - Berechnung auf Komponent-für-Komponent Basis: THE LAWS OF MOTION Partikel & Gesetze & Integrator - Partikel – Definition ------------------------------------ „The first two laws“ - „Momentum, Gravity and Velocity“ ------------------------------------ - Integration einzelner Werte - Vollständige Integration Ein Partikel - hat eine Position, aber keine Ausrichtung. Bsp.: Kugel = Uns ist egal in welcher Richtung sie zeigt, wichtig ist, in welche Richtung sie sich bewegt. - Für jedes Partikel wird eine ständige Aktualisierung von verschiedenen Eigenschaften benötigt: → aktuelle Position, die Geschwindigkeit und die Beschleunigung. - Diese Werte sind alles Vektoren. Physics engines basieren auf den Gesetzen der Bewegung von Newton. - Er entwickelte 3 Gesetze die sehr genau beschreiben, wie sich „Partikel“ verhalten. - Die ersten beiden lauten: „1. An object continues with a constant velocity unless a force acts upon it. 2. A force acting on an object produces acceleration that is proportional to the object’s mass.“ 1. Gesetz - erklärt uns, was geschieht, wenn keine Kräfte in der Umgebung vorhanden sind. - Ein Objekt, welches sich in einem Raum ohne Kräfte bewegt, wird sich immer weiter mit einer konstanten Geschwindigkeit bewegen, da keine Kräfte eine Verlangsamung oder einen Stop bewirken könnten. - in der realen Welt ginge dies nicht, in einer Engine allerdings schon. class Particle { // ... Other Particle code as before ... /** * Holds the amount of damping applied to linear * motion. Damping is required to remove energy added * through numerical instability in the integrator. */ real damping; }; 2. Gesetz - Ein Partikel Ein Partikel Ein Partikel