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 :

Algorithme de collisions


Sujet :

Physique

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut Algorithme de collisions
    Bonjour,
    Je ne connais absolument rien sur ce type d'algo et pourtant il faudrait que j'en utilise un mais le problème avec les liens de la FAQ c'est que j'ai l'impression que cela sort plus vite de mon cerveau que ça ne rentre... ( Et pourtant j'ai forcé... )
    Je recherche un algo plutot simplifié puisqu'il ne doit gerer que l'intersection de cercles, est ce que quelqu'un connaitrait de bonnes ressources à ce sujet?
    D'avance merci

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut

    L'intersection de cercles est plutot simple : pour chacun de tes cercles, tu calcules le rayon ( r1 et r2 ) puis, tu calcules la distance entre les centres de tes cercles ( d ) et tu la compares à r1 + r2.

    si d <= r1 + r2 = collision.

    Plus simplement, tu peux aussi mettre tes objets dans des rectangles, et calculer les collisions de rectangle.

    Tu peux aussi extrapoler pour un objet 3d, avec des sphères ! Et aussi plus simplement avec des parallélépipèdes rectangles ( le calcul est alors plus simple dans ce dernier cas )
    K

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    En effet, l'intersection de deux de mes cercles est en fait assez simple a réaliser, il faut juste tester que la distance entre les centres des deux cercles considérés ne soit pas inferieur à la somme des deux rayons.

    En fait ce que je voudrais c'est éviter de devoir faire le test pour chaque cercle avec tous les autres cercles mais peut il se peut que je n'ai je pas le choix....

    Mon problème n'est pas trop comment calculer si il y a intersection mais plutot comment cela rentre dans un algorithme de mouvement.

    Je possede des cercles Ci caracterisés par leur deplacement tour-à-tour di, je calcule les di en fonction des contraintes que je souhaite mais après cela bloque... Le methode la plus simple serait de déplacerles cercles "un par un", en considerant que un seul bouge alors que les autres sont fixes... Cela est en effet plus simple à coder et ne doit pas etre visible si on prends des di suffisement petits mais c'est moins proches de la réalité. Ainsi j'aimerais deplacer chaque cercle en considerant que tous les autres bouges mais la je n'arrive pas à concevoir comment il faut faire..., il faudrait decomposer mes di en "ddi", puis avancer ddi par ddi en utilisant la première methode.

    Mon problème est du au fait des collisions mais di risquent de changer... Comment cela est programmé généralement?
    On pourrait aussi ne pas modifier les di mais en gros tester a chaque tour :
    si collisions ->di du au rebond
    sinon di normal sans post-test de collisions...

    Edit : En fait, plus j'y réfléchi, le pas a pas avec di tres petit me semble la meilleure solution mais le fait qu'àun moment les objets sont potentielement emboités me gene...
    Re-edit : Et si je veux etre rigoureux, je ne vois pas comment je peux eviter de faire n² tests, n étant le nombre de mes cercles..

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Pour bien faire, je pense ( sans être sûr.. Je ne suis pas un expert des algos de ce type ) qu'il faut se pencher sur les algorithmes de graphes : si tu représente ton "tableau" ( s'agit-il de 2D ou de 3D au fait ? Je fais l'hypothèse que c'est de la 2D.. ) de cercles comme un graphe, tu peux alors peut-être déterminer plus rapidement quelles sont les collisions probables ( il est inutile de calculer la collision de deux cercles se trouvant très loin l'un de l'autre ) mais là je m'avance sur un terrain inconnu, ou plutot inexploré par moi

    Peut-être devrais-tu aller dans le forum algorithme, et poser ta question synthétisée par rapport aux mouvements de cercle, peut-être y trouveras-tu une piste plus intéressante? Bonne chance et A+
    K

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut

    Entendu, j'avais hésité entre utiliser ce forum ou celui d'algo, finalement cela va etre les deux...
    Merci..

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    juset pour te dire que sur le site de prografix il y a un super cour sur la methode PixelDectection, soit la colision par pixels.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Le site semble en effet interessant meme si le nom meme de l'algorithme me dit rien.
    Merci.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    la theorie est simple.

    tu prend un sprite (style zelda) et tu detectes la colision avec l'epee sur monstre et non la boite contenant le sprite de l'epee.

    :-) ca parait etrange expliqué comme ca mais le tutorial est clair.

    j'avais utilisé un tut similaire en US mais je ne me souvient pas du lien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. algorithme de collision 3D
    Par chetropinchuste dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/02/2010, 13h16
  2. Algorithme de gestion des collisions
    Par Christuff dans le forum Physique
    Réponses: 4
    Dernier message: 11/07/2009, 10h50
  3. L'algorithme AABB (pour les détecteurs de collision)
    Par Fandekasp dans le forum Mathématiques
    Réponses: 2
    Dernier message: 20/08/2007, 09h51
  4. Réponses: 1
    Dernier message: 07/03/2007, 09h28
  5. [2D] Algorithme de collision
    Par elekis dans le forum Physique
    Réponses: 7
    Dernier message: 25/12/2006, 21h09

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