mercredi 29 octobre 2014

Étude statique et dynamique : comment tenir compte de la masse d’un ressort

Cette étude a déjà été faite par de très nombreux auteurs, il ne s'agit pas d'une énième étude, mais d'utiliser les résultats établis par les différents auteurs pour réaliser des illustrations avec PSTricks. Le premier auteur sur le sujet est lord Rayleigh dans sa Theory of sound, §156, ainsi que l’indique S. Gagnebin dans son très instructif article “Comment tenir compte de la masse du ressort dans quelques cas simples d’équilibre et de mouvement ?” publié en 1932 dans le Bulletin de la Société Neuchâteloise des Sciences Naturelles :
 http://retro.seals.ch/digbib/view?pid=bsn-002:1932:57::306

Ce sont les résultats établis par S. Gagnebin, qui sont utilisés. J’ai simplement modifié quelques notations.
Le package pst-spring comprend différentes options pour pouvoir choisir le nombre de spires, la masse, la constante de raideur du ressort et sa longueur sans tension ainsi que l'aspect du ressort et de la masse suspendue. Elles sont détaillées dans le document :
http://manuel.luque.perso.neuf.fr/pst-spring/pst-spring-doc-essais.pdf
http://manuel.luque.perso.neuf.fr/pst-spring/pst-spring-doc-essais.tex
Les deux fichiers du package :
http://manuel.luque.perso.neuf.fr/pst-spring/pst-spring.sty
http://manuel.luque.perso.neuf.fr/pst-spring/pst-spring.tex

Les animations sont réalisées avec le package animate d'Alexander Grahn .





samedi 27 septembre 2014

Images vues dans une pyramide de verre

C'est, en quelque sorte, la suite de :
http://pstricks.blogspot.fr/2014/09/image-vue-travers-un-prisme.html

La base de la pyramide est un triangle équilatéral. Une arête a été supprimée et sur le plan ainsi créé l'artisan verrier a gravé une face de la tour Eiffel(ou plutôt ce qui y ressemble).


En regardant à travers la face opposé on voit une tour Eiffel en 3D dans une fausse perspective. L'artiste a habilement utilisé la réflexion totale sur les 2 autres faces pour créer par un effet de double miroir une image en 3D dont l'aspect est très réussi.
Je n'ai pas réalisé de simulation avec POV-Ray ni avec PSTricks, car la difficulté de ces deux projets me fait beaucoup hésiter. Si l'un d'entre-vous, amis lecteurs, se lance dans l'une ou l'autre des réalisations, faites moi signe...

mercredi 24 septembre 2014

Image vue à travers un prisme

On place un prisme droit de verre dont la base est un triangle équilatéral sur une surface plane et on dirige son regard vers l’une des faces (1), bien dans l’axe de symétrie.
On écrit un texte sur une feuille transparente ou blanche et on colle ce texte sur l’une des 2 autres faces verticales.


Voici le texte dans la bonne position avant de le fixer sur le prisme, le cadre blanc est très exactement aux dimensions de la face notée(2).


Le prisme étant positionné, on s’aperçoit que le texte n’est plus visible, mais qu’une image du texte écrit de droite à gauche est visible de l’autre côté. On ne voit, en réalité qu’une partie du texte si celui est trop long.

Cette image est la symétrique du texte par rapport à la troisième face(3). La partie visible est limitée au cadre de la face (1). La base étant un triangle équilatéral, l’image se trouve dans un plan parallèle à la face (1).

L’objet(le texte) est représenté par un flèche en bleu. (BC) est la face (1), (AC) et (AB) respectivement les faces (2) et (3).
Soit n l’indice du verre. L’angle limite λ est donné par la relation :
Pour n = 1.5, λ =42o. Aucun rayon réfracté par la face (2) ne peut ressortir perpendiculairement à la face (1), car le rayon réfracté par la face (2) ferait un angle de réfraction à l’angle limite. En conséquence l’observateur placé devant la face (1) ne peut pas voir le texte placé devant la face (2).
Pour qu’un rayon ressorte perpendiculairement à la face (1) en direction de l’observateur, il doit subir une réflexion sur la face (3). On voit que l’angle de réflexion vaut 60o, supérieur à l’angle limite : il y a donc réflexion totale. Ces rayons qui sont totalement réfléchis par la face (3) proviennent de la face (2) perpendiculairement à celle-ci. La face (3) se comportant comme un miroir, l’observateur voit donc l’image du texte dans ce miroir, elle est symétrique du texte part rapport à la face (3).

