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...
samedi 27 septembre 2014
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 :
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/
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 :
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 :
Pendulum-Waves
% 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 "pspendulumwave-version-couleur.pdf" dans le répertoire :
dimanche 14 septembre 2014
Ballet de pendules - Pendulum waves - 3D
Une version en 3D avec pst-solides3d.
Les fichiers :
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 :
Les fichiers :
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}
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}
\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}
dimanche 7 septembre 2014
samedi 6 septembre 2014
Ballet de pendules
Ce problème a été étudié par James A. Flaten et Kevin A. Parando dans un article intitulé “Pendulum waves : A lesson in aliasing”, paru en 2001 dans l’American Journal of Physics, Vol 69, N◦7.
http://www.physics.iitm.ac.in/~arul/PH1010/AJP000778PendulumWaves2.pdf
Nous avons une suite de n pendules simples situés, au départ, dans un même plan vertical et dont les longueurs vont en décroissant. L’ensemble des pendules est écarté, perpendiculairement au plan vertical initial, de leur position d’équilibre, de telle sorte qu’ils soient tous dans le même plan vertical parallèle au plan initial, puis ces pendules abandonnés à eux-mêmes se mettent à osciller chacun avec leur période propre. Les longueurs sont calculées de telle sorte que pour un cycle d’observation Γ, le pendule le plus long, d’indice n0, effectue sur cette durée un nombre entier d’oscillations N, le pendule le plus proche, d’indice n1, N + 1 oscillations, le suivant N + 2 oscillations etc.
Le document suivant, accompagné du fichier source, comprend une étude théorique ainsi que des schémas et une animation réalisée avec le package animate. Cependant, l'étude la plus complète est bien sûr celle réalisée par James A. Flaten et Kevin A. Parando.
Les schémas et animations suivants ont été réalisés pour Γ=10 s, le pendule plus long effectuant 10 oscillations. Le système comprenant 15 pendules. Voici le système avec les longueurs des pendules en m.
Il se pose ensuite le problème du déclenchement initial du mouvement de l’ensemble des pendules. Choisissons qu’à l’instant initial tous les pendules sont sur le même plan vertical parallèle à l’axe à une distance y0. Pour les maintenir dans cette position on peut envisager deux solutions. Une planchette dont la partie supérieure sera découpée à la même hauteur que les pendules, ainsi la planchette ne gênera pas les fils ou bien une planchette qui aura été fendue à la position de chaque pendule pour permettre le passage des fils. Voici par exemple, pour la première solution la forme, à l’échelle 1/2 que devra avoir la planchette, les points indiquant la position des pendules. Elle sera rabattue vers le sol à l’instant initial.
http://www.physics.iitm.ac.in/~arul/PH1010/AJP000778PendulumWaves2.pdf
Nous avons une suite de n pendules simples situés, au départ, dans un même plan vertical et dont les longueurs vont en décroissant. L’ensemble des pendules est écarté, perpendiculairement au plan vertical initial, de leur position d’équilibre, de telle sorte qu’ils soient tous dans le même plan vertical parallèle au plan initial, puis ces pendules abandonnés à eux-mêmes se mettent à osciller chacun avec leur période propre. Les longueurs sont calculées de telle sorte que pour un cycle d’observation Γ, le pendule le plus long, d’indice n0, effectue sur cette durée un nombre entier d’oscillations N, le pendule le plus proche, d’indice n1, N + 1 oscillations, le suivant N + 2 oscillations etc.
Le document suivant, accompagné du fichier source, comprend une étude théorique ainsi que des schémas et une animation réalisée avec le package animate. Cependant, l'étude la plus complète est bien sûr celle réalisée par James A. Flaten et Kevin A. Parando.
Les schémas et animations suivants ont été réalisés pour Γ=10 s, le pendule plus long effectuant 10 oscillations. Le système comprenant 15 pendules. Voici le système avec les longueurs des pendules en m.
lundi 1 septembre 2014
psSlinky : le ressort aux couleurs de l'arc-en-ciel fait le tour d'un carré
La compilation est hélas très(trop ?) longue, voici le fichier source :
psSlinky-exemples-2.tex
psSlinky-exemples-2.pdf
\documentclass[10pt]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage{lmodern}
%\usepackage[garamond]{mathdesign}
%\renewcommand{\ttdefault}{lmtt}
\usepackage{pst-solides3d,pst-plot}
\usepackage{animate}
\usepackage[colorlinks=true,dvips,urlcolor=red]{hyperref}
\definecolor{DarkBlue}{rgb}{0,0,.5}
\makeatletter
% Étienne Riga
% Date :1999/11/03
\newcount\r@pport \newdimen\r@ppord
\newcount\kslant \newdimen\kslantd
\def\ARC#1{\setbox0\hbox{$\m@th\displaystyle#1$}\kslant=\ht0
\divide\kslant by1000\multiply\kslant by\fontdimen1\textfont1
\divide\kslant by10000\kslantd=\kslant\fontdimen6\textfont1
\divide\kslantd by7750\kern\kslantd
\r@ppord=\wd0\multiply\r@ppord by100\divide\r@ppord by\ht0
\multiply\r@ppord by300\advance\r@ppord by\ht0
\pspicture(0,0)
% \parabola[linewidth=.3pt]{->}(0,1.05\ht0)(.5\wd0,1.15\r@ppord)
\parabola[linewidth=.3pt](0,1.05\ht0)(.5\wd0,1.15\r@ppord)
\endpspicture
\kern-\kslantd\box0}
% macro pour le ressort
\pst@addfams{pst-Slinky}
% style par défaut du ressort
\newpsstyle{Slinky}{ngrid=720 9,r=0.2,linecolor=blue,linewidth=.01,fillcolor=yellow}
% nombre de spires
\define@key[psset]{pst-Slinky}{N}{\def\psk@SlinkyN{#1 }}
% angle fixant le déploiement du ressort
\define@key[psset]{pst-Slinky}{alpha}{\def\psk@SlinkyAlpha{#1 }}
% rayon moyen du tore lorsque le ressort est en enroulé autour du demi-tore
\define@key[psset]{pst-Slinky}{R}{\def\psk@SlinkyR{#1 }}
% rayon des spires du ressort
\define@key[psset]{pst-Slinky}{rS}{\def\psk@Slinkyr{#1 }}
% direction de marche du ressort dans le plan xOy
% par défaut dans le sens des y>0
\define@key[psset]{pst-Slinky}{u}{\def\psk@Slinkyu{#1 }}
\define@key[psset]{pst-Slinky}{springstyle}{\def\psk@springstyle{#1}}
\psset{N=25,alpha=60,R=5,rS=1.5,u=0 1,springstyle=Slinky}
%
\def\psSlinky{\def\pst@par{}\pst@object{psSlinky}}
\def\psSlinky@i{\@ifnextchar({\psSlinky@do}{\psSlinky@do(0,0)}}
\def\psSlinky@do(#1){%
\begin@SpecialObj
\pst@@getcoor{#1}%
\pstVerb{%
/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
/Pi 3.14159265359 def
/deg {Pi mul 180 div} bind def
/rd {180 mul Pi div} bind def
/cm_1 {\pst@number\psunit div } bind def
\psk@Slinkyu /uy exch def /ux exch def
/Rotation ux uy Atan def % arctan def
\pst@coor /ty exch cm_1 def /tx exch cm_1 def % position du ressort au milieu
/R0 \psk@Slinkyr def % rayon des spires
/Ri \psk@SlinkyR def % rayon du demi-tore initial
/Lr Pi Ri mul def % longueur du ressort
%/Angle \psk@SlinkyAlpha def
\psk@SlinkyAlpha 90 eq {/Angle 90.05 def}{/Angle \psk@SlinkyAlpha def} ifelse
/Alpha0 Angle deg def % alpha en radians
Alpha0 rd 90 gt {
/Alpha Alpha0 Pi 2 div sub def
/Beta Alpha 2 mul def
/R1 Lr Beta div def
/yC R1 def
/angle2 Pi Beta sub def
/angle1 Pi def
}if
Alpha0 rd 90 lt {
/Alpha Alpha0 def
/Beta Pi 2 Alpha mul sub def
/R1 Lr Beta div def
/yC R1 neg def
/angle1 0 def
/angle2 Beta def
} if
/kN \psk@SlinkyN 2 Pi mul Beta div mul ceiling def % cvi 1 add def
}%
\defFunction[algebraic]{H}(t)
{R0*cos(kN*t)}
{(R1 + R0*sin(kN*t))*cos(t)+yC}
{(R1 + R0*sin(kN*t))*sin(t)}
%\defFunction[algebraic]{H'}(t)
% {-R0*kN*sin(kN*t)}
% {-(R1 + R0*sin(kN*t))*sin(t)+R0*kN*cos(kN*t)*cos(t)}
% {(R1 + R0*sin(kN*t))*cos(t)+R0*kN*cos(kN*t)*sin(t)}
\psSolid[object=courbe,RotZ=Rotation,
range=angle1 angle2,
style=\psk@springstyle,
function=H](tx,ty,0)%
\end@SpecialObj}%
\makeatother
%\pagestyle{empty}
\title{La marche d'un ressort}
\date{29 août 2014}
\begin{document}
\maketitle
\section{Principe}
C'est la visualisation de ce Gif animé :
\centerline{\url{http://dvdp.tumblr.com/post/71236566959/haters-gonna-hate-doo-pee-doo}}
qui m'a donné l'idée d'essayer de reproduire la marche d'un ressort. Mais vous connaissez certainement ce fameux ressort appelé ``\textit{Slinky}'', capable de descendre les marches d'un escalier ou de faire du surplace sur un tapis roulant :
\centerline{\url{https://www.youtube.com/watch?v=K6rLIQqhXW4}}
\centerline{\url{https://www.youtube.com/watch?v=Yy7CwYB7Ds0}}
La modélisation physique ou mathématique ne me semble pas évidente, a-t-elle déjà été faite ? Pour la marche du ressort sur le plan horizontal, j'ai adopté les règles suivantes, sans aucun rapport avec la réalité physique.
\begin{enumerate}
\item Le ressort est initialement posé sous forme d'un demi-tore sur le plan ;
\item on maintient une extrémité fixe, puis on lâche l'autre, le ressort se déploie jusqu'à la verticale et si on lui a donné une légère impulsion au départ se courbe dans l'autre sens et se courbe pour finir par former un demi-tore etc. La marche du ressort est en route.
\item On suppose que la longueur médiane du ressort reste constante et qu'il forme toujours une partie d'un tore.
\end{enumerate}
Calculons les paramètres du tore autour duquel s'enroulera le ressort. On se fixe le nombre de spires du ressort : $N$, le rayon des spires : $r$, et la longueur médiane du ressort : $L$. Lorsque le ressort se déploie, la ligne médiane est un arc du demi-cercle centré sur l'axe $y'Oy$, arc dont l'origine est l'extrémité maintenue fixe(temporairement).
Sur ce dessin on ne représente que la ligne médiane du ressort. En bleu le ressort entoure un demi-tore de cercle médian $\ARC{OA}$, de rayon : $R=\frac{L}{\pi}$. En rouge le ressort est déployé d'un angle $\alpha$. En vertu de l'hypothèse (3), les arcs $\ARC{OA_1}$ et $\ARC{OA}$ ont même longueur, ce qui permet de calculer la position du centre $O_1$, du nouveau demi-cercle, et son rayon $R_1$. Le ressort s'enroulant sur la portion de tore $\ARC{OA_1}$.
On repère la position du ressort par l'angle $\alpha$. $\beta=2\pi-\alpha$.
\[
\ARC{OA_1}=L=R_1\beta_1\Longrightarrow R_1=\frac{L}{\beta_1}\ ;\ y_{O_1}=-R_1
\]
Lorsque le ressort est complètement déployé, donc vertical en $O$, nous supposons qu'il se replie alors vers la droite jusqu'à enrouler à nouveau un demi-tore de rayon moyen $R$.
Lorsque $\alpha>\frac{\pi}{2}$, $\beta=2\alpha-\pi$.
\begin{center}
\scriptsize
\psset{unit=0.4,plotpoints=360}
\begin{pspicture}(-20,-3)(16,15)
\psframe(-20,-3)(16,15)
\pstVerb{% extrait de pst-math.pro
/Pi 3.14159265359 def
%
/DegToRad {Pi mul 180 div} bind def
/RadToDeg {180 mul Pi div} bind def
/Lr 4 Pi mul def
/Angle Pi def /Ri Lr Angle div def
/yC Lr Pi div Ri add def}%
\psarc(!Ri 0){!Ri}{0}{180}
\psarc[linecolor=blue](!Ri neg 0){!Ri}{0}{180}
\psdot(!Ri 0)\psdot(!Ri neg 0)
\psline{->}(-20,-0)(15,0)
\psline{->}(0,0)(!0 Lr 1 add)
\uput[l](!0 Lr 1 add){$z$}
\uput[d](15,0){$y$}
\def\Angle{30 }%
\pstVerb{
\Angle 90 eq {/angle 89.9 def}{/angle \Angle def} ifelse
/Alpha0 angle DegToRad def % alpha
Alpha0 RadToDeg 90 gt {
/Alpha Pi Alpha0 sub def
/Beta Alpha 2 mul def
/R1 Lr Pi Beta sub div def
/yC R1 def
/angle1 Beta RadToDeg def
/angle2 180 def
}if
Alpha0 RadToDeg 90 lt {
/Alpha Alpha0 def
/Beta Pi 2 Alpha mul sub def
/R1 Lr Beta div def
/yC R1 neg def
/angle1 0 def
/angle2 Beta RadToDeg def
} if
/Ri Lr Pi div def
}%
\pnode(!Beta RadToDeg dup cos R1 mul yC add exch sin R1 mul){B}
\pnode(!yC 0){C}
\psline[linestyle=dashed](B)
\psline[linestyle=dashed](C)(B)
\psarc[linestyle=dotted](C){!R1}{0}{180}
\psdot(C)
\psarc[linecolor=red](C){!R1}{!angle1}{!angle2}
\uput[d](0,0){$O$}
\uput[d](C){$O_1$}
\uput[u](B){$A_1$}
\uput[d](!Ri 2 mul neg 0){$A$}
\psarcn{->}(0,0){2}{180}{!180 angle sub}
\uput{0.1}[!180 angle 2 div sub](!180 angle 2 div sub dup cos 2 mul exch sin 2 mul){$\alpha_1$}
\psarc{->}(C){2}{0}{!Beta RadToDeg}
\uput{0.1}[!Beta RadToDeg 2 div](!Beta RadToDeg 2 div dup cos 2 mul yC add exch sin 2 mul){$\beta_1$}
\psline[linecolor=red](!0 Lr)
\end{pspicture}
\begin{pspicture}(-20,-3)(16,15)
\psframe(-20,-3)(16,15)
\pstVerb{% extrait de pst-math.pro
/Pi 3.14159265359 def
%
/DegToRad {Pi mul 180 div} bind def
/RadToDeg {180 mul Pi div} bind def
/Lr 4 Pi mul def
/Angle Pi def /Ri Lr Angle div def
/yC Lr Pi div Ri add def}%
\psarc[linecolor=blue](!Ri 0){!Ri}{0}{180}
\psarc(!Ri neg 0){!Ri}{0}{180}
\psdot(!Ri 0)\psdot(!Ri neg 0)
\psline{->}(-20,-0)(15,0)
\psline{->}(0,0)(!0 Lr 1 add)
\uput[l](!0 Lr 1 add){$z$}
\uput[d](15,0){$y$}
\def\Angle{140 }%
\pstVerb{
\Angle 90 eq {/angle 89.9 def}{/angle \Angle def} ifelse
/Alpha0 angle deg def % alpha
Alpha0 rd 90 gt {
/Alpha Pi Alpha0 sub def
/Beta Alpha 2 mul def
/R1 Lr Pi Beta sub div def
/yC R1 def
/k 25 2 Pi mul Pi Beta sub div mul cvi 1 add def
/angle1 Beta RadToDeg def
/angle2 180 def
}if
Alpha0 RadToDeg 90 lt {
/Alpha Alpha0 def
/Beta Pi 2 Alpha mul sub def
/R1 Lr Beta div def
/yC R1 neg def
/angle1 0 def
/angle2 Beta RadToDeg def
} if
/Ri Lr Pi div def
}%
\pnode(!Beta RadToDeg dup cos R1 mul yC add exch sin R1 mul){B}
\pnode(!yC 0){C}
\psline[linestyle=dashed](B)
\psline[linestyle=dashed](C)(B)
\psarc[linestyle=dotted](C){!R1}{0}{180}
\psdot(C)
\psarc[linecolor=red](C){!R1}{!angle1}{!angle2}
\uput[d](0,0){$O$}
\uput[d](C){$O_2$}
\uput[u](B){$A_2$}
\uput[d](!Ri 2 mul neg 0){$A$}
\psarcn{->}(0,0){2}{180}{!180 angle sub}
\uput{0.1}[!180 angle 2 div sub](!180 angle 2 div sub dup cos 2 mul exch sin 2 mul){$\alpha_2$}
\psarcn{->}(C){2}{180}{!Beta RadToDeg}
\uput{0.1}[!180 Beta RadToDeg 2 div sub](!180 Beta RadToDeg 2 div sub dup cos 2 mul yC add exch sin 2 mul){$\beta_2$}
\psline[linecolor=red](!0 Lr)
\end{pspicture}
\end{center}
\section{La commande \texttt{$\backslash${}psSlinky[options](x,y)}}
Elle comprend les options suivantes, ce sont les valeurs par défaut qui sont indiquées :
\begin{enumerate}
%\psset{N=25,alpha=60,R=5,rS=1.5,u=0 1}
\item \texttt{N=25} : nombre de spires du ressort ;
\item \texttt{rS=1.5} : rayon du ressort ;
\item \texttt{R=5} : rayon moyen du tore lorsque le ressort est en enroulé autour du demi-tore ;
\item \texttt{springstyle=Slinky} : le style du ressort.
\item \texttt{alpha=60} : angle fixant le déploiement du ressort (voir les dessins ci-dessus) ;
\item \texttt{u=0 1} : direction de la marche du ressort dans le plan $xOy$, ce sont les coordonnées du vecteur $(u_x,u_y)$.
\end{enumerate}
\verb+\psSlinky[options](x,y)+ : ce couple $(x,y)$ fixe la position du pied du ressort, par défaut~$(0,0)$ si rien n'est indiqué.
Le style du ressort est défini par défaut par :
\noindent \verb+\newpsstyle{Slinky}{ngrid=720 9,r=0.2,linecolor=blue,linewidth=.01,fillcolor=yellow}+ \texttt{r=0.2} étant le rayon du tube.
\section{Exemple : le tour d'un carré}
\begin{center}
% nouveau style du ressort
\newpsstyle{SlinkyA}{ngrid=1080 9,r=0,resolution=360,linecolor=DarkBlue,linewidth=.075,hue=0 1}
\newpsstyle{SlinkyRainbow}{ngrid=1080 9,r=0.1,resolution=360,linecolor=DarkBlue,linewidth=.01,hue=0 1,grid}
\psset{viewpoint=75 10 30 rtp2xyz,Decran=20,unit=0.75,springstyle=SlinkyRainbow,rS=1,lightsrc=viewpoint,subgriddiv=2}
\def\nImages{10}% images
\begin{animateinline}[controls,loop,%palindrome,
begin={\begin{pspicture}(-13,-6)(2,10)},%
end={\end{pspicture}}]{5}% 5 images/s
\multiframe{\nImages}{i=0+10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i=0+10,R=10,N=50](0,0)}
\multiframe{\nImages}{i=90+-10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.4pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=1 0](0,0)}
\multiframe{\nImages}{i=0+10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=-1 0](20,0)}
\multiframe{\nImages}{i=90+-10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=0 1](20,0)}
%
\multiframe{\nImages}{i=0+10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=0 -1](20,-20)}
%
\multiframe{\nImages}{i=90+-10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=-1 0](20,-20)}
\multiframe{\nImages}{i=0+10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=1 0](0,-20)}
\multiframe{\nImages}{i=90+-10}{%
\psgrid[subgridwidth=0.2pt,gridwidth=0.2pt,gridcolor=gray,gridlabels=0pt]%
\psframe(-13,-6)(2,10)
\psSolid[object=grille,base=-2 22 -22 2,linecolor=DarkBlue,grid=true,
linewidth=0.5\pslinewidth](0,0,0)%
\psSlinky[alpha=\i,R=10,N=50,u=0 -1](0,-20)}
\end{animateinline}
\end{center}
\end{document}
Inscription à :
Articles (Atom)