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

Mathématiques Discussion :

Gestion de collision entre BOX


Sujet :

Mathématiques

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut Gestion de collision entre BOX
    Bonjour à tous,

    je viens ici avec une question évoqué de nombreuses fois mais malgré mes recherches sur le net je n'arrive pas à trouver mon bonheur parfait.

    Je cherche donc à gérer la collision entre 2 box dans un espace 3D. Les détails sont:
    - les box sont de type OOB
    - la gestion ira de la détection ET de la réaction.
    - j'aimerais gérer ca sans avoir à calculer d'impulsion, simplement un replacement des points entrainant la collision.
    - Dans un 1er temps, je ne me soucierais pas de faire tourner correctement les box en collision.
    - Les 2 box sont déplaçable, la réaction s'effectuera donc sur les 2.
    - temps de calcul le plus petit possible.

    Mon dernier essai a était d'utiliser le théorème de l'axe séparateur (trouver sur ce forum) mais je n'arrive pas à m'en servir pour la correction des positions (la détection marche très bien cela dit). A la fin de cette algorithme je dispose normalement de la profondeur et de la normal à la collision pourtant impossible d'obtenir une correction "stable". Dans certains cas par exemple, les box sont éjecté au loin.

    Si quelqu'un a des idées pouvant me guider du début à la fin je suis tout ouïe.

    Merci d'avance

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Selon Wikipedia, un "box" peut être, entre autres:
    • un emplacement de stationnement automobile entièrement fermé,
    • un lieu où vit un cheval dans une écurie,
    • un terme utilisé pour désigner la pièce (généralement insonorisée) équipée de matériel audiovisuel dans laquelle le monteur effectue le montage vidéo ou le montage cinématographique des images et autres sources dont il dispose,
    • un terme utilisé pour désigner soit un championnat, soit le terrain sur lequel évoluent les joueurs en squash.
    • un boîtier permettant de se connecter à l'Internet,
    • etc.


    OOB est un personnage de fiction créé par Akira Toriyama dans le manga Dragon Ball en 1984.

    Alors, précise ta question.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Pardon, alors quand je parle de box (ou boite), je parle de parallélépipède. Dans mon cas ils n'auront que des angle droit (parallélépipède rectangle ou des cube).

    OOB = Oriented Object Boxes ce qui veut dire que mes parallélépipèdes ne seront pas forcément alignés avec les axes du repère 3D.

    Donc ma question précisée est:

    Comment puis-je gérer (détection + correction) le plus facilement possible, la collision entre 2 parallélépipèdes?

    Si je ne suis toujours pas assez clair dites le moi.

    MErci

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Pardon, alors quand je parle de box (ou boite), je parle de parallélépipède.
    Pour rappel, ceci est un club francophone.

    Pour revenir à notre sujet, je ne vois pas d'autre solution que d'écrire les équations des faces, puis des arêtes des parallélépipèdes, puis de localiser leurs intersections.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Darkantho Voir le message
    Comment puis-je gérer (détection + correction) le plus facilement possible, la collision entre 2 parallélépipèdes?
    i
    il faut déjà éliminer les cas faciles :

    les 2 boites ne s'intersectent pas.

    Facile en testant sur les coordonnées


    Après, ça devient plus compliqué, mais on peut encore éliminer (assez) facilement le cas où l'une est complètement dans l'autre (si tout point de la boite 2 est à l'intérieur de la boite 1).

    Et, pour les cas qui restent , il faut calculer les intersections...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Darkantho Voir le message
    A la fin de cette algorithme je dispose normalement de la profondeur et de la normal à la collision pourtant impossible d'obtenir une correction "stable". Dans certains cas par exemple, les box sont éjecté au loin.
    L'utilisation de théorème de l'axe séparateur permet seulement de savoir s'il y a une intersection ou pas.

    Comment fais-tu pour identifier les points/cotés/faces des deux box qui sont la cause de l'intersection ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 45
    Points : 26
    Points
    26
    Par défaut
    Pour chaque face, je trouve 1 min et 1 max pour chacune des 2 boites.
    J'obtiens un intervalle de distance avec la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(min1 < min2)
    {
    	return min2 - max1;
    }
     
    	return min1 - max2;
    la face qui me donne la plus petite distance (en valeur absolue) est considérée comme la face qui subit la collision et sa normal est la normal à la collision (l'axe qui devrait me permettre de corriger les points).

    De la, je connais les point à corriger sur une boite (les points de la face). Pour l'autre boite, je corrige tous les points qui sont du mauvais coté du plan formé par la face (la normale des faces est orienté vers l'extérieur des boites).

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Darkantho Voir le message
    Pour chaque face, je trouve 1 min et 1 max pour chacune des 2 boites.

    la face qui me donne la plus petite distance (en valeur absolue) est considérée comme la face qui subit la collision et sa normal est la normal à la collision (l'axe qui devrait me permettre de corriger les points).

    De la, je connais les point à corriger sur une boite (les points de la face). Pour l'autre boite, je corrige tous les points qui sont du mauvais coté du plan formé par la face (la normale des faces est orienté vers l'extérieur des boites).
    Ca ressemble a ce qui est décrit dans l'article "Physics simulation overview (an F# tutorial)".

    La méthode me parait bonne en théorie. Je pense donc qu'il s'agit d'un problème d'implémentation, ou alors d'un problème dans le calcul de la force d'impulsion.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Les Sweep and prune algorithm

    Tu mémorise les minx max sur chacun des axes
    Comme un objet se déplace, on recalcule les minima et
    maxima à chaque pas de temps comme suit:

    1. Vérifiez si le minima (maximum) courant pour les axes x, y ou z- est encore plus petite(grand) par rapport à ses voisins
    . Si c'est le cas c bon.
    2.sinon Mise à jour du sommet pour cet extremum en remplaçant
    il avec le sommet voisin avec la plus petite(grand) valeur . Répétez le
    processus si nécessaire.

    Avec ca tu maintient des listes de minima maxima triés sur chaque axe et les objets sont donc organisés sur ces derniers.. Les test de collisions se limite alors des comparaison d'extremum des objets voisins dans ces listes....
    http://docs.google.com/viewer?url=ht...2Ficollide.pdf
    page 4

Discussions similaires

  1. Gestion de collisions entre objets mobiles?
    Par Benjilabu dans le forum Caml
    Réponses: 3
    Dernier message: 10/01/2011, 21h32
  2. Réponses: 4
    Dernier message: 25/09/2004, 09h58
  3. [Forms] : Gestion de Navigation entre module
    Par patmaba dans le forum Forms
    Réponses: 12
    Dernier message: 09/04/2004, 14h09
  4. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50
  5. Réponses: 4
    Dernier message: 04/07/2002, 12h31

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