Traitement des collisions, première partie

Ce sujet traite du calcul des collisions entre objets dans notre casse briques, plus précisément du calcul d'un vecteur de réaction lors d'une collision et de sa prise en compte pour effectuer un rebond. L'intégration de ce calcul au reste du casse brique sera vu dans un second temps. Dans tout ce sujet les termes utilisés et les concepts mentionnés se réfèrent au cours précédent. N'hésitez pas à relire ce cours si vous hésitez sur une notion qui n'est pas détaillée ici.

1 - Boites de collision simple

Commencez par créer une classe abstraite BoiteDeCollision qui servira de partie commune à toutes nos boites de collision concrètes. Cette classe abstraite doit être associée à un composant et remplira principalement deux rôles :

Créez maintenant les classes Cercle et Rectangle en définissant les différentes variantes des méthodes collision de manière à toujours vous ramener à un cas connu. Par exemple la collision avec une BoiteDeCollision b se fera toujours depuis un objet de type Cercle c ou Rectangle r, dans lequel la méthode collision est redéfinie. Pour compléter la détermination du couple de formes impliqué, il suffit alors d'appeler la méthode collision de b avec c ou r en paramètre et d'inverser le résultat : la méthode étant rédéfinie dans Cercle et Rectangle, on se retrouve avec un couple de formes complètement connu. Le petit programme ExempleResolution illustre cette manière de résoudre le type des deux formes.

Dans les méthodes collision des classes Cercle et Rectangle, procédez comme vu en cours pour calculer le vecteur de réaction. Nous cherchons ici un calcul efficace de la détection et du traitement des collisions au prix de petites approximations. Le but n'est pas d'atteindre un réalisme maximal mais plutôt un rendu visuellement convaincant et le plus léger à calculer possible. Vous pouvez tester votre implémentation avec le programme ExempleBoitesDeCollision.

2 - Boites composites

Dans notre casse brique, nous souhaitons nous limiter à des boites de collision simples, mais un cercle ou un rectangle est un peu trop simple pour la raquette. Nous allons résoudre ce problème en définissant la boite de collision de la raquette comme une boite composite : un rectangle possédant un cercle à chacune de ses extrémités. Ainsi, le calcul du vecteur de réaction lors d'une collision avec la raquette se ramène à l'un des cas précédents.

Ecrivez la classe BoiteComposite permettant de représenter des boites assemblées à partir d'autre boites. Cette classe devra définir les méthodes :

Vous pouvez tester votre solution avec le même programme que précédemment en fixant la valeur de nbTypes à 3.