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
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Forum
TRADAIONTRADAION par shootangel
Cliquez pour lire la suite par shootangel
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|