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 :

Rebond d'une balle sur un sol incliné


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Points : 20
    Points
    20
    Par défaut Rebond d'une balle sur un sol incliné
    Salut à tous et bonne année,

    J'ai un petit problème d'algo et de géométrie, je voudrais réaliser une collision entre une balle et un sol qui est incliné tout en 2 dimensions (pour simplifier)

    Donc j'ai un cercle représentant ma balle avec son centre C(x,y) et son rayon r puis un segment de droite qui représente mon sol. Le sol est défini seulement avec 2 points que je relie donc le sol est incliné de manière constante.

    En utilisant les forces du poids je peux simuler le comportement ballistique de la balle lorsqu'elle est en l'air, mais deux problèmes se posent :
    1) Comment faire pour déterminer si la balle à traversé le sol (collision) si collision quel est le point de collision du sol avec la balle et quelle était la position de la balle au moment de la collision?
    2) Avec les 2 points du sol on peut connaître le vecteur normal au sol mais quelle est la formule afin de la renvoyer dans la bonne direction en utilisant la vitesse de la balle avant le choc et le vecteur normal (avec éventuellement un coefficient d'amortissement).

    Merci de votre aide, ca me sera vraiment utile ...

  2. #2
    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
    conservation de la composante tangentielle,
    composante normale multipliée par a a [-1,0];

    -1 : pas de perts d'énergie a >-1 perte energie
    a=0 pas de rebond, la balle continuerait à rouler sur le plan.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Points : 20
    Points
    20
    Par défaut
    Merci j.p.mignot, j'ai coder comme tu as dis et ca marche plutôt pas mal.
    J'ai conserver la composante tangentielle et multiplié la normale par un coeff négatif.

    Par contre il faut que je prenne en compte la masse de la balle, mais je ne sais pas si elle agit pour une collision, si elle rebondit plus ou moins si elle est plus lourde ou pas?

    Mais j'ai simplifié le système de collision entre la balle et le sol car je n'ai pris en compte que la position centrale de la balle et en recevant la hauteur du sol avec la position centrale je vérifie s'il y a collision.

    Mais il faudrait vérifier si le cercle touche le sol même sur les côtés car si le sol est incliné la collision aura lieu pas sur le point centrale bas de la balle mais sur un autre point à gauche ou à droite tout autour de la balle(pas en haut car pour l'instant je suppose que la balle se trouve au dessus du sol sinon quel serait l'intérêt quoiqu'en mettant une vitesse d'origne qui dirige la balle vers le sol)

    Mais je vois pas trop quel algo pourrait me dire en ayant le point central de la balle et son rayon si elle est rentrée dans le sol sachant que j'ai les deux points des extremités du sol car ce serait trop long de parcourir tous les points du sol de la gauche vers la droite et de vérifier si la distance est inférieur au rayon de la balle.

    Quelqu'un peut m'éclaircir ma lanterne?

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    La balle atteint le sol quand son centre atteint un plan parallele au sol a une distance egale au diametre de la balle.

    En plus d'un coefficiant multiplicatif, je mettrais un effet de seuil parce que la balle va arreter tot ou tard de rebondir pour rouler.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  5. #5
    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
    Pas besoin de seuil!
    se comportement est inclu dans l'amortissement .
    Si a est > -1 alors le nombre de rebonds bien qu'infini se fait dans un temps fini et sur une distance finie ( la somme converge. Cela est tres simple à vérifier avec l'équation horaire. Il n'y a même pas besoin d'introduire de frottement dans l'air pour cela ce qui bien entendu accelere encore le phénomène via un perte additive d'énergie liée au module de la vitesse )

  6. #6
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par j.p.mignot
    Pas besoin de seuil!
    se comportement est inclu dans l'amortissement .
    Si a est > -1 alors le nombre de rebonds bien qu'infini se fait dans un temps fini et sur une distance finie ( la somme converge. Cela est tres simple à vérifier avec l'équation horaire. Il n'y a même pas besoin d'introduire de frottement dans l'air pour cela ce qui bien entendu accelere encore le phénomène via un perte additive d'énergie liée au module de la vitesse )
    Je le sais, mais comment programmer cela? Une approche evenementielle va avoir un nombre infini d'evenements donc prendre un temps reel infini meme si le temps simule ne l'est pas. On peut regarder si l'evenement suivant est trop proche et dans ce cas calculer l'evenement limite et l'utiliser. Mais pour moi c'est toujours ajouter un effet de seuil.

    Si tu as une approche qui permet de travailler facilement avec des pas de temps constant, ca m'interesse. Je n'en vois pas mais j'ai pas reellement le temps d'y reflechir.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  7. #7
    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
    OK je vai essayer de formuler + correctement cela + tard, je n'ai pas le temps maintenant. Mais si on digitalise la réponse par computer et on s'interesse à la position {x,y} pour t= n*dt , il est facile de
    1- savoir si T=n. dt est > le temps audela duquel il n'y a plus de rebond autel cas plus de probleme
    2- le cas contraire se connaitre le numero m du rebond. depuis la on connait tres facilement sur ce rebond particulier pout t= n*dt la position {x,y}
    Je continue donc à penser, sauf erreur de ma prt, que la notion de seuil est surnuméraire dans ce probleme.
    3- le seuil peu peut-être permettre de stopper le calcul si la hauteur du rebond devient < ª un certain % de sa hauteur initiale ceci dans le but de gagner du temps si on est plus concerné par la suite des events
    Des que j'ai formalisé ceci je promet un post!

  8. #8
    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
    Je vais essayer car sans dessin cela sera 1 peu difficile
    Je considère un plan horizontal pour la facilité de ma demonstration. Si il est incliné cela ne change en rien ni la methode ni les resultats ( saul s'il etait vertical ! )

    x est l'axe horizontal, y celui vertical
    ------------------------------------------------------------------
    sur l'axe x
    l'equation horaire reste
    x(t) = VT * t <1>
    où VT est la composante horizontale de V ( reste constante si pas de frottement dans l'air )
    -------------------------------------------------------------------
    sur l'axe y

    F= = m Gama = - m.g ( g = 9.81 m/s/s )

    pour le rebond n commençant à t=tn, l'équation se ramène à

    y=-g/2 * (t-tn)^2 + S * (t-tn) <2>

    ici S= composante verticale de V après le choc N° n

    le choc n+1 intervint donc à t(n+1) = t(n) + 2.S/g

    or S = S(n) = VN0 * a^n

    où a est la valeur absolue du coefficient noté dans les precedants posts. (VN0 composante verticale de V au 1er choc )

    donc

    t(n+1) = t(n) + 2.VN0/g * a^n = t(n) + B* a^n pour alléger l'ecriture à suivre
    donc t(n) = B * (1-a^n)/ (1-a) <3> (si( a < 1 )

    si a < 1 alors la suite converge vers

    Tinfini = B / ( 1-a)

    cherchons maintenant la position de la balle pour t = k * dt, dt donné k dans N


    x = k* dt * VT ( voir <1> )

    en ce qui concerne y 2 cas:

    1- si t >= Tinfini, y=0
    2- si t < Tinfini alors

    le N° m du rebond est donné par

    B* (1-a^m)/(1-a) <= k * dt < B* (1-a^(m+1))/(1-a)

    soit

    a^m >= 1 - k * dt / Tinfini > a^(m+1) => m ( via un log ) <4> relation corrigé suite à 1 remarque!!

    ici on connait m donc l'instant de départ de la parabole impliquée

    tm = B * (1-a^m)/(1-a) ( voir <3>)

    en repportant dans <2> on a


    y=-g/2 * (dt*k-tm)^2 + VN0* a^m * (dt*k-tm)
    avec m defini par <4> et tm par <3>

    ce qui est bien entendu impossible de faire c'est de digitaliser avec la meme resolution tous les rebonds ( ils devieenent infiniment petits et courts!!! )


    Il y a bien le seuil Tinfin mais ce n'est pas une valeur arbitraire ajoutée en plus des données du problème: elle est conséquence et définie par la physique sous-jacente.

    Pour un plan incliné le problème est quasiment identique. Cela revient à mettre g incliné dans un système d'axe x selon le plan incliné, y ortogonal à ce dernier. => sur x il y a de l'acceleration ( g*sin(Theta) ) d'où un changement de l'équation <1> et su y g est réduit à
    g effectif = g * cos(Theta). Dans toutes les equas precedentes gerant y, remplacer g par g effectif et le tout est dit.
    travailler dans ce système d'axe est - à mon avis - plus aisé que d'utiliser un plan incliné dans le système x0y d'origine.
    On notera que la suite tn <3> n'est pas affecté ( si ce n'est g -> g effectif ce qui along T n donc Tinfini) le principl changement reside dans l'acceletration sur x ce qui implique que la balle peu cesser de rebondir sensiblement plus loin de l'origine
    il suffit de reporter tn dans l'equation <1> pour obtenir le suite xn des positions des impacts sur l'axe x!

    Si il ya du frottement visqueux dans l'air l'équation n'est plus un parabole et le formalisme est un peu plus complexe mais on peut toujours arriver a ses fins.
    Je n'arrive pas à le mettre ici sans un editeur d'équation.

  9. #9
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par j.p.mignot
    le N° m du rebond est donné par

    B* (1-a^m)/(1-a) <= k * dt < B* (1-a^(m+1))/(1-a)

    soit

    a^m >= (1-a)/B * k * dt > a^(m+1) => m ( via un log ) <4>
    Plutôt

    a^m >= 1 - k * dt / (B/(1-a)) > a^(m+1)
    a^m >= 1 - k * dt / Tinfini > a^(m+1)

    Le résultat est plus simple que ce que mon intuition me disait. Mais je n'ai plus manipulé ces équations depuis près de 20 ans, mon intuition n'est plus entraînée pour ce domaine.

    Si il ya du frottement visqueux dans l'air l'équation n'est plus un parabole et le formalisme est un peu plus complexe mais on peut toujours arriver a ses fins.
    Je n'arrive pas à le mettre ici sans un editeur d'équation.
    La syntaxe TeX ne me gène pas, mais ce n'est pas réellement la peine sauf si ca t'amuse.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  10. #10
    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
    Je suis moyennement d'accord avec l'absence de symboles mathémathiques...
    je trouve que ^ pour puissance, mettre les indices enter paranthèse, ecrire 'phsysiquement somme plutôt qu'éditer le signe sigma ou interalle suivant le cas,... nuit serieusement à la lisibilité d'un texte
    Cette remarque implique evidemment surtout le forum algorithme

    à propos de la relation d'ordre evidement ! j'ai recopié un peu vite mon brouillon!
    Je corrige mon post en conséquence! merci!

  11. #11
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par j.p.mignot
    Je suis moyennement d'accord avec l'absence de symboles mathémathiques...
    je trouve que ^ pour puissance, mettre les indices enter paranthèse, ecrire 'phsysiquement somme plutôt qu'éditer le signe sigma ou interalle suivant le cas,... nuit serieusement à la lisibilité d'un texte
    Cette remarque implique evidemment surtout le forum algorithme
    J'ai parle de syntaxe TeX, pas de syntaxe texte... je l'aurais recopiee et passee dans tex :-)

    On pourrait suggerer l'ajout d'une balise math dans laquelle on se retrouverait dans un display math de TeX (ou peut-etre mieux, LaTeX avec amsmath charge?)...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Une autre solution serait d'autoriser les balises MathML, même si cela poserait problème pour les gens utilisant un navigateur complêtement dépassé (comprendre I.E.).

  13. #13
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par sovitec
    Une autre solution serait d'autoriser les balises MathML, même si cela poserait problème pour les gens utilisant un navigateur complêtement dépassé (comprendre I.E.).
    D'apres ce que j'ai vu, MathML n'est utilisable qu'avec un editeur qui le genere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <math xmlns="http://www.w3.org/1998/Math/MathML">
      <msup>
        <msqrt>
          <mrow>
            <mi>a</mi>
            <mo>+</mo>
            <mi>b</mi>
          </mrow>
        </msqrt>
        <mn>27</mn>
      </msup>
    </math>
    a comparer avec pour du TeX. Si on a une balise math, les $$ sont a remplacer par l'ouverture et la fermeture de cette balise.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Clairement il est beaucoup plus facile d'écrire et relire du TeX que du MathML. Mais MathML est supporté nativement par tous les navigateurs modernes (Firefox, Safari, Opera...). L'effort n'est fait qu'une fois par le rédacteur, les lecteurs ont immédiatement un rendu lisible.

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par sovitec
    Clairement il est beaucoup plus facile d'écrire et relire du TeX que du MathML. Mais MathML est supporté nativement par tous les navigateurs modernes (Firefox, Safari, Opera...). L'effort n'est fait qu'une fois par le rédacteur, les lecteurs ont immédiatement un rendu lisible.
    L'objectif est naturellement que le rendu soit effectue d'une maniere ou d'une autre sans que les lecteurs aient besoin de faire quoi que ce soit; ou les forums appellent TeX et generent un png qui est inclu, ou ils le traduisement en MathML.

    Il est illusoire de penser que quelqu'un va taper du MathML quand les expressions deviennent compliquees, la ou justement le rendu est necessaire pour comprendre.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Points : 20
    Points
    20
    Par défaut
    Ca ne me gênes pas trop d'écrire les formules sans éditeur (la encore ca va) mais c'est vrai que si elles sont trop complexes ca devient vite embêtant.
    Mais l'écrire avec du tex ca doit être pas mal surtout si l'on peut faire du copier-coller ensuite sur le forum, à voir !!! :o

    Sinon j'ai trouvé un site pas mal du tout qui explique comment gérer le rebond d'une balle (d'un point avec un rayon) à partir de l'équation d'une droite, le site est celui-ci :

    http://texel3d.free.fr/opengl/collisions.htm

    Je l'ai programmé ca marche assez bien sauf dans quelques cas (il faut que je vois mieux tout ca). Ca doit être dû au fait que la balle doit rester en collision avec le sol car je ne l'ai pas surelevé

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Il faut faire attention à quelquechose encore quand on traite une collision c'est le repositionnement.
    Je vais parler d'un exemple que je connais bien : un jeu.
    Soit une boule et un plan incliné.
    A la Frame 1 la balle est au dessus du plan, tout va bien.
    A la Frame 2 la balle est a cheval sur le plan. La collision à eu lieu entre la Frame 1 et la Frame 2. Il faut penser à repositionner la balle à l'endroit ou elle devrait vraiment être après la Frame 2 s'il y avait bien eu effectivement une collision, car sinon, il est possible que même après avoir appliqué à la balle une vitesse normale opposée (de quoi la faire rebondir) elle soit encore à cheval sur le plan à la Frame 3 !!!!
    (Ca c'est vrai c'est quand on a un pas de calcul qui n'est pas constant !)
    Alors si à la Frame 3 on effectue encore une opposition de la vitesse normale, la boule va repartir dans la même direction qu'a la Frame 1.... Et il peut y avoir différents bugs : tremblement (à chaque frame on change la vitesse normale de la balle et a chaque fois il y a une collision de détectée), la balle traverse du mauvais coté (la vitesse normale n'est pas inversée du bon coté quand la balle n'est plus en collision (il y aura eu des tremblements avant))
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Sinon pour modéliser un rebond de manière simple sur une surface de normale au point de contact n. Il faut symétriser la vitesse de l'objet qui arrive en contact par rapport au plan formé par n au point de contact.
    pour cela, si V est la vitesse de l'objet.
    V -= (2*V*n)*n (avec n pointant vers l'objet en collision sinon c'est +=(2*V*n)*n)
    Dans le cas de notre ami, si le plan est incliné sans changement de pente, le vecteur n est connu et constant.
    Remarque :
    Ce rebond est un rebond "parfait", il n'y a pas d'absorption dans la collision. Pour introduire de l'absorption il suffit de multiplier (2*V*n) par un nombre compris entre 1 et 1/2. (1 rebond complet; pas d'absorption, 1/2 demi rebond; la boule va rouler directement sans rebondir)
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Aussi étrange que cela puisse paraitre la masse n'intervient pas la dedans car la force générée par le plan pour que la boule rebondisse sera proportionnelle à la masse (c'est une impulsion plutôt). Mais comme
    m*Ag = m*g + F (F c'est notre force due à la collision [F = m*f])
    alors :
    Ag = g + f, plus de masse... C'est magique.
    Dans un monde parfait, lacher une balle, sans elan depuis le 3ème étage, elle remontera jusqu'au 3ème !!!! qu'elle pèse 1 kg ou 100000kg.
    Remarque :
    Il est plus simple pour un ordinateur de modéliser un monde parfait qu'un monde imparfait.
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

Discussions similaires

  1. Calcul d'angle de sortie de rebond d'une balle sur une droite
    Par niocco dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/04/2015, 17h17
  2. Simuler rebond d'une balle
    Par Coco4486 dans le forum Ogre
    Réponses: 2
    Dernier message: 09/05/2008, 19h26
  3. Réponses: 1
    Dernier message: 02/05/2008, 02h19
  4. Roulement d'une balle sur un plan incliné
    Par Julien_C++ dans le forum Physique
    Réponses: 1
    Dernier message: 03/06/2007, 19h25
  5. rebond d'une balle aux bords de l'écran
    Par The_Duck dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 11/05/2006, 22h47

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