Tester la collision entre deux cercles (shape)

cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 31 mai 2004 à 16:20
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 2 juin 2004 à 11:18
Bonjour,

J'aimerais tester la collision entre deux shape (2 cercles).

Merci
Orélien.

2 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
1 juin 2004 à 13:31
Salut,

Il y a collision si la distance entre les centres est inférieure à la somme des rayons. Pareil avec les carrés des distances

procedure TForm1.Initialisation;
begin
  Rayon1 := Shape1.Height / 2;
  Rayon2 := Shape2.Height / 2;
  DeltaRayon := Rayon2-Rayon1;
  Limite := Sqr(Rayon1 + Rayon2); //carré de la somme des rayons
end;

Function TForm1.Contact : boolean;
var
  x : real;
begin
  DeltaLeft := Shape2.Left - Shape1.Left;
  DeltaTop  := Shape2.Top  - Shape1.Top;
  DeltaX := DeltaLeft+DeltaRayon; // Ecart horizontal
  DeltaY := DeltaTop+DeltaRayon; // Ecart vertical
  x := Sqr(DeltaX) + Sqr(DeltaY);   // Carré de la distance
  Result := x < Limite;
end;


Il faut bien sûr que les propriétés Height et Width de chaque TShape soit égales.

Kénavo

Code, Code, Codec !
0
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009
2 juin 2004 à 11:18
Salut,

Merci beaucoup, c'est ce que je voulais !

Merci !
Orélien.
0
Rejoignez-nous