Simulation d’une corde qui chute

La corde chute jusqu’à sa stabilisation autour d’une position d’équilibre. L’étude physique est détaillée dans le document. La corde est représentée par une suite de n masses ponctuelles reliées par des ressorts de masse nulle qui exercent une traction lorsque leur longueur dépasse un certain seuil. On considère une corde de longueur L et de masse M, elle est divisée en n masses de masses \frac{M}{n}. Ces masses sont reliées par n-1 ressorts qui exercent une traction sur les masses qu’ils relient lorsque leur longueur dépasse le seuil \frac{L}{n-1}. Les masses sont initialement placées sur une droite reliant les deux extremités fixes de la corde. Chaque masse est soumis à une accélération égale à la somme de trois forces qui sont son poids et les tractions exercées par les ressorts auxquels elle est attachée

../_images/corde.png

A chaque instant t, on peut calculer cette accélération, en déduire la vitesse puis la position à l’instant t+1. Ce mécanisme permet d’obtenir une animation de la corde atteignant sa position d’équilibre.

On construit l’algorithme suivant étant donné une corde de longueur L suspendue entre les points d’abscisse (-x_0,0) et (0,0) de telle sorte que 2 x_0 < L. Cette corde à une masse M et une raideur k. La pesanteur est notée g. On divise cette corde en n masses ponctuelles de masse \forall i \in [[1..n]], \; m_i = \frac{M}{n}. Chaque masse a une position p_i. On note pour chaque point p_i sa vitesse v_i. On désigne par f un coefficient de freinage, plus il est grand, plus la corde convergera rapidement vers sa position d’équilibre. dt désigne un pas de temps.

\forall i \in [[1..n]], \; p_i = -x_0 + 2x_0 \frac{i-1}{n-1}

Pour chaque masse, on calcule une accélération a_i \in \mathbb{R}^2 et a_0 = a_n = 0 (les extrémités sont fixes). On met à la jour comme suit :

  1. a_i \longleftarrow (0, - m_i g) - f v_i
  2. Si \left\Vert\overset{\longrightarrow}{p_{i-1},p_i }\right\Vert  > \frac{L}{n-1} alors a_i \longleftarrow a_i + k \left[ \left\Vert\overset{\longrightarrow}{p_{i-1},p_i }\right\Vert - \frac{L}{n-1} \right] \frac{\overset{\longrightarrow}{p_{i-1},p_i }}{ \left\Vert\overset{\longrightarrow}{p_{i-1},p_i }\right\Vert }.
  3. Si \left\Vert\overset{\longrightarrow}{p_{i+1},p_i }\right\Vert  > \frac{L}{n-1} alors a_i \longleftarrow a_i + k \left[ \left\Vert\overset{\longrightarrow}{p_{i+1},p_i }\right\Vert - \frac{L}{n-1} \right] \frac{\overset{\longrightarrow}{p_{i+1},p_i }}{ \left\Vert\overset{\longrightarrow}{p_{i+1},p_i }\right\Vert }.

La mise à jour des positions se fait en appliquant les lois de la mécanique :

\begin{array}{l} p_i \longleftarrow p_i + v_i dt \\ v_i \longleftarrow v_i + a_i dt \end{array}

Tant que l’algorithme n’a pas convergé, on retourne à la première étape. L’implémentation est réalisée dans le module corde.