vendredi 25 avril 2014

Thomas Söll : mise à jour de pst-perspective avec la projection d'un cylindre.

En voici 2 images extraites de la documentation :
 Le package est disponible sur le serveur du CTAN :

À toutes fins utiles, je rappelle l'adresse de Thomas : Thomas.Soell@onlinehome.de 

Thomas Söll propose 2 nouvelles macros pour pst-eucl

Pour le package pst-eucl de Dominique Rodriguez, Thomas Söll propose la possibilité d'afficher la distance entre 2 points ainsi que le marquage et la valeur d'un angle déterminé par 3 points. Le calcul est effectué par l'interpréteur postscript ainsi que l'affichage du résultat. Ce sont les macros :
\psSpaceV
\psAngleMark
Cette dernière ajoute donc l'option d'affichage de la valeur de l'angle à celles de la macro de pst-eucl : \pstMarkAngle.
Le listing ci-dessous à compiler : LaTeX->dvips->ps2pdf

\documentclass[border=10pt]{standalone}
\usepackage[distiller]{pstricks}
\usepackage{pst-eucl,pstricks-add}

\SpecialCoor%
\makeatletter
\pst@addfams{pst-eucl}
\define@key[psset]{pst-eucl}{DecimalN}{\def\psk@DecimalN{#1}}%
% Linecolor
\define@key[psset]{pst-eucl}{ArcColor}{\def\psk@ArcColor{#1}}%
% fillcolor for wedge
\define@key[psset]{pst-eucl}{WedgeColor}{\def\psk@WedgeColor{#1}}%
% fillcolor for wedge
\define@key[psset]{pst-eucl}{WedgeOpacity}{\def\psk@WedgeOpacity{#1}}%
% x Labelsep
\define@key[psset]{pst-eucl}{xLabelSep}{\def\psk@xLabelSep{#1}}%
% y Labelsep
\define@key[psset]{pst-eucl}{yLabelSep}{\def\psk@yLabelSep{#1}}%
% Fontsize Values
\define@key[psset]{pst-eucl}{FontSizeV}{\def\psk@FontSizeV{#1}}%
%----------------------------------------------------------------------
\define@boolkey[psset]{pst-eucl}[Pst@]{AngleValue}[false]{} % show angle value
\define@boolkey[psset]{pst-eucl}[Pst@]{AngleArc}[true]{} % show angle arcShowWedge
\define@boolkey[psset]{pst-eucl}[Pst@]{ShowWedge}[true]{} % show wedge
%---------------------------------------------------------------------
%   Default Parameter
\psset[pst-eucl]{%
DecimalN=2,ArcColor=black,WedgeColor=blue,WedgeOpacity=0.2,AngleValue=false,AngleArc=true,xLabelSep=0,yLabelSep=0,FontSizeV=8,ShowWedge=true
}
%------------- Distance of 2 points -----------------------
%---------------------------------------------------------------------
\def\psSpaceV{\pst@object{pstpsSpaceV}}%
\def\pstpsSpaceV@i(#1)(#2)#3#4{%
\begingroup%
\pst@killglue
\use@par
\pst@getcoor{#1}\pst@tempA
\pst@getcoor{#2}\pst@tempB
\pnode(! %
/Helvetica findfont \psk@FontSizeV\space scalefont setfont
/laenge {10 #4 exp mul round 10 #4 exp div 15 string cvs stringwidth } def
/Wert {10 #4 exp mul round 10 #4 exp div 15 string cvs dot2comma show } def
\pst@tempA \tx@UserCoor /y1 ED /x1 ED
\pst@tempB \tx@UserCoor /y2 ED /x2 ED
\pst@tempA /y3 ED /x3 ED
\pst@tempB /y4 ED /x4 ED
x3 x4 sub y3 y4 sub Pyth laenge /dx ED
x3 x4 add 2 div dx 2 div sub \psk@xLabelSep\space add y3 y4 add 2 div \psk@yLabelSep\space add
moveto %
x1 x2 sub y1 y2 sub Pyth Wert
x1 x2 add 2 div y1 y2 add 2 div){#3}
\endgroup
\ignorespaces
}
%--------------------------------------------------------------------
%------------- angle mark and calculate the value -----------
%---------------------------------------------------------------------
\def\psAngleMark{\@ifnextchar[\Pst@AngleMark{\Pst@AngleMark[]}}%
\def\Pst@AngleMark[#1](#2)(#3)(#4)#5{%
\def\pst@par{#1}%
\begingroup%
\pst@killglue
\use@par
\pst@getcoor{#2}\pst@tempA
\pst@getcoor{#3}\pst@tempB
\pst@getcoor{#4}\pst@tempC
\pst@Verb{%
\pst@tempA \tx@UserCoor /y1 ED /x1 ED
\pst@tempB \tx@UserCoor /y2 ED /x2 ED
\pst@tempC \tx@UserCoor /y3 ED /x3 ED
y1 y2 sub x1 x2 sub Atan neg /delta1 ED
y3 y2 sub x3 x2 sub Atan neg /delta2 ED
delta1 delta2 le {180 delta2 delta1 add 2 div neg add /WiM ED} {delta2 delta1 add 2 div neg /WiM ED} ifelse
}
\ifPst@ShowWedge
\pswedge[fillstyle=solid,fillcolor=\psk@WedgeColor,opacity=\psk@WedgeOpacity](#3){\psk@MarkAngleRadius}{! delta1}{! delta2}%
\else \fi
\ifPst@AngleArc
\psarc[linecolor=\psk@ArcColor](#3){\psk@MarkAngleRadius}{! delta1}{! delta2}%
\else \fi
%
\pnode(! %
/dec \psk@DecimalN\space def
/Helvetica findfont \psk@FontSizeV\space scalefont setfont
/s1 { /Symbol findfont \psk@FontSizeV\space scalefont setfont } bind def
/laenge {10 dec exp mul round 10 dec exp div 15 string cvs stringwidth } def
/WertZeigen {10 dec exp mul round 10 dec exp div 15 string cvs dot2comma show s1 (\string\260) show} def
\pst@tempA \tx@UserCoor /y1 ED /x1 ED
\pst@tempB \tx@UserCoor /y2 ED /x2 ED
\pst@tempC \tx@UserCoor /y3 ED /x3 ED
y1 y2 sub x1 x2 sub Atan neg /delta1 ED
y3 y2 sub x3 x2 sub Atan neg /delta2 ED
delta1 delta2 le {360 delta2 delta1 sub abs sub /WiWert ED} {delta2 delta1 sub abs /WiWert ED} ifelse
delta1 delta2 le {180 delta2 delta1 add 2 div neg add /WiM ED} {delta2 delta1 add 2 div neg /WiM ED} ifelse
\psk@MarkAngleRadius\space delta2 delta1 add 2 div PtoC \pst@tempB exch pop add /ym1 ED \pst@tempB pop add /xm1 ED
xm1 \psk@MarkAngleRadius\space WiM cos mul \pst@number\psxunit mul add \psk@xLabelSep\space add ym1 \psk@MarkAngleRadius\space WiM sin mul \pst@number\psxunit mul add \psk@yLabelSep\space add moveto %
\ifPst@AngleValue
WiWert WertZeigen
\else \fi
x2 0.8 WiM cos mul add y2 0.8 WiM sin mul add){#3-M}
\uput{\psk@LabelSep}[! WiM]{0}(#3){#5}
\endgroup
\ignorespaces
}
\makeatother

\begin{document}

\begin{pspicture}(-12,-8)(1,1)
\psgrid[gridlabels=0pt,subgriddiv=2,gridwidth=0.4pt,subgridwidth=0.2pt,gridcolor=black!60,subgridcolor=black!40]
\def\seitec{6}
\def\seitea{7}
\def\seiteb{8}
\psset{PointSymbol=none,linejoin=1,linewidth=0.4pt,PtNameMath=false,labelsep=0.07,MarkAngleRadius=1.1,DecimalN=1}
    \pstGeonode[PosAngle={90,90}](0,0){A}(6;190){B}
%    \pstGeonode[PosAngle={225,-75}](0,0){A}(\seitec;10){B}
    \psset{PointName=}
    \pstInterCC[RadiusA=\pstDistVal{\seiteb},RadiusB=\pstDistVal{\seitea},PosAngle=-90,PointNameA=C]{A}{}{B}{}{C}{C-}
    \pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{C}{}{A}{}{D-}{D}
    \pstInterLC[Radius=\pstDistAB{A}{C}]{C}{D}{C}{}{A'-}{A'}
    \pstInterCC[RadiusA=\pstDistAB{A}{B},RadiusB=\pstDistAB{B}{C}]{A'}{}{C}{}{B'}{B'-}
    \pstInterLL[PosAngle=90,PointName=default]{B'}{C}{A}{B}{E}
    \pspolygon(A)(B)(C)
    \pspolygon[fillstyle=solid,fillcolor=magenta,opacity=0.1](C)(E)(B)

\psAngleMark[ArcColor=blue,WedgeColor=blue!20,AngleValue=true,LabelSep=0.7,arrows=->](B)(A)(C){}
\psAngleMark[AngleValue=true,ArcColor=red,arrows=->,WedgeOpacity=0.6,WedgeColor=yellow,LabelSep=0.5](C)(B)(A){$\beta$}
\psAngleMark[LabelSep=0.7,WedgeColor=green,xLabelSep=-6,yLabelSep=-10](A)(C)(B){$\gamma$}
\psAngleMark[LabelSep=0.7,AngleArc=false,WedgeColor=green,arrows=->,xLabelSep=-15,yLabelSep=0](C)(E)(B){\color{green}$\gamma$}
\psAngleMark[AngleValue=true,MarkAngleRadius=1.0,LabelSep=0.5,ShowWedge=false,xLabelSep=-5,yLabelSep=7,arrows=->](E)(B)(C){}

\pcline[linestyle=none](A)(B)\nbput{\seitec}
\pcline[linestyle=none](C)(B)\naput{\seitea}
\psSpaceV[xLabelSep=-8,yLabelSep=4](B)(E){MW}{2}
\psSpaceV[FontSizeV=15,xLabelSep=-20](A)(C){MAC}{1}
\psSpaceV[xLabelSep=-17](E)(C){MEC}{1}
\end{pspicture}
\end{document}

mardi 8 avril 2014

Pendules couplés par un ressort

C’est un problème classique et largement présent sur le Web, cependant les calculs précis dans le cas général ne sont pas en général traités, une exception pour l’étude de Gilbert Gastebois qui comprend aussi le cas des petits angles avec l’étude des modes propres et des battements le tout complété par une superbe animation en java.

Cette étude est donc reprise dans ce document, tout au moins jusqu'à l'établissement des équations différentielles couplées, d'abord d'un point de vue théorique puis avec des animations réalisées avec le package animate, la résolution numérique étant confiée au package pst-ode, on ne limite donc pas aux petits angles.
Fichiers : 2-pendula-coupled-spring.pdf et 2-pendula-coupled-spring.tex dans :

Pour les animations elles concernent les modes propres et les battements. Fichiers : 2-pendula-coupled-spring-part2.pdf  et 2-pendula-coupled-spring-part2.tex dans :

Je rappelle que les animations sont intégrées dans le fichier pdf.

Voici deux conversions de ces animations au format Gif animé :
 L'animation précédente contient 50 images.
L'animation suivante, les battements, contient 500 images !!!. Il faudra donc attendre le temps nécessaire pour que le navigateur mette en cache ces images afin que l'animation soit fluide. fichier gif : 2pendulescouplesv2.gif  dans :



La troisième partie traite de différents exemples avec des points d’attache des ressorts différents.
Les fichiers de l'animation des pendules en opposition de phase sont dans le même répertoire que précédemment.


Mise à jour de "pst-perspective"

Thomas Söll a effectué une mise à jour de "pst-perspective" avec des exemples supplémentaires comme, par exemple, un magnifique pont (ou un aqueduc) à voûte dont les piles sont joliment dessinées.La documentation du package existe maintenant en anglais et en allemand.




Tous les nouveaux fichiers sont dans ce répertoire (mise à jour le 12 août 2017) :
Le fichier zippé contient tous les fichiers.

Thomas a aussi créé un exemple combinant pst-ressort et pst-perspective pour illustrer le phénomène d’induction et la loi de Lenz.


Cette version de pst-perspective est sur le serveur du CTAN.
http://www.ctan.org/pkg/pst-perspective


jeudi 3 avril 2014

Oscillateurs sur un banc à coussin d’air : une extrémité libre

Premier mode : les mobiles vibrent en phase.
Deuxième mode : les mobiles vibrent en opposition de phase :
Le listing qui après la séquence : LaTeX -> DVIPS -> ps2pdf donnera le fichier pdf contenant les 2 animations créées avec le package animate. Pour les packages pst-ode, animate et pst-ressort voir les messages précédents.

\documentclass[fleqn]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
\usepackage{pst-ode,multido,pst-ressort}
\usepackage{animate}
\usepackage{array,amsmath}
\def\Mobile{
    \pspolygon[fillstyle=solid,fillcolor=gray!50](-1,0.5)(1,0.5)(1,1.25)(0.9,1.25)(0.9,0.75)(-0.9,0.75)(-0.9,1.25)(-1,1.25)
    \pspolygon[fillstyle=solid,fillcolor=gray](-1,0)(1,0)(1,0.5)(-1,0.5)
}
\def\Rail{
    \psline[linewidth=0.1](-8,-0.5)(-8,1.25)
    \psframe[fillstyle=solid,fillcolor={[rgb]{0.75 0.75 0.5}}](-8,-0.5)(8,0.5)
    \multido{\n=-7.5+0.5}{31}{\psdot[dotstyle=o](\n,0.25)}
}
% x1    x2   x1'   x2'
% y[0] y[1]  y[2]  y[3]
\def\oscillateurs{y[2]|y[3]|(-2*y[0]+y[1])*O2|(-y[1]+y[0])*O2}
\def\initCond{x10 x20 v10 v20}
\SpecialCoor
\title{Oscillateurs sur un banc à coussin d'air}
\date{3 avril 2014}
\begin{document}
\maketitle
\begin{center}
\begin{pspicture}(-9,-1.5)(9,2)
\psset{li=4,N=10,dl=0.2,nS=15,alpha=30,R=0.25}
\Rail
\rput(-3,0){\Mobile}
\rput(3,0){\Mobile}
\psRessort[linewidth=0.02,linecolor=red]{o-o}(-8,1)(-4,1)
\psRessort[linewidth=0.02,linecolor=blue]{o-o}(-2,1)(2,1)
\psline{->}(-8,-1)(8,-1)
\psdots(-3,-1)(3,-1)
\uput[u](-3,-1){$O_1$}
\uput[u](3,-1){$O_2$}
\uput[u](8,-1){$x$}
\rput(-6,1.5){$k$}
\rput(0,1.5){$k$}
\uput[u](-3,1){$(m)$}
\uput[u](3,1){$(m)$}
\end{pspicture}
\end{center}
\[
\left\{
\begin{array}[m]{l}
 \ddot{x_1}=-\dfrac{2k}{m}x_1+\dfrac{k}{m}x_2\\[1em]
 \ddot{x_2}=\dfrac{k}{m}x_1-\dfrac{k}{m}x_2
\end{array}
\right.
\Longrightarrow
\left\{
\begin{array}[m]{l}
 \ddot{x_1}=-2\omega_0^2x_1+\omega_0^2x_2\\[1em]
 \ddot{x_2}=\hphantom{-2}\omega_0^2x_1-\omega_0^2x_2
\end{array}
\right.
\]
Valeurs propres $(\omega^2)$ et vecteurs propres :
\[
 \left[
    \begin {array}{c}
    \dfrac{3+\sqrt {5}}{2} {\omega_0}^{2}\\
    \noalign{\medskip}
    \dfrac{3-\sqrt {5}}{2} {\omega_0}^{2}
  \end {array}
   \right]
  \qquad
  \left[
    \begin {array}{cc}
    -\dfrac{\sqrt {5}+1}{2}&\dfrac{\sqrt {5}-1}{2}\\
    \noalign{\medskip}
    1&1
  \end {array}
   \right]
\]
\begin{verbatim}
\pstVerb{
    /k' 5 def   % constante de raideur (k)
    /m' 0.5 def % masse (m)
    /O2 k' m' div def % pulsation propre d'un oscillateur au carré
        }
% x1    x2   x1'   x2'
% y[0] y[1]  y[2]  y[3]
\def\oscillateurs{y[2]|y[3]|(-2*y[0]+y[1])*O2|(-y[1]+y[0])*O2}
\def\initCond{x10 x20 v10 v20}
\end{verbatim}
\newpage
Premier mode : les mobiles vibrent en phase.
\begin{center}
\psset{li=4,N=10,dl=0.2,nS=15,alpha=20,R=0.25}
\def\nFrames{50}% 50 images
\begin{animateinline}[controls,loop,%
                     begin={\begin{pspicture}(-9,-2)(9,2)},
                     end={\end{pspicture}}]{5}% 5 images/s
\pstVerb{% datas
    /k' 5 def   % constante de raideur (k)
    /m' 0.5 def % masse (m)
    /O2 k' m' div def % pulsation propre d'un oscillateur au carré
% mode 1
    /O1 k' m' div 3 5 sqrt sub 2 div mul sqrt def
    /T1 6.283185 O1 div def
    /x10 5 sqrt 1 sub 2 div 2 mul def
    /x20 1 2 mul def
    /v10 0 def
    /v20 0 def
        }%
% enregistrement des positions des 2 mobiles
\pstODEsolve[algebraic]{X12L}{0 1}{0}{T1}{\nFrames}{\initCond}{\oscillateurs}
\pstVerb{ % tableaux des positions des mobiles : 50 positions sur une période propre.
       /X12 [X12L] def
        /X1 [
         0 2 X12 length 2 sub {/ix1 exch def
         X12 ix1 get 3 sub % x1
         }for
         ] def
         /X2 [
         0 2 X12 length 2 sub {/ix2 exch def
         X12 ix2 1 add get 3 add % x2
         }for
         ] def
         }%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=yellow!20](-9,-1)(9,2)
\psgrid[subgriddiv=0,gridcolor=black,griddots=10,gridlabels=0pt](-9,-1)(9,2)
\Rail%
    \rput(! X1 \i\space get 0){\Mobile}
    \rput(! X2 \i\space get 0){\Mobile}
    \psRessort[linewidth=0.04,linecolor=red]{o-o}(-8,1)(! X1 \i\space get 1 sub 1)
    \psRessort[linewidth=0.04,linecolor=blue]{o-o}(! X1 \i\space get 1 add 1)(! X2 \i\space get 1 sub 1)
}%
\end{animateinline}
\end{center}


Deuxième mode : les mobiles vibrent en opposition de phase :

\begin{center}
\psset{li=4,N=10,dl=0.2,nS=15,alpha=20,R=0.25}
\def\nFrames{50}% 50 images
\begin{animateinline}[controls,loop,%
                     begin={\begin{pspicture}(-9,-1)(9,2)},
                     end={\end{pspicture}}]{10}% 10 images/s
\pstVerb{% datas
    /k' 5 def   % constante de raideur (k)
    /m' 0.5 def % masse (m)
    /O2 k' m' div def % pulsation propre d'un oscillateur au carré
    /T0 6.283185 m' div k' mul def
% mode 2
    /O1 k' m' div 3 5 sqrt add 2 div mul sqrt def
    /T1 6.283185 O1 div def
    /x10 5 sqrt 1 add 2 div neg def
    /x20 1 def
    /v10 0 def
    /v20 0 def
        }%
% enregistrement des positions des 2 mobiles
\pstODEsolve[algebraic]{X12S}{0 1}{0}{T1}{\nFrames}{\initCond}{\oscillateurs}
\pstVerb{ % tableaux des positions des mobiles : 50 positions sur une période propre.
       /X12 [X12S] def
        /X1 [
         0 2 X12 length 2 sub {/ix1 exch def
         X12 ix1 get 3 sub % x1
         }for
         ] def
         /X2 [
         0 2 X12 length 2 sub {/ix2 exch def
         X12 ix2 1 add get 3 add % x2
         }for
         ] def
         }%
\multiframe{\nFrames}{i=0+1}{%
\psframe*[linecolor=yellow!20](-9,-1)(9,2)
\psgrid[subgriddiv=0,gridcolor=black,griddots=10,gridlabels=0pt](-9,-1)(9,2)
\Rail%
    \rput(! X1 \i\space get 0){\Mobile}
    \rput(! X2 \i\space get 0){\Mobile}
    \psRessort[linewidth=0.04,linecolor=red]{o-o}(-8,1)(! X1 \i\space get 1 sub 1)
    \psRessort[linewidth=0.04,linecolor=blue]{o-o}(! X1 \i\space get 1 add 1)(! X2 \i\space get 1 sub 1)
}%
\end{animateinline}
\end{center}
\end{document}

lundi 31 mars 2014

Chaîne d'oscillateurs : partie 1

Dans cette première partie, on se limite à 3 mobiles et 4 ressorts.
Le système est représenté à l'équilibre. On peut supposer, sans que cela nuise à la généralité du problème, que les ressorts ne sont alors ni comprimés, ni tendus.
Le package pst-ode est utilisé pour la résolution numérique du système d'équations différentielles, le package pst-ressort pour le dessin des ressorts et le package animate pour les animations incluses dans le fichier pdf.
Pour le package pst-ode, les variables seront définies par :



 Nous étudions, dans ce document, un cas particulier : c’est une chaîne d’oscillateurs identiques :

Le calcul des modes propres est explicité dans le document :
chaine-oscillateurs-1.pdf
chaine-oscillateurs-1.texfichiers inclus dans le répertoire :
Les animations suivantes sont au format Gif. Les images ont été calculées avec PSTricks. Pour que l'animation soit fluide il faut attendre que le navigateur ait mis dans le cache les 50 images de l'animation.
Premier mode :
Deuxième mode :
Troisième mode :

Sur le document on trouvera une autre animation : propagation d'un ébranlement le long de la chaîne.

Les fichiers du package pst-ressort :
pst-ressort-package
Les packages pst-ode et animate d'Alexan­der Grahn :
http://www.ctan.org/pkg/pst-ode
http://www.ctan.org/pkg/animate

jeudi 27 mars 2014

Illustrations du couplage de deux oscillateurs avec les packages : pst-ressort, pst-ode et animate

Il ne s’agit pas d’un document sur l’étude des oscillateurs couplés, mais d’une suite
d’exemples réalisés avec PSTricks illustrant ce phénomène. Le système est constitué par deux mobiles auto-porteurs posés sur une table horizontale, chacun d’eux lié à un bord de la table par un ressort et reliés entre eux par un troisième ressort. Nous avons donc un système de deux oscillateurs (m1, k1) et (m2, k2) couplés par le ressort K.
Le système est représenté à l’équilibre. On peut supposer, sans que cela nuise à la généralité du problème, que les ressorts ne sont alors ni comprimés, ni tendus.
Si vous souhaitez des renseignements sur l’étude théorique, celle-ci est très bien faite par Gilbert Gastebois sur sa page personnelle :
http://gilbert.gastebois.pagesperso-orange.fr/java/oscillateur/couplage/theorie_couplage.htm

La résolution numérique du système d’équations différentielles est confiée au package pst-ode et l'animation incorporée au fichier pdf au package animate. Ces deux packages sont l’œuvre d’Alexander Grahn, ils pourraient être utilisés sans difficulté pour l’illustration du cas général.

Nous allons illustrer le cas de l’oscillateur symétrique m1 = m2 = m = 1 kg et k1 = k2 = 5N/m.
Le document source et le pdf concernant les oscillateurs couplés "oscillateurs-couples-v3.tex" et "oscillateurs-couples-v3.pdf" sont dans le répertoire :

D'autres exemples sont dans le répertoire cité.
pst-ode et animate sont sur le serveur du CTAN :
http://www.ctan.org/pkg/pst-ode
http://www.ctan.org/pkg/animate

Les animations suivantes sont au format Gif animé, (pour observer une animation fluide, il faut attendre que les images aient été mises en cache par le navigateur). Les images ont été calculées avec PSTricks. Suivant les conditions initiales :
Premier mode propre : l'oscillateur symétrique.

 Deuxième mode propre : l'oscillateur antisymétrique

 Les battements :