Modélisation des chocs élastiques

Il y a quelques mois j’avais trouvé cette question sur StackOverflow. Il s’agissait de fournir une formule décrivant le choc élastique entre deux boules en mouvement (particules parfaitement sphériques) afin de l’intégrer dans un programme informatique.

Ici, on ne prendra pas en compte le moment cinétique des particules. J’en parlerai peut-être dans un prochain article. 🙂

Les bases du problème

Commençons par poser les bases du problème avec un petit dessin.

choc_elastique

Pour chacune des boules, on définit les grandeurs physiques suivantes :

  • m_i : masse
  • \overrightarrow{v_i} : vecteur vitesse avant collision
  • \overrightarrow{w_i} : vecteur vitesse après collision
  • O_i : centre
  • \overrightarrow{x_i} : vecteur position

Le vecteur unitaire \overrightarrow{n} est normal à la surface de la boule 1 au niveau du point de contact :
\overrightarrow{n} = \frac{\overrightarrow{O_1O_2}}{{\left \| \overrightarrow{O_1O_2} \right \|}} = \frac{\overrightarrow{x_2}-\overrightarrow{x_1}}{{\left \| \overrightarrow{x_2}-\overrightarrow{x_1} \right \|}}

Le vecteur unitaire \overrightarrow{t} est tangent au point de contact.

Quelle formule peut-on utiliser ?

Je propose d’utiliser ces deux formules présentées dans un article de Wikipedia :

  \left\{\begin{matrix}  \overrightarrow{w_1} = \overrightarrow{v_1} - \frac{2m_2}{m_1+m_2} \frac{(\overrightarrow{v_1}-\overrightarrow{v_2}).(\overrightarrow{x_1}-\overrightarrow{x_2})}{{\left \| \overrightarrow{x_1}-\overrightarrow{x_2} \right \|}^{2}} (\overrightarrow{x_1}-\overrightarrow{x_2})  \\\\  \overrightarrow{w_2} = \overrightarrow{v_2} - \frac{2m_1}{m_2+m_1} \frac{(\overrightarrow{v_2}-\overrightarrow{v_1}).(\overrightarrow{x_2}-\overrightarrow{x_1})}{{\left \| \overrightarrow{x_2}-\overrightarrow{x_1} \right \|}^{2}} (\overrightarrow{x_2}-\overrightarrow{x_1})  \end{matrix}\right.

Ces expressions sont pratiques à utiliser dans un code informatique pour les raisons suivantes :

  • elles sont indépendantes du système de coordonnées;
  • il n’est pas nécessaire de définir d’angles de déviation;
  • les opérations nécessaires sont simples (il faut disposer du produit scalaire).

Quelles sont les lois de la physique en jeu ?

Le théorème de conservation de la quantité de mouvement s’écrit :

m_1\overrightarrow{w_1} + m_2\overrightarrow{w_2} = m_1\overrightarrow{v_1} + m_2\overrightarrow{v_2}

La conservation de l’énergie cinétique s’écrit :

m_1 w_1^{2} + m_2 w_2^{2} = m_1 v_1^{2} + m_2 v_2^{2}

Comme aucune force tangentielle ne s’exerce sur les deux boules, la composante tangentielle du vecteur vitesse est conservée après la collision :

  \left\{\begin{matrix}  \overrightarrow{w_1}.\overrightarrow{t} = \overrightarrow{v_1}.\overrightarrow{t}  \\  \overrightarrow{w_2}.\overrightarrow{t} = \overrightarrow{v_2}.\overrightarrow{t}  \end{matrix}\right.

Démonstration

Grâce à la conservation de la composante tangentielle, on peut réécrire les lois de conservation de la quantité de mouvement et de l’énergie cinétique uniquement avec la composante normale :

  \left\{\begin{matrix}  m_1\overrightarrow{w_1}.\overrightarrow{n} + m_2\overrightarrow{w_2}.\overrightarrow{n} = m_1\overrightarrow{v_1}.\overrightarrow{n} + m_2\overrightarrow{v_2}.\overrightarrow{n}  \\  m_1{(\overrightarrow{w_1}.\overrightarrow{n})}^{2} + m_2{(\overrightarrow{w_2}.\overrightarrow{n})}^{2} = m_1{(\overrightarrow{v_1}.\overrightarrow{n})}^{2} + m_2{(\overrightarrow{v_2}.\overrightarrow{n})}^{2}  \end{matrix}\right.

Ces deux expressions nous ramènent à la résolution du problème à une dimension. On factorise la conservation de l’énergie cinétique puis on la simplifie avec la conservation de la quantité de mouvement :

  m_1{(\overrightarrow{w_1}.\overrightarrow{n})}^{2} - m_1{(\overrightarrow{v_1}.\overrightarrow{n})}^{2} = m_2{(\overrightarrow{v_2}.\overrightarrow{n})}^{2} - m_2{(\overrightarrow{w_2}.\overrightarrow{n})}^{2}
  \Rightarrow (\overrightarrow{w_1}.\overrightarrow{n}) + (\overrightarrow{v_1}.\overrightarrow{n}) = (\overrightarrow{v_2}.\overrightarrow{n}) + (\overrightarrow{w_2}.\overrightarrow{n})

En multipliant cette dernière expression par m_2 puis en la sommant avec la conservation de la quantité de mouvement, on récupère la composante normale de \overrightarrow{w_1} :

  \overrightarrow{w_1}.\overrightarrow{n} = \frac{m_1-m_2}{m_1 + m_2}\overrightarrow{v_1}.\overrightarrow{n} + \frac{2 m_2}{m_1 + m_2}\overrightarrow{v_2}.\overrightarrow{n} = \overrightarrow{v_1}.\overrightarrow{n} - \frac{2 m_2}{m_1+m_2} (\overrightarrow{v_1}-\overrightarrow{v_2}).\overrightarrow{n}

On retrouve donc la formule de \overrightarrow{w_1} présentée dans l’article de Wikipedia :

  \overrightarrow{w_1} = (\overrightarrow{w_1}.\overrightarrow{n})\overrightarrow{n} + (\overrightarrow{w_1}.\overrightarrow{t})\overrightarrow{t} = \overrightarrow{v_1} - \frac{2m_2}{m_1+m_2} \frac{(\overrightarrow{v_1}-\overrightarrow{v_2}).(\overrightarrow{x_1}-\overrightarrow{x_2})}{{\left \| \overrightarrow{x_1}-\overrightarrow{x_2} \right \|}^{2}} (\overrightarrow{x_1}-\overrightarrow{x_2})

La formule de \overrightarrow{w_2} est symétrique.

Un petit script Python

J’ai développé un petit script Python 🙂 simulant des chocs élastiques en 2D et utilisant ces fameuses formules. Le lien vers le dépôt Github est ici.

N’hésitez pas à laisser un commentaire si vous souhaitez faire une remarque ou poser une question.

Partager :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *