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 Réaliste !


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut Moteur Physique Réaliste !
    Bonjour à tous,
    je cherche à faire une partie d'un moteur physique (ce n'est pas le premier) mais j'ai un problème !
    Je vais prendre un exemple tout simple en 2D, une balle est lachée sans vitesse initial sur un plan non incliné horizontal, les 2 objets possede un coefficient de rebond qui leur permet de ne perdre aucune énergie, c'est à dire que quand la balle touche le plan elle doit rebondir avec l'opposé de sa vitesse V2=-V1 et donc mont but est qu'apres le rebond la balle remonte jusqu'à sa position initial EXACTEMENT !
    Dis comme sa on ne voit pas la difficulté il suffit d'inverser la vitesse. Mais la ou sa se corse c'est bien sur que quand la balle touche le plan elle ne le touche pas en 1 point mais est un peu imbriqué dedans à cause d'un framerate faible par exemple, pour l'instant ce que je fais c'est de calculer la distance qu'elle parcourut DANS le plan est de recalculer sa position après rebond en additionnant cette distance pour que la frame ou la balle est en collision affiche que la balle a rebondi. Et mon problème principal est : que c'est-il passé ? Je ne peux pas me contenter d'inverser le vecteur vitesse physiquement ce n'est pas se qu'il c'est passé car la balle a donné son énergie au plan et le plan son énèrgie à la balle se qui induit une nouvelle force au moment du contact des 2 objets. L'accélération de la balle se presente donc sous la forme a=-g+K où K est une force délivré par le plan sur la balle et est assez forte pour inverser son vecteur vitesse mais vu que la balle n'a pas touché le plan en un point (à cause du système de frame) alors comme expliquer précedement j'ai calculé sa position logique après le rebond le malheur c'est que sa fausse le calcul de la force K que l'on doit ajouter à l'accélération de la balle.
    En premier lieu dois-je repositionner la balle par rapport à la distance qu'elle à parcourut dans le plan (sachant que les coefficients de rebond des 2 objets pourront changer après) ?
    Sinon dois-je repositionner la balle pile au contact du plan, calculer le temps quel a mis depuis le début de la frame jusq'au contact pour ensuite trouver la force K la rajouté à l'accélération et recalculer la vitesse et la position de la balle ?
    En somme je suis un peu perdu à cause du système de frame, mon but est simple je veux juste que ma balle rebondissent sur un plan et remonte jusqu'a obtenir sa position initial et ceux même si je laisse tourner le programme un mois, bon en imaginant que je n'utilise que des variables entieres pour pas que des arrondis s'ajoutent

    Si quelqu'un pouvait m'aider sa serait super simpa paceque je me creuse la tête depuis vraiment trop longtemps sur ce problème
    Merci d'avance à ceux qui ont eu le courage de me lire et encore plus à ceux qui me répondront

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En fait, lorsqu'il y a contact, la seule chose que tu doit inverser, c'est le signe de ta vitesse sur Z. L'accélération sur Z est toujours la même (gravité).

    Théoriquement ceci devrait suffire ...

    Ensuite, pour ton problème de distance avant et distance après utilise les équations de position d'un mouvement uniformément accéléré pour déterminer au bout de combien de temps il y a eu contact :

    z(t) = 1/2 * y * t^2 + v0 * t + z0

    En gros il y a contact quand z(t) = z_plan.

    Une fois le t_contact déterminé, il faut que tu détermines à quelle vitesse il a herté le plan. (Tu dérive le z(t) et tu appliques le t_contact )

    Une fois ceci déterminé, tu détermines à quelle hauteur doit se trouver ta balle à la fin de la frame ( donc à t = fin_frame - t_contact ) en utilisant la première équation.

  3. #3
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Bon pour l'instant je vais me contenter d'inverser la vitesse au contact du plan. Meme si après j'aurai besoin de calcul plus complexe je vais m'en contenter pour le moment.

    Est-ce que je dois faire quelques choses comme sa (sachant que Z1 et VZ1 sont la position et la vitesse avant le rebond et Z2 et VZ2 apres le rebond au moment ou la balle est dans le plan puis apres le calcul, sur le plan) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    D1=Abs(Z1_Sphere-Z_Plan)
    D2=Abs(Z2_Sphere-Z_Plan)
    VZ_Sphere2=AZ_Sphere*D1/(D1+D2)*ElapsedTime+VZ1_Sphere
    VZ_Sphere2=-VZ2_Sphere
    Z_Sphere2=VZ2_Sphere*D2/(D1+D2)*ElapsedTime+Z2_Sphere
    Merci d'avance

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    ... vecteur vitesse physiquement ce n'est pas se qu'il c'est passé car la balle a donné son énergie au plan et le plan son énèrgie à la balle se qui induit une nouvelle force au moment du contact des 2 objets...
    C'est tout à fait le cas:
    Cela peut tout à fait se simuler avec les modules de Young. Pour faire les choses complètement correctement, utiliser la FEM si non, si on considère de système à une dimension en négligeant les déformatons hors axe, cela revient à considérer que la balle tombe sur un ressort "très" dur. si le dit ressort est sans perte, alors on retrouve bien V2= -V1 et on peut estimer la durée du choc ainsi que la profondeur de pénétration.

Discussions similaires

  1. Moteur physique 2D
    Par CaptainChoc dans le forum Physique
    Réponses: 6
    Dernier message: 07/08/2006, 22h47
  2. [FAQ] [3D] Physique, moteur physique
    Par Rafy dans le forum Contribuez
    Réponses: 7
    Dernier message: 04/06/2006, 17h51
  3. [Tuto] [3D] Moteur physique
    Par Rafy dans le forum Contribuez
    Réponses: 7
    Dernier message: 04/06/2006, 13h57
  4. Moteur Physique
    Par Jbx 2.0b dans le forum Physique
    Réponses: 6
    Dernier message: 11/03/2005, 12h29
  5. Moteur physique : comment l'implémenter ?
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/12/2003, 12h56

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