Kollisionen an achsenparallelen Flächen

Der heutige Artikel widmet sich der Beschreibung von Kollisionen an achsenparallelen Flächen – also Flächen in der xy-, in der xz- oder in der yz-Ebene. Diese sind am einfachsten zu beschreiben und daher ein guter Einstieg in die Materie.
Ausgangspunkt für unsere Überlegungen ist das Reflektionsgesetz, welches Ihnen vielleicht noch aus der Schulzeit vertraut ist:

Einfallswinkel = Ausfallswinkel

Dieses Gesetz ist alles, was wir im Augenblick für die Kollisionsbeschreibung benötigen. Die nachfolgende Abbildung dient uns zur Veranschaulichung der Vorgänge bei einer achsenparallelen Kollision:














Zentrales Element für die Beschreibung einer Fläche bzw. einer Ebene (Fläche mit unendlicher Ausdehnung) ist der sogenannte Normalenvektor. Ein Normalenvektor steht immer senkrecht auf einer Fläche (Ebene) oder Linie und hat immer eine Länge von 1. Den Normalenvektor einer Fläche bezeichnet man im Allgemeinen als Flächennormale. Auf die Berechnung von Flächennormalen werden wir später noch ausführlich eingehen. Bei einer achsenparallelen Kollision ist die Flächennormale immer parallel oder antiparallel zur x-, y- oder z-Achse orientiert. Entsprechend liegt die Kollisionsfläche in der yz-, xz- oder xy-Ebene. Die Flug- bzw. Bewegungsrichtung nach einer Kollision berechnet sich für diese drei Fälle besonders einfach, denn es ändert sich lediglich das Vorzeichen derjenigen Komponente, die in Richtung oder Gegenrichtung des Normalenvektors liegt:

// Kollision in xz-Ebene; n=(0, 1, 0) oder n=(0, -1, 0)
// Ebene hat 2 Seiten!
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = -Bewegungsrichtung.y;
Bewegungsrichtung.z = Bewegungsrichtung.z;

// Kollision in xy-Ebene; n=(0, 0, 1) oder n=(0, 0, -1)
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = Bewegungsrichtung.y;
Bewegungsrichtung.z = -Bewegungsrichtung.z;

// Kollision in yz-Ebene; n=(1, 0, 0) oder n=(-1, 0, 0)
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = -Bewegungsrichtung.x;
Bewegungsrichtung.y = Bewegungsrichtung.y;
Bewegungsrichtung.z = Bewegungsrichtung.z;

Das Anwendungsgebiet für diese einfachste Art der Kollisionsantwort ist sehr begrenzt. Sie kann aber in Verbindung mit achsenausgerichteten Bounding-Boxen (AABB) eingesetzt werden. Achsenausgerichtet bedeutet, dass die x-, y- und z-Achsen der AABB mit den x-, y- und z-Achsen des Weltkoordinatensystems übereinstimmen. Man definiert für jedes Objekt eine AABB und kann für den Fall einer Kollision die neuen Bewegungsrichtungen anhand der Kollisionsflächen der beiden Boxen bestimmen. Vereinfacht wird die Angelegenheit dadurch, dass beide Kollisionsflächen immer in derselben Ebene liegen.