IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Physique Discussion :

Gérer le plus simplement possible les collisions


Sujet :

Physique

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut Gérer le plus simplement possible les collisions
    Bonjour, depuis hier je me creuse la tête pour savoir comment je vais gérer les collisions de mon application.

    C'est une application très simple, où j'ai uniquement besoin de gérer la collision sphère/sphère.

    J'ai lu plusieurs cours/tutos sur le sujet dont un qui a particulièrement retenu mon attention :

    http://fearyourself.developpez.com/t...ons-menu/#L2.2

    ( J'en profite pour remercier l'auteur. )

    Il explique comment gérer la collision entre deux cercles.

    Mais comme cela n'est pas tout à fait clair pour moi, je préfère m'assurer d'avoir bien saisi le principe avant de commencer à coder.

    Dites moi si je me trompe, pour mes sphères je vais procéder de la manière suivante.

    Je récupère le centre de ma sphère, ainsi que son rayon, puis je teste si le centre d'une autre sphère de ma scène est à une distance inférieur à deux fois mon rayon. Si oui alors on a une collision, sinon tout vas bien.

    Je pense que jusqu'ici je n'ai fait que répéter ce que j'ai lu sur le tutoriel en y ajoutant la 3D...

    Mais à cette solution j'y avais pensé avant de lire le tutoriel, mais je l'avais de suite oublié car si on est amené à gérer un nombre important d'objet, et surtout de mouvement, alors on aura énormément de tests à faire! Et ca va ramer!!

    Alors je voulais savoir si il existait des solutions plus rapides, ou moins gourmandes?

    Merci par avance pour votre aide.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    en fait la solution est bonne, et effectivement il risque d'y avoir énormément de collisions à tester, la solution, faire un découpage de l'espace :

    imagine tu as 100 sphères, cela donne donc 100² = 10000 collisions à tester.

    si tu es capable de dire "alors je peux couper mon espace en 2 tel que les sphères d'une partie ne seront jamais en contact avec celles de l'autre partie", cela donne en nombre de collisions : 2*50² = 2 * 2500 = 5000 collisions soit moitié moins!

    en étendant le concept de découpage, tu vas utiliser une structures de partitionnement de l'espace : arbre binaire, quadtree, octree, etc.

    à chaque étape, il te suffira de de partitionner les objets de ta scène avec ta structure de partitionnement et dans chaque "case" de ta structure tu testeras les collisions.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup pour ta réponse, cela m'aiguille vers de nouvelles solutions et recherches.

    Si ce que je trouve n'est pas concluant je reviendrais demander de l'aide.

  4. #4
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    http://www.videotutorialsrock.com/op...ction/text.php

    C'est un tutoriel sur comment créer un octree en C++ pour des collisions avec sphères. Très simple, et le code source est documenté, en plus d'une vidéo-tutoriel, si l'anglais ne t'effraie pas.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci, je vais lire.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    t'aurais pas une erreur dans ton nombre de tests 100² ? Si t'as n = 100 sphères c'est n - 1 + n - 2 + ... + n - (n - 1) tests ?
    Si tu pars sur une structure de partitionnement une bonne idée est de conserver une trace d'un état hasMoved de tes solides.
    Vive les roues en pierre

Discussions similaires

  1. Réponses: 15
    Dernier message: 19/03/2015, 15h52
  2. Broadcaster /dev/video le plus simplement possible
    Par prgasp77 dans le forum Administration système
    Réponses: 0
    Dernier message: 27/01/2011, 13h53
  3. Réponses: 5
    Dernier message: 05/04/2008, 17h19
  4. Gérer les collisions
    Par gazier20 dans le forum Physique
    Réponses: 5
    Dernier message: 13/05/2006, 09h34
  5. Méthode simple pour gérer les collisions
    Par Hyoga dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/02/2005, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo