Accueil > > > COLLISION DE RECTANGLES 2D
COLLISION DE RECTANGLES 2D
Information sur la source
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
- // 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);
- };
// 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.
Historique
- 15 novembre 2006 19:02:53 :
- Changement du l'extension de l'image de .JPG à .jpg car elle n'apparaissait pas avec la source.
- 15 novembre 2006 21:05:29 :
- Ajout d'une interface graphique de base.
Soyez indulgent c'est ma première utilisation de GLUT.
- 15 novembre 2006 21:19:42 :
- Affichage de la normale au contact (+ au passage correction d'un bug sur le calcul de la normale)
- 15 novembre 2006 23:48:04 :
- Interface graphique améliorée.
Affichage de la sphère englobante et de la boite englobante parallèle aux axes.
Manipulation des rectangles intuitive avec la souris.
- 16 novembre 2006 19:08:37 :
- Création de la classe CRectangle.
- 17 novembre 2006 17:39:37 :
- Creation de la classe CPoint2D pour faciliter la lecture du code.
La détection de collision des rectangles quand aucun des points d'un rectangle ne soit dans l'autre rectangle est désormais valide.
La profondeur de pénétration du point est accessible (pratique pour les moteurs physiques orientés efforts).
Amélioration générale de la présentation et des commentaires.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Opengl : Collision Box [ par BARACOUDAS ]
Bonjour à tous,Bravo pour ce site, sa fait plaisir de savoir qu'il existe des personnes pretes à aider les débutants comme moi...Voila mon soucis,j'ai
Collision entre 2 rectangles [ par unrealgun ]
Hi,Je débute le C++ et je programme sous windows avec la library Opengl, sans Glut.Voila mon probleme :je souhaite detecter une collision entre deux r
Collision pixel perfect [ par UltimAKnighT ]
Bonjour, Savez-vous où je pourrais trouver de la documentation là-dessus(en français de préférence) car j'ai eu beau chercher, les tutos sur lesquels
Bibliothèque Collision [ par Ombitious_Developper ]
Salut:Je suis en train de chercher une bibliothèque pour gérer les collisions (en 2D) de préference qu'elle soit multi-plateforme.
Cherche ecole programmation (pur) [ par Booster ]
Bonjour à tous, Alors voila tout est dans le titre je cherche une école de programmation (Pas école d'ingénieur car je pense que je vais m'ennuyer, je
supprimer un rectangle déssiné [ par lafolle24320 ]
Bonjour à tous , voici mon pb : en fait je dessine un rectangle avecRectangle( hdc, rectMove.left, rectMove.top, rectMove.right, rectMove.bottom );si
algorithme génitique [ par rahma_bou22 ]
je veut avoir si c'est possible l'algorithme de probléme de sac à dos
probleme de collision casse brique en c [ par loizokitue ]
bonjour a tous je fais un casse brique en C pour un projet que je dois rendre ... le probleme est que l'on a pas le droit aux librairy graphiques... j
Formatage fscanf [ par xsybus ]
bonjour, j'ai un probleme avec fscanf, il en prend pas en compte le formatage que je lui impose.j'ai un fichier repertoire.txt dans lequel j'ai:
Moteur physique : détecter les collisions [ par noncommunique ]
Bonjour !!Je suis en train de tenter de réaliser un moteur physique et j'ai le problème suivant : je ne sais pas comment faire pour détecter une évent
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|