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

Algorithmes et structures de données Discussion :

Les SphereTrees


Sujet :

Algorithmes et structures de données

  1. #1
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut Les SphereTrees
    Bonjour à tous,

    Je suis entrain de programmer un moteur physique et j'utilise pour les collisions des SphereTrees.
    Je procède de la manière suivante :
    j'ai une liste L des entités du moteur.
    Je fais varier E1 (une entité) dans la liste L.
    Puis pour chaque E1 je parcours L à partir de ++E1, et vérifie les collisions avec E1. (j'évite une double détection des collisions), enfin la question n'est pas la.
    La vérification des Collisions se fait grace à une fonction récurssive.
    Et je génère au fur et à mesure de ma progression dans la liste d'entités, une liste d'objet PECollide.
    les PECollide possèdent deux pointeurs sur les Spheres en collisions (un pointeur sur chaque), un vecteur position de la collision, un vecteur normale à la collision, la distance de l'intersection des spheres.
    Quand j'ai généré cette liste je commence le repositionnement des entités, et la modification des vitesses des entités....
    Quelqu'un pourrait-il me dire si je prossède de la manière adequate, pour la détection des collisions, ou non... :

    Je trouve pas mal de chose sur le net, mais elles restent vague sur les methodes de détection, et de traitement des collisions...
    Merci d'avance à tous.

    Si vous n'avez pas tout compris à ce que je viens de raconter dit le moi, j'expliquerai plus en détail.
    R@fy

  2. #2
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    j'ai pas compris...

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par Nemerle
    j'ai pas compris...
    Faudrait pas que cela devienne une habitude

  4. #4
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    ok alors encore plus clair....

    Un SphereTree, c'est un arbre de sphere (ça ne fait pas avancer je sais ). Ou chaque sphere contient une liste de sphere. Pour détecter des collisions entre deux objets. on regarde déjà s'il y a collisions entre les deux spheres englobant les deux objets. Si c'est le cas, alors onregarde pour chaque enfant d'une sphere englobante on regarde si elles entre en collisions avec les enfant de l'autre sphere englobante.... Et ainsi de suite j'usqu'à être arrivé au bout de l'arbre. concètement pour un bonhomme. On a au début une sphere qui englobe le bonhomme, puis une sphere qui englobe la tête, une sphere qui englobe la bras gauche.. etc.

    (on voit d'ailleurs l'utilisation de la fonction récurssive)

    Ce que je cherche à savoir c'est si il est préfèrable de détecter les collisions et de les traiter en allant (dès qu'on a détecté une collison alors on repositionne les objets, etc... avant de continuer à détecter d'autre collissons)ou bien de toutes les détecter, stocker dans une liste les collisions puis de les traiter toutes après... Ou même encore autre chose....

    Voila je pense que c'est surtout sur les spheretrees qu'il y avait un problème de compréhension je n'avais pas été très clair la dessus
    Bon je vous laisse A++

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est intéressant comme principe
    donc s'il y a vraie collision - au moins une feuille de l'arbre l'indique -, on doit choisir si on commence par déplacer l'objet puis recalculer une nouvelle collision ou calculer les autres collisions de la scène avant de déplacer, c'est ça ?
    Si tu déplaces tout à la fin, tu as l'avantage de savoir ce qu'il se passe mieux que si tu déplaces à chaque coup, d'autant que si tu déplaces, tu dois retester s'il n'y a pas collision.

  6. #6
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Le principe c'est ça. Avec un placement intelligent des spheres on arrive à faire une détection sans trop d'erreur.

    Ouais, soit détecter les collisions et les triater au fur et a mesure, donc c'est vrai si un repositionnement induit une nouvelle collision, c'est pas cool.
    Soit on les trouve toutes et après on les traites.

    Je suis entrain de coder la deuxième solution après avoir abandonné la première mais je voulais savoir s'il ne fallait pas faire autrement encore

  7. #7
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Ce qui est assez compliqué c'est pour déterminer la nouvelle position et la vitesse (rotation et translation) après collision...

    Imaginez un crayon, au dessus d'une table. quand le crayon tombe, s'il est à cheval entre la table et le vide, il va se mettre à tourner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Avant :
              ---------
    -----------+
                  |
                  |
     
    Après :
             \
              \
    -------+ \
             |   \
             |     \
    (En gros)

    Et ben ça c'est pas très facile.
    Et en plus c'est dans un cas "facile" car la table est un élément fixe.
    mais si le stylo tombait sur un truc mobile il faut déterminer la trajectoire du crayon mais aussi de l'objet touché.... Carnage assuré pour les neuronnes

  8. #8
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    ah non il n'a pas marché mon super schemas

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Utilise les balises code

  10. #10
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    ah ouais.. JE suis un peu nouveau sur le forum.. C'est pour ca merci Miles

Discussions similaires

  1. Les meilleurs cours et tutoriels C++
    Par Community Management dans le forum C++
    Réponses: 1
    Dernier message: 13/05/2015, 13h50
  2. Obligatoire : lisez les règles du forum : MAJ 06/08/2010
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 03/07/2008, 13h46
  3. Réponses: 5
    Dernier message: 20/08/2002, 18h01
  4. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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