Collision de rectangles 2d

Description

Algorithmes de calcul d'intersection de rectangles.
Les rectangles sont définis par leur centre, leur hauteur, leur largeur et leur angle de rotation dans le sens trigonométrique.

Permet de déterminer si deux rectangles sont en contact et de récupérer suffisamment d'informations sur la collision (point de contact + profondeur de pénétration du point + normale au contact) pour faire un moteur physique.

L'interface graphique GLUT n'est pas beaucoup commentée (bien que bien présentée :D) car n'est pas le sujet de cette source (inclut dans le zip).
Elle permet de manipuler les rectangles intuitivement avec la souris.

Les algorithmes de calcul de collision sont dans la classe Rectangle.
Le fichier main.cpp contient exclusivement l'interface graphique.

Aller amusez-vous !

Source / Exemple :


// Un simple rectangle
class CRectangle  
{

public:

	CPoint2D Centre;
	float Hauteur;	// Hauteur
	float Largeur;	// Largeur
	float Angle;		// Angle en radian sens trigonométrique

	CPoint2D A,B,C,D;	// Les points (à jour moyennant un appel à UpdatePointPositions)

	// 2 FONCTIONS IMPORTANTES
	// Dit si le point P est dans le rectangle. Si oui et nX et nY != NULL, écrit dans nX,nY les composantes de la normale à la face la plus proche du point.
	BOOL IsPointIn(CPoint2D *P, float *nX, float *nY, float *depht);

	// Dit si le rectangle est en contact avec un autre. Si oui, écrit dans les paramètres le point de contact I et la normal au contact (nX,nY)
	BOOL GetCollision(CRectangle *rect, CPoint2D *I, float *nX, float *nY, float *depht);
	
	// 2 FONCTIONS MINEURES
	// Ecrit dans les paramètres les points extrêmes P1=(bas gauche) P2=(haut droite) de la boite englobante dont les cotés sont alignés aux axes du repère
	void GetAABB(CPoint2D *P1, CPoint2D *P2);

	// Met à jour les points A B C et D du rectangle en fonctions de ses paramètres
	void UpdatePointPositions(void);	
};

Conclusion :


Commandes:
Tout se fait avec la souris.
Cliquez gauche sur un rectangle et faites glisser pour le déplacer.
Cliquez droit sur un rectangle et faites glisser pour le faire tourner.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.