jeudi 16 juin 2016

Oscillateurs parallèles couplés par des ressorts n°7

Dans la page :
http://pstricks.blogspot.fr/2016/06/oscillateurs-paralleles-couples-par-des.html
je posais la question suivante :
« Est-ce qu'en choisissant des vitesses initiales non nulles, il serait possible d'obtenir un alignement oblique ? »
L'animation suivante :
http://pstricks.blogspot.fr/2016/06/oscillateurs-paralleles-couples-par-des_15.html
a montré que non.
Mais entre-temps, Nils Berglund m'a indiqué que si le ressort a une longueur au repos supérieure à la distance entre 2 tiges, alors on obtiendra un état final avec des directions obliques. Je me suis empressé de vérifier son affirmation car les équations restent formellement identiques, en voici le résultat :

Remarque : le Gif ne boucle pas, il faut donc rafraichir l'écran pour relancer l'animation (touche F5).

On a bien deux directions obliques pour des groupes de 2, 3 ressorts. Je remercie encore une fois Nils Berglund pour ses pertinentes suggestions.
Voici les fichiers LaTeX pour une animation réalisée avec le package animate et la résolution des équations avec le package pst-ode tous deux d'Alexander Grahn et obtenir les images du Gif ci-dessus.

Le listing :

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-ode,pst-ressort,pst-plot}
%\usepackage[method=ocg]{animate}
\usepackage{animate}
\title{Dix oscillateurs parallèles couplés par des ressorts}
% on introduit une force de frottement -f*vx
\date{16 juin 2016}
\author{Manuel Luque}
% manuel.luque27@gmail.com
\pagestyle{empty}
\begin{document}
%\maketitle
\def\mobileA{\pscustom[fillstyle=solid,fillcolor=red,unit=0.2]{\psline(-0.5,0.1)(-2,0.1)(-2,1)(2,1)(2,0.1)
\psarcn(0,0.1){0.5}{0}{180}
\moveto(-0.2,0.1)
\psarc(0,0.1){0.2}{180}{360}
\psline(0.2,0.1)(-0.2,0.1)}}
\def\mobileB{\psframe[fillstyle=solid,fillcolor=yellow,unit=0.2](-2,-0.5)(2,0.5)}
\def\mobileC{\pscustom[fillstyle=solid,fillcolor=red,unit=0.2]{\psline(0.5,-0.1)(2,-0.1)(2,-1)(-2,-1)(-2,-0.1)(-0.5,-0.1)
\psarcn(0,-0.1){0.5}{180}{0}
\moveto(0.2,-0.1)
\psarc(0,-0.1){0.2}{0}{180}
\psline(-0.2,-0.1)(0.2,-0.1)}}
% 10 mobiles
%  0  1   2   3   4    5   6   7   8   9  %  10   11  12   13   14   15   16   17  18   19
% x1  x2  x3  x4  x5  x6  x7  x8  x9  x10 %  x'1 x'2  x'3  x'4  x'5  x'6  x'7  x'8 x'9  x'10
\def\DixOscillateurs{x[10]|x[11]|x[12]|x[13]|x[14]|x[15]|x[16]|x[17]|x[18]|x[19]| %
                                                km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))-cf*x[10]|%
                                               -km*(x[1]-x[0])*(1-L0/sqrt(distance^2+(x[1]-x[0])^2))+km*(x[2]-x[1])*(1-L0/sqrt(distance^2+(x[2]-x[1])^2))-cf*x[11]|%
                                               -km*(x[2]-x[1])*(1-L0/sqrt(distance^2+(x[2]-x[1])^2))+km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2))-cf*x[12]|%
                                               -km*(x[3]-x[2])*(1-L0/sqrt(distance^2+(x[3]-x[2])^2))+km*(x[4]-x[3])*(1-L0/sqrt(distance^2+(x[4]-x[3])^2))-cf*x[13]|%
                                               -km*(x[4]-x[3])*(1-L0/sqrt(distance^2+(x[4]-x[3])^2))+km*(x[5]-x[4])*(1-L0/sqrt(distance^2+(x[5]-x[4])^2))-cf*x[14]|%
                                               -km*(x[5]-x[4])*(1-L0/sqrt(distance^2+(x[5]-x[4])^2))+km*(x[6]-x[5])*(1-L0/sqrt(distance^2+(x[6]-x[5])^2))-cf*x[15]|%
                                               -km*(x[6]-x[5])*(1-L0/sqrt(distance^2+(x[6]-x[5])^2))+km*(x[7]-x[6])*(1-L0/sqrt(distance^2+(x[7]-x[6])^2))-cf*x[16]|%
                                               -km*(x[7]-x[6])*(1-L0/sqrt(distance^2+(x[7]-x[6])^2))+km*(x[8]-x[7])*(1-L0/sqrt(distance^2+(x[8]-x[7])^2))-cf*x[17]|%
                                               -km*(x[8]-x[7])*(1-L0/sqrt(distance^2+(x[8]-x[7])^2))+km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2))-cf*x[18]|%
                                               -km*(x[9]-x[8])*(1-L0/sqrt(distance^2+(x[9]-x[8])^2))-cf*x[19]}%
