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
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|