POV-Ray possède aussi des grandes capacités pour les simulations de phénomènes optiques, on peut donc l’utiliser pour illustrer ce phénomène. Voici 2 exemples :

Dans le deuxième exemple, on fait varier l'indice de réfraction de 1 à 1.5 et inversement.


Tous les fichiers sont dans ce répertoire :
http://manuel.luque.perso.neuf.fr/Prisme/

Remarque : d’autres exemples avaient déjà été traités en parallèle avec PSTricks comme :
http://pstricks.blogspot.fr/2011/12/le-pentaprisme-etude-optique-et.html
http://pstricks.blogspot.fr/2011/12/dispersion-par-un-prisme-simulation.html
http://melusine.eu.org/syracuse/pstricks/pc/pst-prisme/
http://melusine.eu.org/syracuse/pstricks/pst-caustic/

lundi 15 septembre 2014

Ballet de pendules(pendulum waves) en 3D avec l'ombre des pendules


 Les fichiers :
http://manuel.luque.perso.neuf.fr/PendulumWaves/pendulumWaves3D-v3.tex
http://manuel.luque.perso.neuf.fr/PendulumWaves/pendulumWaves3D-v3.pdf

% Le listing :

\documentclass[10]{article}
\usepackage{pst-solides3d}
\usepackage{animate}
\def\macrosPSPendulumWaves{
    /TabLongueursPendules [
         0 1 np 1 sub {/indicePendule exch def
         gp Gamma 2 Pi mul N0 indicePendule add mul div dup mul mul
         } for
         ] def
         /y0 0.02 def
/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def
    /TabAlpha0 [
    0 1 np 1 sub {/iP exch def
        y0 TabLongueursPendules iP get div asin
        } for
    ] def
    /TabZPendules [
    0 1 np 1 sub {/iP exch def
        TabLongueursPendules iP get
        TabAlpha0 iP get cos mul
        } for
    ] def
%    /ti 5 def
    /TabAlphan {[
     0 1 np 1 sub {/iP exch def
        /Alpha TabAlpha0 iP get def
        /Omega 360 Gamma N0 iP add div div def
         Alpha Omega ti mul cos mul
        } for
    ] }def }%
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% la macro \psRotIIID
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Rotation autour d'un axe
%\define@key[psset]{pst-solides3d}{angle}{\def\psk@solides@angle{#1 }}% rotation autour de l'axe en degres
%#1 = angle de rotation
%\psRotIIID[solid=...]{angle}(x,y,z)
% (x,y,z) sont les coordonnées du solide comme pour \psSolid[..](x,y,z)
% les coordonnées du vecteur axe sont données par les coordonnées de
% 2 points avec l'option :
% base=x1 y1 z1 x2 y2 z2\def\psRotIIID{\pst@object{psRotIIID}}
\def\psRotIIID@i#1(#2,#3,#4){{%
  \pst@killglue%
  \use@par%
\addto@pscode{
    \tx@optionssolides
    SolidesDict begin
    /cosT {#1 cos} bind def
    /sinT {#1 sin} bind def
     base aload pop
       /f_ exch def
       /e_ exch def
       /d_ exch def
       /c_ exch def
       /b_ exch def
       /a_ exch def
       /u' {d_ a_ sub } bind def
       /v' {e_ b_ sub } bind def
       /w' {f_ c_ sub } bind def
       u' v' w' unitaire3d
       /w_ exch def /v_ exch def /u_ exch def
% end} def
/Rotation3D {
4 dict begin
   /M defpoint3d % on récupère les coordonnées
   M /z exch def
     /y exch def
     /x exch def
%   AXE
   a_ v_ dup mul w_ dup mul add mul
   u_
   b_ v_ mul c_ w_ mul add u_ x mul sub v_ y mul sub w_ z mul sub
   mul
   sub
   1 cosT sub mul
   x cosT mul add
   c_ v_ mul neg b_ w_ mul add w_ y mul sub v_ z mul add sinT mul add % x'
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   b_ u_ dup mul w_ dup mul add mul
   v_
   a_ u_ mul c_ w_ mul add u_ x mul sub v_ y mul sub w_ z mul sub
   mul
   sub
   1 cosT sub mul
   y cosT mul add
   c_ u_ mul a_ w_ mul sub w_ x mul add u_ z mul sub sinT mul add  % y'
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   c_ u_ dup mul v_ dup mul add mul
   w_
   a_ u_ mul b_ v_ mul add u_ x mul sub v_ y mul sub w_ z mul sub
   mul
   sub
   1 cosT sub mul
   z cosT mul add
   b_ u_ mul neg a_ v_ mul add v_ x mul sub u_ y mul add sinT mul add %z'
end} def
    end}%
\psSolid[transform=Rotation3D](#2,#3,#4)
\composeSolid%
}\ignorespaces%
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% transformation d'un point
\def\psRotIIIDPoint{\pst@object{psRotIIIDPoint}}
\def\psRotIIIDPoint@i#1(#2,#3,#4)#5{{% coordonnees cartesiennes
  \pst@killglue%
  \use@par%
\pnode(!
    \tx@optionssolides
    SolidesDict begin
    /cosT {#1 cos} bind def
    /sinT {#1 sin} bind def
     base aload pop
       /f_ exch def
       /e_ exch def
       /d_ exch def
       /c_ exch def
       /b_ exch def
       /a_ exch def
       /u' {d_ a_ sub } bind def
       /v' {e_ b_ sub } bind def
       /w' {f_ c_ sub } bind def
       u' v' w' unitaire3d
       /w_ exch def /v_ exch def /u_ exch def
    #2 #3 #4
     /z_ exch def
     /y_ exch def
     /x_ exch def
   a_ v_ dup mul w_ dup mul add mul
   u_
   b_ v_ mul c_ w_ mul add u_ x_ mul sub v_ y_ mul sub w_ z_ mul sub
   mul
   sub
   1 cosT sub mul
   x_ cosT mul add
   c_ v_ mul neg b_ w_ mul add w_ y_ mul sub v_ z_ mul add sinT mul add % x'
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   b_ u_ dup mul w_ dup mul add mul
   v_
   a_ u_ mul c_ w_ mul add u_ x_ mul sub v_ y_ mul sub w_ z_ mul sub
   mul
   sub
   1 cosT sub mul
   y_ cosT mul add
   c_ u_ mul a_ w_ mul sub w_ x_ mul add u_ z_ mul sub sinT mul add  % y'
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   c_ u_ dup mul v_ dup mul add mul
   w_
   a_ u_ mul b_ v_ mul add u_ x_ mul sub v_ y_ mul sub w_ z_ mul sub
   mul
   sub
   1 cosT sub mul
   z_ cosT mul add
   b_ u_ mul neg a_ v_ mul add v_ x_ mul sub u_ y_ mul add sinT mul add %z'
   3dto2d cm_1 exch cm_1 exch
   end){#5}%
  }\ignorespaces}
\makeatother
% 15 septembre 2014
\begin{document}

\begin{center}
\def\nImages{201}%  images
\def\base{10 0 0 0 0 0 }%
\begin{animateinline}[controls,loop,%palindrome,
                     begin={\begin{pspicture}(-3,-8)(5,3)},%
                     end={\end{pspicture}}]{5}% 5 images/s
\multiframe{\nImages}{r=0.0+0.035}{%
\psset{viewpoint=25 200 20 rtp2xyz,lightsrc=75 150 20 rtp2xyz,Decran=12.5,unit=1}
\psframe*(-3,-8)(5,3)%
\psPolygonIIID[fillstyle=solid](19,-5,-15)(18,5,0)(18,5,0)(0,5,0)(-1,5,-15)(-1,-5,-15)
\psPolygonIIID[fillstyle=solid,fillcolor=yellow!20](19,-5,-15)(19,5,-15)(19,5,0)(19,-5,0)
\psPolygonIIID[fillstyle=solid,fillcolor=yellow!20](19,5,-15)(-1,5,-15)(-1,5,0)(19,5,0)
\psSolid[object=grille,base=-1 19 -5 5,ngrid=10](0,0,-15)%
\pstVerb{/ti \r\space def
            /Gamma 7 def
            /N0 10 def % nombre d'oscillations de n=0
            /np 10 def % nombre de pendules
            /gp 9.81 def % pesanteur
            /Pi 3.14159265359 def
            /di 2 def % distance entre 2 pendules en cm
            \macrosPSPendulumWaves
            /Lx {gp Gamma 2 Pi mul N0 t di div add mul div dup mul mul} def
            /alpha0 {y0 Lx div asin} def
            /Omega0 {360 Gamma N0 t di div add div div} def
            /alphax {alpha0 Omega0 ti mul cos mul} def%
            /Hh 0 def /Hs 1 def /Hb 1 def /color {Hh Hs Hb} def /dH 1 np div def}%
%\defFunction{Waves}(t){t}{Lx alphax sin mul 100 mul}{Lx alphax cos mul 100 mul neg}%{-15}%
%\psSolid[object=courbe,
%        r=0,
%        range=0 18,
%        linecolor=gray,
%        resolution=360,
%        function=Waves]%
\psset{solidmemory}%
\multido{\i=9+-1}{10}{%
\definecolor[ps]{macouleur}{hsb}{color}%
\pstVerb{
    /Ln TabLongueursPendules \i\space get 100 mul def
    /ANGLE TabAlphan \i\space get neg def
    }%
\psPoint(\i\space di mul,0,0){O}
\psRotIIIDPoint[base=\base,
    ]{ANGLE}(\i\space di mul,0,Ln neg){P}
\psline(O)(P)%\psdot(P)
\psRotIIID[object=sphere,r=0.9,ngrid=9 18,linewidth=0.01,
    name=A,
    fillcolor=macouleur,
    base=\base,
    ]{ANGLE}(\i\space di mul,0,Ln neg)
\pstVerb{/Hh Hh dH add def}%
\psSolid[object=plan,
   definition=equation,
   args={[0 0 1 15] 0},
   action=none,
   name=monplan]
   \psProjection[object=cercle,
    plan=monplan,
    args=\i\space di mul Ln ANGLE neg sin mul .9,linecolor=darkgray,fillcolor=darkgray,linewidth=0.01,fillstyle=solid,opacity=0.6,
    range=0 360]\composeSolid}%
\psLineIIID(-1,5,0)(-1,-5,0)(19,-5,0)
\psLineIIID(-1,-5,0)(-1,-5,-15)
\psLineIIID[linecolor=black,linewidth=0.1](-1,0,0)(19,0,0)%
    }%
\end{animateinline}
\end{center}

\end{document}

Rappel : quelques explications du phénomène et une référence avaient déjà été données dans un précédent article, elles sont dans le document :
http://manuel.luque.perso.neuf.fr/PendulumWaves/pspendulumwave-version-couleur.pdf
http://manuel.luque.perso.neuf.fr/PendulumWaves/pspendulumwave-version-couleur.tex

dimanche 14 septembre 2014

Ballet de pendules - Pendulum waves - 3D

Une version en 3D avec pst-solides3d.

Les fichiers :
http://manuel.luque.perso.neuf.fr/PendulumWaves/pendulumWaves3D.pdf
http://manuel.luque.perso.neuf.fr/PendulumWaves/pendulumWaves3D.tex

Avec un point de vue légèrement différent : viewpoint=75 200 20 rtp2xyz


Un autre point de vue :
\psset{viewpoint=20 200 20 rtp2xyz,lightsrc=75 200 20 rtp2xyz,Decran=10,unit=1}

Rappel : quelques explications du phénomène et une référence avaient déjà été données dans un précédent article, elles sont dans le document :
http://manuel.luque.perso.neuf.fr/PendulumWaves/pspendulumwave-version-couleur.pdf
http://manuel.luque.perso.neuf.fr/PendulumWaves/pspendulumwave-version-couleur.tex

lundi 8 septembre 2014

Ballet de pendules : l'animation seulement

Le listing du fichier source :

\documentclass[11pt]{article}
 \usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{animate}
\usepackage{pst-plot,pst-node,pst-tools}
\title{Ballet de pendules}
\date{08 septembre 2014}
\newcommand\Bille{
\pscircle[fillstyle=solid,linewidth=1.5\pslinewidth,fillcolor=macouleur](0,0){0.75}
\psarc(0,0){0.6}{-110}{90}
\psarc(0,0){0.45}{-90}{70}
\psarc(0,0){0.3}{-70}{60}}%
\newcommand\Pendule{
\psline(C)
\rput{!TabAlphan \i\space get}(C){\Bille}}%
\psset{dimen=middle}
\def\macrosPSPendulumWaves{
    /TabLongueursPendules [
         0 1 np 1 sub {/indicePendule exch def
         gp Gamma 2 Pi mul N0 indicePendule add mul div dup mul mul
         } for
         ] def
         /y0 0.03 def
/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def
    /TabAlpha0 [
    0 1 np 1 sub {/iP exch def
        y0 TabLongueursPendules iP get div asin
        } for
    ] def
    /TabZPendules [
    0 1 np 1 sub {/iP exch def
        TabLongueursPendules iP get
        TabAlpha0 iP get cos mul
        } for
    ] def
%    /ti 5 def
    /TabAlphan {[
     0 1 np 1 sub {/iP exch def
        /Alpha TabAlpha0 iP get def
        /Omega 360 Gamma N0 iP add div div def
         Alpha Omega ti mul cos mul
        } for
    ] }def }%
\begin{document}
\maketitle
\begin{center}
\psset{unit=0.75}
\def\nImages{401}%  images
\begin{animateinline}[controls,loop,%palindrome,
                     begin={\begin{pspicture}(-4.1,-26.1)(4.1,1.1)},%
                     end={\end{pspicture}}]{5}% 5 images/s
\multiframe{\nImages}{r=0.0+0.05}{%
\psframe[fillstyle=solid,fillcolor=yellow!20](-4,-26)(4,1)
\psgrid[subgriddiv=1,gridcolor=lightgray,griddots=10,gridlabels=0pt](-4,-26)(4,1)
\pstVerb{/Hh 0 def /Hs 1 def /Hb 1 def /color {Hh Hs Hb} def /dH 1 15 div def}%
\multido{\i=14+-1}{15}{%
\definecolor[ps]{macouleur}{hsb}{color}%
\pstVerb{/ti \r\space def
/Gamma 20 def
         /N0 20 def % nombre d'oscillations de n=0
         /np 15 def % nombre de pendules (np+1)
         /gp 9.81 def % pesanteur
         /Pi 3.14159265359 def
         /di 1 def % distance entre 2 pendules en cm
\macrosPSPendulumWaves}%
    \pnode(!TabLongueursPendules \i\space get dup TabAlphan \i\space get sin mul 100 mul exch
             TabAlphan \i\space get cos mul neg 100 mul
            ){C}
    \Pendule%
\pstVerb{/Hh Hh dH add def}}%
\rput(0,0.5){\textbf{t=\r\,s}}\psdot(0,0)
\pstVerb{
    /Lx {gp Gamma 2 Pi mul N0 t di div add mul div dup mul mul} def
    /alpha0 {y0 Lx div asin} def
    /alphax {alpha0 360 ti mul Gamma div N0 t di div add mul cos mul} def
    }%
\parametricplot[linecolor=red,linestyle=dotted,linewidth=3\pslinewidth,plotpoints=360]{0}{14}{Lx alphax sin mul 100 mul Lx alphax cos mul neg 100 mul  }%
}
\end{animateinline}
\end{center}
\end{document}