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 :

\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}

vendredi 29 août 2014

La marche d’un ressort : simulation

C’est la visualisation de ce Gif animé :

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é “Slinky”, capable de descendre les marches d’un escalier ou de faire du surplace sur un tapis roulant :

https://www.youtube.com/watch?v=K6rLIQqhXW4
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.
  1. Le ressort est initialement posé sous forme d’un demi-tore sur le plan ;
  2. 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.
  3. On suppose que la longueur médiane du ressort reste constante et qu’il forme toujours une partie d’un tore.
La suite avec les explications et la commande dédiée, est dans le document suivant :

http://manuel.luque.perso.neuf.fr/Slinky/psSlinky.pdf
http://manuel.luque.perso.neuf.fr/Slinky/psSlinky.tex






mardi 19 août 2014

Routes pour roues polygonales : version 2

Par rapport à la première version :
 http://pstricks.blogspot.fr/2014/08/routes-pour-roues-polygonales.html
j'ai rajouté un booléen permettant, éventuellement, de dessiner le lieu d'un sommet lors du roulement : LocusVertex=false.




Je rappelle que ces 2 dernières images font partie des animations incluses dans le fichier pdf.

http://manuel.luque.perso.neuf.fr/RoadsAndWheels/pst-PolygonalWheels-v2.pdf
http://manuel.luque.perso.neuf.fr/RoadsAndWheels/pst-PolygonalWheels-v2.tex



dimanche 17 août 2014

Routes pour roues polygonales

C’est par ce thème que Leon Hall et StanWagon ont débuté leur article “Roads and Wheels” publié en 1992, dans la revue “Mathematics Magazine”, vol.65.
http://web.mst.edu/~lmhall/Personal/RoadsWheels/RoadsWheels.pdf
C’est par celui-ci que je terminerai ce cycle consacré aux “Drôles de roues pour drôles de routes” comme l’intitule Alain Esculier sur sa page :
http://aesculier.fr/fichiersMaple/rouesdroles/rouesdroles.html
Leon Hall et Stan Wagon ont parfaitement traité ce cas dans leur article, ils démontrent que la route adaptée à une roue dont le contour est un polygone régulier est une suite d’arches de chaînette inversées.
Pour illustrer ce cas avec PSTricks, j’utilise la macro : \psPolygonalWheel[options](x), qui possède les options suivantes :
  • N=4 : nombre de côtés de la roue.
  • n=N : nombre d’arches de chaînette.
  • Un booléen : DrawRoad=true, qui permet de dessiner ou non la route. Cela permettra de ne dessiner qu’une fois la route si l’on souhaite représenter sur un même dessin plusieurs positions de la roue.
Ce sont les valeurs par défaut qui sont indiquées. Dans la parenthèse, on indique l’abscisse du centre de la roue.
Les animations réalisées avec la package animate” d'Alexander Grahn  sont incluses dans le pdf :

http://manuel.luque.perso.neuf.fr/RoadsAndWheels/pst-PolygonalWheels.pdf
http://manuel.luque.perso.neuf.fr/RoadsAndWheels/pst-PolygonalWheels.tex

En voici quelques images :





lundi 11 août 2014

Des roues pour des routes en dents de scie

Cet document termine la série d’articles consacrés aux roulettes rectilignes.
Je rappelle que Ian Stewart avait abordé ce problème, de façon amusante, dans un numéro de Pour la Science(no188 de juin 1993). L’article, intitulé Rolling Stones, est illustré de magnifiques schémas très explicites.
Alain Esculier, a pris pour point de départ cet article. Il l’avait intitulé “Drôles de roues pour drôles de routes” et avait calculé de superbes animations visibles sur sa page :
http://aesculier.fr/fichiersMaple/rouesdroles/rouesdroles.html
Sur ce sujet, Leon Hall et StanWagon ont publié, en 1992, dans la revue “Mathematics Magazine”, vol.65 un remarquable article très complet : “Roads and Wheels”, avec des exemples inédits, il est cité dans l’une des références de l’article de Ian Stewart  :
http://web.mst.edu/~lmhall/Personal/RoadsWheels/RoadsWheels.pdf
Les solutions proposées par Leon Hall et Stan Wagon étant les plus complètes, ce sont elles qui m’ont permis de calculer les animations des articles précédents portant sur ce sujet :
http://pstricks.blogspot.fr/2014/06/une-ellipse-comme-roue-et-la-route.html
http://pstricks.blogspot.fr/2014/06/des-roues-pour-des-routes-au-profil.html
http://pstricks.blogspot.fr/2014/07/roues-adaptees-aux-routes-profil.html
http://pstricks.blogspot.fr/2014/07/roues-adaptees-aux-routes-profil_15.html
http://pstricks.blogspot.fr/2014/07/approximation-dune-roue-polygonale-par.html
http://pstricks.blogspot.fr/2014/07/la-roue-est-donnee-par-un-systeme.html
http://pstricks.blogspot.fr/2014/07/roue-definie-par-son-equation-polaire.html
Leon hall et StanWagon ont, encore une fois, donné la solution au problème qui nous intéresse cette fois-ci. En voici une adaptation avec PSTricks qui est illustrée avec la commande \psSawtoothRoad[options](x).
Toutes les explications sur cette commande ainsi que les animations réalisées avec la package animate d'Alexander Grahn sont sur le fichier :
http://manuel.luque.perso.neuf.fr/RoadsAndWheels/Roues-pour-routes-en-dents-de-scie.pdf
http://manuel.luque.perso.neuf.fr/RoadsAndWheels/Roues-pour-routes-en-dents-de-scie.tex

Voici quelques animations au format  Gif, dont les images ont été calculées avec PSTricks :