Collsion de particules/boules de billard
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 35

Collsion de particules/boules de billard



  1. #1
    invite0c5534f5

    Collsion de particules/boules de billard


    ------

    Salut,

    j'essaye de faire une simulation de collision de particules (ou boules de billard simplifié).
    Le problème c'est que j'ai les formules suivantes pour calculer la vitesse de deux particules avant et après le choc:

    avec et les vecteurs vitesses avant le choc de la particule 1 et 2.
    Et et les vecteurs vitesses après le choc de la particule 1 et 2.

    Mais on remarque, que si les deux masses sont identiques, les vecteurs vitesses s'échangent.
    Mais cela n'est pas du tout réaliste!

    Donc je voudrais savoir d'où elles sortent ces formules et si vous en aviez d'autre à me proposer...

    Merci.

    -----

  2. #2
    Duke Alchemist

    Re : Collsion de particules/boules de billard

    Bonsoir.

    Les relations obtenues sont le résultat de la conservation de l'énergie cinétique et celle de la quantité de mouvement pour un choc parfaitement élastique.
    Maintenant, dans ton cas, le choc ne doit pas être totalement élastique. Pour cela il faut introduire le coefficient de restitution (souvent noté e) qui est un nombre compris entre 0 et 1 (pour toi, il devrait être proche de 1)

    Duke.

    EDIT : cf wikipedia "choc élastique" pour la "démo" des relations.

  3. #3
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Pour simplifier je vais commencer par prendre 1 comme coef de restitution.
    Pour bien voir de quoi je parle voici un schéma:

  4. #4
    obi76

    Re : Collsion de particules/boules de billard

    C'était mon sujet de DEA, si tu veux je peux mettre mon rapport en ligne...

  5. A voir en vidéo sur Futura
  6. #5
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Euh, je sais pas si je pourrais le comprendre, mais pourquoi pas
    (Il est en français j'espère ?)
    Mais donc pourquoi les formules ne fonctionnent pas?

  7. #6
    sitalgo

    Re : Collsion de particules/boules de billard

    B'soir,

    Cette formule ne fonctionne que pour deux boules sur un même axe, soit un choc frontal.
    Il faut introduire des vecteurs Vn et Vt, Vn étant le vecteur normal au plan de contact.
    Enfin moi je ferais comme ça.
    Mais si t'as l'gosier, Qu'une armure d'acier, Matelasse. Brassens, Le bistrot.

  8. #7
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Tu peux développer ? S'il te plaît.

  9. #8
    invite60be3959

    Re : Collsion de particules/boules de billard

    salut,

    en effet ces formules ne tiennent pas compte du la conservation du moment cinétique. Voici un lien qui détail les choses : http://www.owl-ge.ch/spip.php?article1779

  10. #9
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Merci pour le document, vraiment execellent.
    Le problème c'est que c'est en coordonnées polaires, et moi il me faudrait les cartésiennes (et dans un repère où l'origine est le coin supérieur gauche de la fenêtre, l'axe des abscisses orientés vers la gauche et l'axe des ordonnées orienté vers le bas).

    Voici les formules:





    Donc je pose

    On arrive facilement à montrer que



    Mais on a encore un soucis pour calculer , puisqu'il nous fait et (dans ma simulation je n'aurais accès qu'au composantes des vitesses avant le choc)
    Et comme je pense qu'il n'y a aucun moyen de trouver un angle en C et bien il faut que je les calcules avec ce que j'ai.

    On montre facilement que:



    et d'habitude à partir de ces deux équations on en déduit
    Mais ici on ne peut pas, donc il faut trouver une autre méthode.
    Je pense que j'ai le choix entre arccos et arcsin.
    Prenons arccos:


    De même pour :


    De là on en déduit:



    D'où:



    (ne tenez pas compte des deux accolades, c'est latex qui fait des siennes quand on lui donne de trop grosses formules )

    Et de même pour et

    Je voulais savoir si ce que j'ai fait est juste?


    Mais en plus ce n'est pas fini, car ce sont les coordonnées dans le repère de la ligne d'impact (voir la figure du document page 5).
    Et là je n'ai absolument aucune idée de savoir comment je pourrais les transformé en coordonnées du repère de ma fenêtre (avec origine en haut à droite, axe des abscisses vers la droite et axe des ordonnées vers le bas).


    Merci de votre aide.

  11. #10
    obi76

    Re : Collsion de particules/boules de billard


  12. #11
    LPFR

    Re : Collsion de particules/boules de billard

    Bonjour.
    Pour ne pas tomber dans la complexité des formules de Neokiller, pour des collisions non frontales, on change de repère et on se met dans le repère du centre de masses qui, lui, est au repos. De plus la quantité de mouvement étant conservée (collisions élastiques ou non), les deux billes partent dans des directions opposées après le choc... et la vie est plus simple.
    Au revoir.

  13. #12
    obi76

    Re : Collsion de particules/boules de billard

    C'est sur mon pdf ^^ (aussi avec des systèmes de détection de colision)

  14. #13
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Citation Envoyé par LPFR Voir le message
    Bonjour.
    Pour ne pas tomber dans la complexité des formules de Neokiller, pour des collisions non frontales, on change de repère et on se met dans le repère du centre de masses qui, lui, est au repos. De plus la quantité de mouvement étant conservée (collisions élastiques ou non), les deux billes partent dans des directions opposées après le choc... et la vie est plus simple.
    Au revoir.
    Oui, mais moi j'ai ma fenêtre graphique qui a donc son propre repère, et je dessine mes particules dedans en donnant les coordonnées de celle-ci dans le repère de la fenêtre, donc je peux pas me placer dans le repère du centre de masse.

    Citation Envoyé par obi76 Voir le message
    C'est sur mon pdf ^^ (aussi avec des systèmes de détection de colision)
    Je l'ai survolé et ça a l'air complexe, va falloir que j'étudie ça de plus près.

  15. #14
    obi76

    Re : Collsion de particules/boules de billard

    C'est pas particulièrement complexe, c'est juste détaillé...

    Tu as :
    - la détection
    - la prise en compte
    - les optimisations

  16. #15
    LPFR

    Re : Collsion de particules/boules de billard

    Citation Envoyé par neokiller007 Voir le message
    Oui, mais moi j'ai ma fenêtre graphique qui a donc son propre repère, et je dessine mes particules dedans en donnant les coordonnées de celle-ci dans le repère de la fenêtre, donc je peux pas me placer dans le repère du centre de masse.
    Re.
    Bien sur que oui!
    On passe sur le centre de masses, on fit le calcul, on repasse sur le repère précèdent. Les deux translations de repère ne sont rien du tout comme calcul.
    A+

  17. #16
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Salut,

    J'ai plein de questions:

    Dans ton doc on parle de RK3, mais je vois pas d'équations différentielles, est-ce que ta simulation implémente la gravité ?

    Moi dans mon code pour faire avancer une particule:

    - je calcule sa nouvelle position en fonction des composantes du vecteurs vitesse avec la formule:
    x=x+vx*0.03;
    y=y+vy*0.03;
    Où x et y son les cordonnées de la boule, vx et vy les composantes du vecteur vitesse et 0.03 mon intervalle de simulation (en seconde)

    -J'attends 30 ms (mon intervalle de simu)

    -J'affiche les particules, et c'est reparti pour un tour.

    C'est bon comme méthode ?

    Revenons à ton doc:
    Je ne comprend pas grand chose. Deux lignes après le titre 4.3 (p13) il est dit "Nous avons leur vitesse, leur masse, leur rayon et le temps exact de leur collision" Euh nan, moi j'ai pas le temps de la collision.
    Une ligne avant la fin de la page y a un "mk" c'est quoi ?
    A la page 14 on parle de masse réduite, comme je ne savais pas ce que c'était j'ai fait une petite recherche et j'apprends que c'est un concept physique qui est utilisé dans les problèmes à 2 corps. Tu ne négliges pas l'interaction gravitationnelle entre les particules ? (je commence à comprendre l'utilité du RK 3 )
    A la première ligne page 15 on parle du "repère d'origine" quel est-il ?
    Dans le système de coordonnées (toujours p15) le point "." c'est le produit scalaire ? Si oui alors je ne comprend pas ce que ça veut dire le produit scalaire avec le vecteur (respectivement
    ), (Ox) (respectivement (Oy) )est un axe!

    De plus les formules font intervenir et comment puis-je connaitre leurs coordonnées dans mon repère puisqu'il faut faire une rotation ? (puis translations mais ça, ça pose pas de problème)

    Et c'est quoi les vecteurs X ?


    Moi pour la détection des collisions j'utilise une approche ultra naïve: je teste chacune des boules pour savoir si la distance centre-centre est inférieur au rayon (bon là j'ai qu'un test à faire puisque pour l'instant je n'ai que deux particules pour tester mon code). Et peut être que lorsque mes collisions fonctionnerons j'améliorais l'algo.

    Sinon j'ai trouvé ceci: http://www.univ-lemans.fr/enseigneme...ca/chocs2d.pdf
    Je pensais avoir trouvé les formules, mais en fait c'est pour une collision avec une des boule immobile.
    J'ai quand même essayé d'implémenter les formules mais j'ai un problème:
    Lorsqu'il y a collision, les particules commencent à changer de direction (ce qui prouve que les formules fonctionnent) mais les particules disparaissent juste après.
    Et j'ai réussi à comprendre pourquoi en utilisant un déboguer:
    Lorsqu'il y a collision j'entre bien dans ma condition qui va calculer les nouvelles vitesses. Puis je calcul les nouvelles positions et j'affiche. Mais après le p programme réentre dans le condition de collision et recalcule donc des vitesses, et ceci pour plusieurs tours de boucle (et même si je prend un temps de simu petit !), donc à force ça calcul des vitesse bizarre et ça fait boguer le programme.
    Je vois pas comment faire pour remédier à ça tout en utilisant ma détection naïve (pour éviter de compliquer la chose...)



    Merci d'avoir lu mon pavé.

  18. #17
    sitalgo

    Re : Collsion de particules/boules de billard

    Citation Envoyé par neokiller007 Voir le message
    Je vois pas comment faire pour remédier à ça tout en utilisant ma détection naïve (pour éviter de compliquer la chose...)
    Il est possible que le programme rerentre en boucle de collision parce que, je suppose lors d'un choc non frontal, les boules ne soient pas sorties du rayon. En effet le moment de l'impact et décidé pour une distance inférieure au rayon.
    Il faut peut-être vérifier au débogueur la valeur du rayon dans la boucle qui suit le choc.
    Si cette valeur est toujours inférieure au rayon, tu peux mettre un flag, mis à 1 lors de la détection de choc, qui fait sauter la boucle et qui remet le flag à 0 quand la distance est supérieure au rayon.
    Mais si t'as l'gosier, Qu'une armure d'acier, Matelasse. Brassens, Le bistrot.

  19. #18
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Bonne idée mais là je viens de recompiler et ça fonctionne sans avoir rien changé au code....
    Les tréfonds de l'informatique sont impénétrables.

  20. #19
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Quoi que si, ils sont peut être pénétrables.
    En fait je viens de remarquer si il y a une distance de 300px entre les boules ça fonctionne.
    Si c'est un pixel de plus ou de moins ça ne marche plus. Donc je pense que par une chance inouïe cette position particulière fait que lors de la collision il n'y a aucune interpénétration et donc on ne rentre qu'une fois dans le condition de collision. Donc je viens de tester avec ton flag et ça fonctionne !

  21. #20
    obi76

    Re : Collsion de particules/boules de billard

    Cet algorithme de calcul c'est implémenté dans un solveur pour les équations de la mécanique des fluides utilisant un RK3. La détection des collisions elle se fait par un développement d'Euler de la position au premier ordre.


    m_k c'est la masse des gouttes (ou des particules si tu veux).

    Dans mon cas je m'interessait à des particules de quelques centaines de microns tout au plus, en bref l'interaction gravitationnelle je ne la prenait pas en compte.

    Ce que j'ai écrit, c'est juste en connaissant la position et la vitesse de toutes les particules (supposées sphériques), déterminer après un pas de temps leur nouvelles positions et vitesses - dues aux collisions s'il y a.

    Dans ton cas il te suffit de rajouter la force gravitationnelle entre chaque particule (amuse toi bien ) (au début la seule force que jai c'est la force de trainée du au fluide, pour toi il te suffit de ne mettre qu'une seule force : celle de l'attraction gravitationnelle).

    Bon courage ^^

    EDIT : pour l'interpénétration des particules, mon algorithme les évite correctement et prend bien en compte TOUTES les collisions. Tu n'aura donc pas ce soucis si tu l'utilise (et de ce que j'ai vu en biblio, tout le monde utilise à peu près le même principe si les particules sont sphériques).

  22. #21
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Citation Envoyé par obi76 Voir le message
    Ce que j'ai écrit, c'est juste en connaissant la position et la vitesse de toutes les particules (supposées sphériques), déterminer après un pas de temps leur nouvelles positions et vitesses - dues aux collisions s'il y a.
    C'est exactement ce qu'il me faut mais je n'arrive pas à comprendre les formules...
    Peux-tu me citer les formules permettant de calculer les nouvelles vitesses en fonction des anciennes ?
    Citation Envoyé par obi76 Voir le message
    Dans ton cas il te suffit de rajouter la force gravitationnelle entre chaque particule
    Ah mais nan c'était juste une question, j'ai déjà assez de mal comme ça
    Citation Envoyé par obi76 Voir le message
    EDIT : pour l'interpénétration des particules, mon algorithme les évite correctement et prend bien en compte TOUTES les collisions. Tu n'aura donc pas ce soucis si tu l'utilise (et de ce que j'ai vu en biblio, tout le monde utilise à peu près le même principe si les particules sont sphériques).
    Oui mais j'aimerais déjà arriver à faire un truc simple puis après j'optimiserais.

    Sinon t'as pas répondu à toutes mes questions: pourquoi masse réduite etc...

  23. #22
    obi76

    Re : Collsion de particules/boules de billard

    Pour calculer la vitesse après collisions - comme l'a dit LPFR - il faut changer de repère.

    chapitre 4.2 : détection des collisions par les vitesses et les positions initialles de tes particules

    chapitre 4.3 : une fois la collision détectée : changement de repère, calcul des nouvelles vitesses et re-changement de repère pour retomber sur le repère initial (la masse réduite est définit par 1/mu = 1/m1 + 1/m2, avec m1 et m2 les masses des 2 particules)


    chapitre 4.4 : c'est si tu veux le faire en 3D (c'est symétrique comme méthode, donc passer de 2 à 3D se fait naturellement).

    EDIT : l'intégration de cette méthode dans le programme : je détecte les collisions, je mémorise les nouvelles positions et vitesses des particules qui ont collisioné. Je fais le pas de temps "normal", et ensuite je mets à jour la position & vitesses des particules qui ont collisioné.

  24. #23
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Citation Envoyé par obi76 Voir le message
    chapitre 4.3 : une fois la collision détectée : changement de repère, calcul des nouvelles vitesses et re-changement de repère pour retomber sur le repère initial (la masse réduite est définit par 1/mu = 1/m1 + 1/m2, avec m1 et m2 les masses des 2 particules)
    C'est là que je coince: comment tu fais le changement de repère ? Avec quoi calcules-tu les nouvelles vitesses et pourquoi a -t-on besoin de la masse réduite puisque d'après wikipédia ça sert pour les problèmes à 2 corps (donc avec la gravité) et je croyais que la masse des particules c'était mk.

  25. #24
    obi76

    Re : Collsion de particules/boules de billard

    Citation Envoyé par neokiller007 Voir le message
    C'est là que je coince: comment tu fais le changement de repère ?
    Tu calcules la distance entre les 2 sphères en fonction du temps, dès que cette distance est égale à la somme de leur rayon, il y a collision (logique). Tu détermine ce temps (c'est tau dans le rapport), c'est juste un trinome à résoudre. Une fois que tu as ce temps, tu calcule la position de ces boules exactement au moment de l'impact (position + tau*vitesse).

    De là tu détermine le nouveau repère dont un des axe passe par le centre des 2 sphères, et l'autre vecteur est perpendiculaire.

    Citation Envoyé par neokiller007 Voir le message
    Avec quoi calcules-tu les nouvelles vitesses
    Conservation de l'énergie et de la quantité de mouvement, c'est détaillé dans el rapport.

    Citation Envoyé par neokiller007 Voir le message
    et pourquoi a -t-on besoin de la masse réduite puisque d'après wikipédia ça sert pour les problèmes à 2 corps (donc avec la gravité) et je croyais que la masse des particules c'était mk.
    Ce n'est pas parce que ça s'applique à la gravitation que l'on a pas le droit de l'appliquer à d'autre problème. En l'occurence lorsque tu triture tes formules pour isoler les vitesses après impact, tu t'apperçois que la masse réduite entre en jeu, c'est une manière plus simple d'écrire que ...

  26. #25
    obi76

    Re : Collsion de particules/boules de billard

    Ha oui, précisions :

    le point c'est bien un produit scalaire, quand je dis Ox je parle du vecteur directeur de l'axe x (et Oy un vecteur directeur de y).

  27. #26
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Je suis désolé mais j'ai vraiment du mal, alors allons y étape par étape:
    -Je ne comprend pas ce qu'est , c'est le temps de la collision entre deux sphères depuis le début de la simulation ?
    -C'est quoi ? Le pas de simulation ?
    -C'est quoi X et Y ainsi que toutes les variantes: , , etc... (page 12 et 13)
    -Je n'arrive pas à comprendre pourquoi mais ça c'est surement parce que je ne sais pas trop ce qu'ils représentent.

    Voila pour l'instant on s'arrête là.

  28. #27
    obi76

    Re : Collsion de particules/boules de billard

    Ton pas de temps () c'est 0,03.

    Donc à chaque pas de temps, il faut détecter les collisions. Pour ça, je regarde pour chaque couple de particule l'équation de distance entre les 2 (L(t)).
    L(t) dépend de la position de la particule R et S (, la position de R, pour S c'est avec l'indice S) et de sa vitesse (et les vitesses sur x et y).

    tu as résous ( et les rayons de R et de S), c'est donc le temps où les 2 particules R et S entrent en contact. Il faut que ce soit pendant le pas de temps que tu détecte la collision donc .

    pour le moment c'est bon ?

  29. #28
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Je ne comprend toujours pas ce qu'est , est-ce que tu détectes les collisions avant qu'elles aient lieux ? Est-ce que c'est le temps de collision de deux particules depuis le début de la simulation? Donc par exemple au début de la simulation tu calcules les de tous les couples de particules. Puis tu avances tranquillement ta simulation jusqu'au plus petit , donc par exemple si le plus petit c'est 5 s alors tu avances ta simu de 5s, tu calcules alors les nouvelles vitesses des particules en collision et ainsi de suite.

    Mais à mon avis ce n'est pas ça car

  30. #29
    obi76

    Re : Collsion de particules/boules de billard

    Non, à chaque pas de temps, je prend une origine de temps (=0).

    Dans ce pas de temps de delta t, les particules vont avancer selon la loi que tu m'as donnée.

    Avant de faire cet avancement en temps, je détecte les collisions, et mémorise la position et la vitesse des particules qui ont collisionné. Pour les autres je ne retiens rien.

    Je fais mon avancement en temps (de delta t donc), et ensuite seulement je mets à jour la position et vitesse des particules qui ont collisioné.

    Pour la detection des collisions, j'ai un système de N boules, dont je connais les positions et les vitesses. Je regarde si PENDANT CE PAS DE TEMPS, il existe tau (qui est le moment d'impact - s'il existe - entre 2 particules) qui soit entre 0 et delta t (donc qui soit pendant ce pas de temps quoi).

    Ensuite j'applique les formules de changement de base etc.

  31. #30
    invite0c5534f5

    Re : Collsion de particules/boules de billard

    Ok, j'ai crompris.
    Donc à chaque pas de temps je regarde pour chaque couple de sphère si delta>0. Si c'est le cas je calcul tau. Toutes les particules pour lesquelles j'ai calculé tau sont donc en collision. Puis je calcule les positions des particules qui ne sont pas en collsions (position +delta t*vitesse). Puis je calcule la position des boules à l'endroit de la collision (position +tau*vitesse) Et ensuite ?

    Par contre y a un truc que je pige pas, j'ai voulu faire un test à la main, Je prend Xr=100 Yr=50 Vry=0 Vrx=100 et Xs=200 Ys=50 Vsx=-100 Vsy=0 et je trouve un tau négatif... (-0.7).

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Choc entre deux boules de billard
    Par inviteeba02851 dans le forum Physique
    Réponses: 2
    Dernier message: 23/01/2008, 23h08
  2. particules d'air qui freine des particules d'hélium
    Par invite334acd02 dans le forum Physique
    Réponses: 0
    Dernier message: 13/09/2007, 10h26
  3. Réponses: 4
    Dernier message: 05/04/2007, 12h10
  4. physique des boules de billard
    Par acx01b dans le forum Physique
    Réponses: 8
    Dernier message: 28/04/2004, 11h44