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 :

Moteur physique 2D : deux objets en collisions ne peuvent plus bouger


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 10
    Points
    10
    Par défaut Moteur physique 2D : deux objets en collisions ne peuvent plus bouger
    Bonjour,

    Je développe actuellement un (petit) moteur physique 2d (ou devrais-je dire un moteur de collision). J'emploi une méthode particulière pour détecter les collisions qui me permet d'utiliser tous types de polygones même non convexes mais qui présente dans sa forme actuelle un léger problème.
    La méthode en question ne détecte pas deux objets en collision mais intervient lors du déplacement de l'un d'entre eux pour préciser jusqu'où peut se déplacer l'objet en mouvement avant d'en rencontrer un autre.
    Le soucis est que l'objet en mouvement est alors placé en contact direct avec l'autre (et éventuellement déplacé tangentiellement à la surface de contact). Ce faisant lors du prochain mouvement il est déjà détecté comme touchant l'autre objet et ne peut alors bouger, même pour s'en écarter.

    J'ai trouvé une solution assez sale : décaler légèrement l'objet dès qu'il y a contact, ou ne l'avancer que de 99% de ce qu'il pourrait avancer par exemple. C'est sale tout d'abord car théoriquement il peut y avoir un autre objet juste derrière et ça devient interminable, et ensuite car la valeur est arbitraire.

    Une deuxième solution à laquelle j'ai pensé c'est décider que lorsqu'une extrémité d'un segment se situe sur un autre il n'y a pas contact (pour des raisons similaires j'ai quand même déjà considéré que deux segments parallèles n'étaient jamais en contact). Mais cette solution est parfaitement non accordable avec mon algorithme qui étudie le déplacement des sommets du polygone (et, dans le cas du cercle, celui des deux points issus des deux tangentes parallèles au segment à intersecter ... je peut préciser si ça intéresse) car dans ce cas une fois qu'un objet est collé à un autre, il peut s'en séparer mais aussi le traverser au moins momentanément.

    Troisième et dernière solution envisagée (j'ai envie de l'éviter et c'est pour ça que je post un message ici), je pourrais retenir après chaque contact la liste des tangentes en contact pour déduire du déplacement suivant les parties de mouvement dirigées dans les sens opposés aux normales sortantes. C'est fastidieux et ça me semble rajouter pas mal de calculs (du moins si je cherche un modèle théorique parfait) car ça m'oblige à reconsidérer deux segments parallèles comme possiblement en contact et car (j'abrège mais je peut spécifier) ça me fait calculer et retenir d'avantage d'informations sur les possibles contacts des arrêtes des objets.

    Voilà, donc si quelqu'un à une solution .. je l’accueillerai à bras ouverts !

    Petite précision : je peut préciser la méthode de calcul des collisions qui me semble assez originale et pourtant drôlement efficace (pour ce que je l'ai testé).

    voblivion

  2. #2
    Candidat au Club
    Homme Profil pro
    chauffagiste
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : chauffagiste
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    j'ai juste deux question.
    1. quand tu dis "l'objet en mouvement est alors placé en contact direct avec l'autre", tu veux dire que ton objet est téléporté dans la zone de collision ?
    --> si oui est ce que ton algorithme te renvoi la distance entre les deux objet (disons A&B)et que tu as réattribué cette distance à A au lieu de définir ça vitesse de déplacement ?
    ex :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void move(){
        if(DISTANCE_PAR_ALGO>0){
          DISTANCE_PAR_ALGO -=VITESSE;
          A += VITESSE;
       }
    }

    2. est ce que ton algorithme utilise la direction de l'objet pour définir la collision ?
    --> si oui as tu essayer d'utiliser la formule collision élastique pour redéfinir la direction de ton objet et ainsi stoper la collision en cours ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/11/2014, 17h06
  2. Fonction pour tester la collision entre deux objets
    Par izissie dans le forum Newton
    Réponses: 1
    Dernier message: 22/09/2010, 21h56
  3. Création de moteur physique, problème de collision
    Par Jackyzgood dans le forum Débuter
    Réponses: 2
    Dernier message: 09/11/2009, 12h35
  4. Moteur Physique open GL sous Delphi (collisions et saut)
    Par overlolo dans le forum Physique
    Réponses: 3
    Dernier message: 26/03/2008, 01h36
  5. [Javascript] Détecter collision de deux objets <img>
    Par Invité4 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/04/2006, 09h54

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