\def\initCond{initCond}
\begin{center}
\def\nFrames{400}% 400 images
\psset[pst-ressort]{N=20,li=3,R=0.15,alpha=20,dl=0.4}%
\begin{animateinline}[controls,
                     begin={\begin{pspicture}(-8,-10)(8,10)},
                     end={\end{pspicture}}]{20}% 20 images/s
\pstVerb{
        /initCond {rrand srand
                   10 { rand 2147483647 div  6 mul -3 add } repeat
                   10 { rand 2147483647 div 10 mul -5 add } repeat
%                   10 { 0 } repeat
                   } def
%% k/m = km =4pi^2 = 39.4784176
         /km 39.4784176 def
         /L0 3 def
         /distance 2 def
% coefficient de frottement / masse = cf
         /cf 0.5 def
        }%
\pstODEsolve[algebraic]{mobile0123456789}{0 1 2 3 4 5 6 7 8 9}{0}{10}{\nFrames}{\initCond}{\DixOscillateurs}
\pstVerb{
/posX1 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i get} for
       ]def
/posX2 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 1 add get} for
       ]def
/posX3 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 2 add get} for
       ]def
/posX4 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 3 add get} for
       ]def
/posX5 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 4 add get} for
       ]def
/posX6 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 5 add get} for
       ]def
/posX7 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 6 add get} for
       ]def
/posX8 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 7 add get} for
       ]def
/posX9 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 8 add get} for
       ]def
/posX10 [0 10 [mobile0123456789] length 10 sub {/i exch def
            [mobile0123456789] i 9 add get} for
       ]def
}%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=cyan!20](-8,-10)(8,10)
\psline[linewidth=0.05](-8,9.1)(8,9.1)
\psline[linewidth=0.05](-8,7)(8,7)
\psline[linewidth=0.05](-8,5)(8,5)
\psline[linewidth=0.05](-8,3)(8,3)
\psline[linewidth=0.05](-8,1)(8,1)
\psline[linewidth=0.05](-8,-1)(8,-1)
\psline[linewidth=0.05](-8,-3)(8,-3)
\psline[linewidth=0.05](-8,-5)(8,-5)
\psline[linewidth=0.05](-8,-7)(8,-7)
\psline[linewidth=0.05](-8,-9.1)(8,-9.1)
\rput(!posX1 \i\space get 9){\mobileA}
\rput(!posX2 \i\space get 7){\mobileB}
\rput(!posX3 \i\space get 5){\mobileB}
\rput(!posX4 \i\space get 3){\mobileB}
\rput(!posX5 \i\space get 1){\mobileB}
\rput(!posX6 \i\space get -1){\mobileB}
\rput(!posX7 \i\space get -3){\mobileB}
\rput(!posX8 \i\space get -5){\mobileB}
\rput(!posX9 \i\space get -7){\mobileB}
\rput(!posX10 \i\space get -9){\mobileC}
\psRessort[linecolor=blue]{*-*}(!posX1 \i\space get 9)(!posX2 \i\space get 7)
\psRessort[linecolor=red]{*-*}(!posX2 \i\space get 7)(!posX3 \i\space get 5)
\psRessort[linecolor=green]{*-*}(!posX3 \i\space get 5)(!posX4 \i\space get 3)
\psRessort[linecolor=magenta]{*-*}(!posX4 \i\space get 3)(!posX5 \i\space get 1)
\psRessort[linecolor=cyan]{*-*}(!posX5 \i\space get 1)(!posX6 \i\space get -1)
\psRessort[linecolor=magenta]{*-*}(!posX6 \i\space get -1)(!posX7 \i\space get -3)
\psRessort[linecolor=green]{*-*}(!posX7 \i\space get -3)(!posX8 \i\space get -5)
\psRessort[linecolor=red]{*-*}(!posX8 \i\space get -5)(!posX9 \i\space get -7)
\psRessort[linecolor=blue]{*-*}(!posX9 \i\space get -7)(!posX10 \i\space get -9)
}
\end{animateinline}
\end{center}
\end{document}




Aucun commentaire:

Enregistrer un commentaire