Die Kollison von Kreisen
Oft kommt es vor das zwei kreisähnliche Objekte kollidieren sollen. Diese
Art von Kollision ist ähnlich komplex wie die Kollision von Rechtecken.
Solch ein Kreis läßt sich mathematisch am einfachsten durch Position
und seinen radius beschreiben:
struct objekt
{
float x;
float y;
float radius;
};
Ein Kollision zwischen zwei Kreisen kommt dann zustande, wenn ihr Abstand kleiner
ist als der Summe ihrer Radien. Der Abstand von zwei Punkten läßt
sich am besten mit dem Satz des Pythagoras (a²+b² = c²) berechnen.
Die Seite a ist der Abstand der beiden X-Koordinaten, b ist der Astand der beiden
Y-Koordinaten. c ist demzufolge der Abstand der beiden Mittelpunkte voneinander.
In Code umgesetzt sähe das dann so aus: (sqrt zieht die Wurzel eines Wertes.
Es muss also <math.h> inkludiert werden.)
bool kollision(objekt objekt1,objekt objekt2)
{
float abstand = sqrt(((objekt1.x - objekt2.x)*
(objekt1.x - objekt2.x)+
(objekt1.y - objekt2.y)*
(objekt1.y - objekt2.y)));
// a²+b² = c²
// Etwas umständlich, aber funzt recht gut ;)
if (abstand < objekt1.radius + objekt2.radius)
{
return(true); // Die Objekte sind kollidiert!
}
return(false); // keine Kollision
}
Wenn true zurückgeliefert wird, gabs ne Kollision, ansonsten offenbar
nicht.
Ich hoffe es war halbwegs verständlich, bei aufkommenden Fragen, Kommentaren
und entdeckten Fehlern, bitte an webmaster@codeworx.org
mailen. Der Code darf völlig frei verwendet werden, wenn ihr dieses Tutorial
irgendwo anders veröffentlichen wollt, fragt bitte vorher ;)
Hans-Jakob Schwer, 25.12.2001, codeworx.org