www.codeworx.org/game-dev/Kollision von Kreisen

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