mardi 31 mai 2016

Le triangle de Reuleaux - 4 - Rotation du carré autour du triangle

Version 1

Version 2


Avec les codes ci-dessous, l'animation est incluse, après compilation, dans le pdf, grâce au package animate d'Alexander Grahn :

Version 1

\documentclass{article}
\usepackage[a4paper,hmargin=1cm]{geometry}
\usepackage{pst-plot,pstricks,pst-node}
\usepackage{animate}
\def\triangleReuleaux{%
\pnode(!-0.5 0){A}
\pnode(!3 sqrt 2 div 0.5 sub -0.5){B}
\pnode(!3 sqrt 2 div 0.5 sub 0.5){C}
\pnode(!3 sqrt 3 div 0.5 sub 0){G}
\pscustom[fillstyle=solid,fillcolor={[rgb]{0.5 0 0}},opacity=0.9,linecolor={[rgb]{0 0 0}}]{%
\psarc(A){1}{-30}{30}
\psarc(B){1}{90}{150}
\psarc(C){1}{210}{270}\closepath}}%
\def\FRAME{%
\psframe*[opacity=0.25](-.5,-.5)(.5,.5)%
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0 0.7}}]{%
\pspolygon(-0.5,0.5)(-0.5,-0.5)(0.5,-0.5)(0.5,0.5)
\moveto(-0.55,0.55)
\pspolygon(-0.55,0.55)(0.55,0.55)(0.55,-0.55)(-0.55,-0.55)}%
}
\def\CenterPath{%
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6+sqrt(3)/3-0.5|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6+sqrt(3)/3-0.5|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6+sqrt(3)/3-0.5|(3-3*cos(t)-sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6+sqrt(3)/3-0.5|(3-3*cos(t)-sqrt(3)*sin(t))/6}
}%
\pagestyle{empty}
\begin{document}

\begin{center}
\psset{unit=10,algebraic,linejoin=1}%
\begin{animateinline}[controls,loop,
                     begin={\begin{pspicture}(-0.9,-.9)(1.1,.9)},
                     end={\end{pspicture}}]{10}% 10 images/s
\multiframe{31}{iA=0+1}{%
\triangleReuleaux
\pstVerb{
/tan {dup sin exch cos div} bind def
% valable pour alpha entre 0 et 30
/alpha \iA\space def
alpha 0 eq {/alpha 0.0001 def} if
/xT alpha cos 0.5 sub def
/yT alpha sin def
/xK 3 sqrt 2 div 0.5 sub alpha sin sub def
/yK alpha cos 0.5 sub def
/bK yK xK alpha tan mul sub def
/bT yT xT alpha tan div add def
/xS alpha 2 mul sin 2 div bT bK sub mul def
/yS xS alpha tan mul bK add def
/SK xS xK sub dup mul yS yK sub dup mul add sqrt def
/xP xS xK xS sub SK div add def
/yP yS yK yS sub SK div add def
/ST xT xS sub dup mul yS yT sub dup mul add sqrt def
/xR xS xT xS sub ST div add def
/yR yS yT yS sub ST div add def
/xC xR xP add 2 div def
/yC yR yP add 2 div def
}%
\rput{!alpha }(!xC yC){\FRAME}
\pnode{C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\newframe
\multiframe{31}{iA=30+1}{%
\triangleReuleaux
\pstVerb{%
/tan {dup sin exch cos div} bind def
/xB 3 sqrt 2 div 0.5 sub def
/yB -0.5 def
% valable pour alpha entre 60 et 90
/alpha \iA\space def
/xT alpha sin neg xB add def
/yT alpha cos 0.5 sub def
/xK 3 sqrt -2 div 0.5 add alpha cos add neg def
/yK alpha sin neg 0.5 add def
/bK yK xK alpha tan div add def
/bT yT xT alpha tan mul sub def
/xP alpha 2 mul sin bK bT sub mul 2 div def
/yP xP alpha tan mul bT add def
/PK xK xP sub dup mul yK yP sub dup mul add sqrt def
/xR xP xK xP sub PK div add def
/yR yP yK yP sub PK div add def
/PT xT xP sub dup mul yT yP sub dup mul add sqrt def
/xQ xP xT xP sub PT div add def
/yQ yP yT yP sub PT div add def
/xC xR xQ add 2 div def
/yC yR yQ add 2 div def
}%
\rput{!alpha }(!xC yC){\FRAME}
\pnode(!xC yC){C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\newframe
\multiframe{31}{iA=60+1}{%
\triangleReuleaux
\pstVerb{
/Div {                         % control the division
  dup 0 eq { pop 0 lt { -1e30 }            % -y/0
                      {  1e30 } ifelse }    % +y/0
       { div } ifelse } def
/tan {dup sin exch cos Div} bind def
% valable pour alpha entre 60 et 90
/alpha \iA\space def
/xT alpha sin -0.5 add def
/yT alpha cos neg def
/xK alpha cos neg 3 sqrt 2 div add 0.5 sub def
/yK alpha sin neg 0.5 add def
/bK yK xK alpha tan div add def
/bT yT alpha tan xT mul sub def
/xP alpha 2 mul sin bK bT sub mul 2 div def
/yP xP alpha tan mul bT add def
/PK xP xK sub dup mul yP yK sub dup mul add sqrt def
/PT xP xT sub dup mul yP yT sub dup mul add sqrt def
/xQ xP xT xP sub PT div add def
/yQ yP yT yP sub PT div add def
/xR xP xK xP sub PK div add def
/yR yP yK yP sub PK div add def
/xC xR xQ add 2 div def
/yC yR yQ add 2 div def
}%
\ifnum\iA=90
\FRAME
\else
\rput{!alpha }(!xC yC){\FRAME}%
\fi
\pnode(!xC yC){C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\end{animateinline}
\end{center}
\end{document}


Version 2

\documentclass{article}
\usepackage[a4paper,hmargin=1cm]{geometry}
\usepackage{pst-plot,pstricks,pst-node}
\usepackage{animate}
\def\triangleReuleaux{%
\pnode(!-0.5 0){A}
\pnode(!3 sqrt 2 div 0.5 sub -0.5){B}
\pnode(!3 sqrt 2 div 0.5 sub 0.5){C}
\pnode(!3 sqrt 3 div 0.5 sub 0){G}
\pscustom[fillstyle=solid,fillcolor={[rgb]{0.5 0 0}},opacity=0.9,linecolor={[rgb]{0 0 0}}]{%
\psarc(A){1}{-30}{30}
\psarc(B){1}{90}{150}
\psarc(C){1}{210}{270}\closepath}}%
\def\FRAME{%
\psframe*[opacity=0.25](-.5,-.5)(.5,.5)%
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0 0.7}}]{%
\pspolygon(-0.5,0.5)(-0.5,-0.5)(0.5,-0.5)(0.5,0.5)
\moveto(-0.55,0.55)
\pspolygon(-0.55,0.55)(0.55,0.55)(0.55,-0.55)(-0.55,-0.55)}%
}
\def\CenterPath{%
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6+sqrt(3)/3-0.5|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6+sqrt(3)/3-0.5|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6+sqrt(3)/3-0.5|(3-3*cos(t)-sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=blue]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6+sqrt(3)/3-0.5|(3-3*cos(t)-sqrt(3)*sin(t))/6}
}%
\def\EnveloppeTriangleCadre{
\psframe*[linecolor=cyan!20,opacity=0.2](-.5,-.5)(.5,.5)
\pscustom[fillstyle=solid,fillcolor=blue,linestyle=none]{
\psparametricplot{1.047197}{0.5236}{(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub 2 div -0.5)(!1 3 sqrt sub neg 2 div -0.5)
\psparametricplot{0.5236}{1.047197}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!0.5 1 3 sqrt sub 2 div )(!0.5 1 3 sqrt sub neg 2 div)
\psparametricplot{1.047197}{0.5236}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub neg 2 div 0.5)(!1 3 sqrt sub 2 div 0.5)
\psparametricplot{0.5236}{1.047197}{(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!-0.5 1 3 sqrt sub neg 2 div)(!-0.5 1 3 sqrt sub 2 div)
\moveto(! -0.6 0.6)
\psline(-0.6,0.6)(0.6,0.6)(0.6,-0.6)(-0.6,-0.6)(-0.6,0.6)
\closepath}}
\pagestyle{empty}
\begin{document}

\begin{center}
\psset{unit=10,algebraic,linejoin=1}%
\begin{animateinline}[controls,loop,
                     begin={\begin{pspicture}(-0.9,-.9)(1.1,.9)},
                     end={\end{pspicture}}]{10}% 10 images/s
\multiframe{31}{iA=0+1}{%
\triangleReuleaux
\pstVerb{
/tan {dup sin exch cos div} bind def
% valable pour alpha entre 0 et 30
/alpha \iA\space def
alpha 0 eq {/alpha 0.0001 def} if
/xT alpha cos 0.5 sub def
/yT alpha sin def
/xK 3 sqrt 2 div 0.5 sub alpha sin sub def
/yK alpha cos 0.5 sub def
/bK yK xK alpha tan mul sub def
/bT yT xT alpha tan div add def
/xS alpha 2 mul sin 2 div bT bK sub mul def
/yS xS alpha tan mul bK add def
/SK xS xK sub dup mul yS yK sub dup mul add sqrt def
/xP xS xK xS sub SK div add def
/yP yS yK yS sub SK div add def
/ST xT xS sub dup mul yS yT sub dup mul add sqrt def
/xR xS xT xS sub ST div add def
/yR yS yT yS sub ST div add def
/xC xR xP add 2 div def
/yC yR yP add 2 div def
}%
\rput{!alpha }(!xC yC){\EnveloppeTriangleCadre}
\pnode{C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\newframe
\multiframe{31}{iA=30+1}{%
\triangleReuleaux
\pstVerb{%
/tan {dup sin exch cos div} bind def
/xB 3 sqrt 2 div 0.5 sub def
/yB -0.5 def
% valable pour alpha entre 60 et 90
/alpha \iA\space def
/xT alpha sin neg xB add def
/yT alpha cos 0.5 sub def
/xK 3 sqrt -2 div 0.5 add alpha cos add neg def
/yK alpha sin neg 0.5 add def
/bK yK xK alpha tan div add def
/bT yT xT alpha tan mul sub def
/xP alpha 2 mul sin bK bT sub mul 2 div def
/yP xP alpha tan mul bT add def
/PK xK xP sub dup mul yK yP sub dup mul add sqrt def
/xR xP xK xP sub PK div add def
/yR yP yK yP sub PK div add def
/PT xT xP sub dup mul yT yP sub dup mul add sqrt def
/xQ xP xT xP sub PT div add def
/yQ yP yT yP sub PT div add def
/xC xR xQ add 2 div def
/yC yR yQ add 2 div def
}%
\rput{!alpha }(!xC yC){\EnveloppeTriangleCadre}
\pnode(!xC yC){C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\newframe
\multiframe{31}{iA=60+1}{%
\triangleReuleaux
\pstVerb{
/Div {                         % control the division
  dup 0 eq { pop 0 lt { -1e30 }            % -y/0
                      {  1e30 } ifelse }    % +y/0
       { div } ifelse } def
/tan {dup sin exch cos Div} bind def
% valable pour alpha entre 60 et 90
/alpha \iA\space def
/xT alpha sin -0.5 add def
/yT alpha cos neg def
/xK alpha cos neg 3 sqrt 2 div add 0.5 sub def
/yK alpha sin neg 0.5 add def
/bK yK xK alpha tan div add def
/bT yT alpha tan xT mul sub def
/xP alpha 2 mul sin bK bT sub mul 2 div def
/yP xP alpha tan mul bT add def
/PK xP xK sub dup mul yP yK sub dup mul add sqrt def
/PT xP xT sub dup mul yP yT sub dup mul add sqrt def
/xQ xP xT xP sub PT div add def
/yQ yP yT yP sub PT div add def
/xR xP xK xP sub PK div add def
/yR yP yK yP sub PK div add def
/xC xR xQ add 2 div def
/yC yR yQ add 2 div def
}%
\ifnum\iA=90
\EnveloppeTriangleCadre
\else
\rput{!alpha }(!xC yC){\EnveloppeTriangleCadre}%
\fi
\pnode(!xC yC){C}\psdot[linecolor=blue](!xC yC)
\CenterPath}
\end{animateinline}
\end{center}
\end{document} 

vendredi 27 mai 2016

Le triangle de Reuleaux - 3 : une propriété du triangle curviligne équilatéral dans le carré

Dans son livre “Principes fondamentaux d’une théorie générale des machines” Franz Reuleaux donne quelques propriétés du triangle curviligne équilatéral tournant dans un carré, en voici une telle qu’il l’énonce(dans la traduction de A. Debize) :
« Nous allons chercher à déterminer les trajectoires polaires, en supposant d’abord que la figure extérieure soit un carré. Pour trouver celle de ces trajectoires qui correspond au carré ABCD (fig. 102), imaginons qu’on imprime au triangle curviligne une rotation autour du pôle O. Dans la position initiale représentée sur la figure, ce point est le milieu de PQ et se trouve situé sur l’axe de symétrie RQ du carré. Si nous supposons maintenant que la rotation se fasse à gauche, le sommet P du triangle curviligne glissera, en descendant, le long du côté AD, tandis que 1e point B marchera vers C, sur le côté DC. Les normales en P et R se coupant toujours à angle droit, il en résulte que le pôle est
le lieu géométrique du sommet d’un triangle rectangle, dont l’hypoténuse glisse, par ses extrémités, sur les côtés d’un angle droit ; ce pôle est aussi toujours l’un des sommets d’un rectangle PDBO, dont la diagonale est constante et égale à PR. Par conséquent, la trajectoire polaire est un arc de cercle, décrit du point D, comme centre, avec un rayon égal à PR=PQ=AB, c’est-a-dire à la longueur du côté du carré. Cet arc doit être pris comme trajectoire jusqu’au point 2, pour lequel la distance de B au point C se trouve précisément réduite à celle qui sépare P de A. A partir de cette position, le
glissement de la corde PQ commence à se produire sur les côtés BA et AD; la trajectoire polaire correspondante est l’arc de cercle 2.5, identique au précédent; on obtient ensuite l’arc 5.4  et, finalement, l’arc 4.1 ou 4.0. La trajectoire polaire du carré est, par conséquent, un carré curviligne, qui se compose de quatre arcs de cercle, décrits des sommets du carré primitif, comme centres, avec la longueur du côté de ce carré pour rayon. »
En voici une animation dont les images ont été calculées avec PSTricks.


Dans le fichier pdf suivant, l'animation a été réalisée avec la package animate d'Alexander Grahn :

Triangle-Reuleaux

Si vous compilez le fichier TeX, le fichier fig102.eps (inclus dans l'archive) suivant doit être placé dans le même répertoire :



samedi 21 mai 2016

Le triangle de Reuleaux - 2 (version trajet un peu plus long)




\documentclass{article}
\usepackage[a4paper,hmargin=1cm]{geometry}
\usepackage{pst-plot,pstricks,pst-node}
% manuel.luque27@gmail.com
\usepackage{animate}
\begin{document}

\begin{center}
\def\triangleReuleauxA{
\pnode(!0 3  sqrt 3 div){A}
\pnode(!-0.5 3 sqrt 6 div neg){B}
\pnode(!0.5 3 sqrt 6 div neg){C}
\pspolygon[showpoints,linecolor=magenta](A)(B)(C)
\psline(A)\psline(B)\psline(C)
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0.5 0}},opacity=0.6]{%
\psarc(A){1}{240}{300}
\psarc(B){1}{0}{60}
\psarc(C){1}{120}{180}\closepath}%
\psdot[linecolor=red](0,0)
}%
\def\triangleReuleauxB{
\pnode(!0 1){A}
\pnode(!3 sqrt -2 div 0.5){B}
\pnode(0,0){C}
\pnode(! 3 sqrt 6 div neg 0.5){G}
\pspolygon[showpoints,linecolor=magenta](A)(B)(C)
\psline(G)(A)\psline(G)(B)\psline(G)(C)
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0.5 0}},opacity=0.6]{
\psarc(A){1}{210}{270}
\psarc(B){1}{-30}{30}
\psarc(C){1}{90}{150}\closepath}
\psdot[linecolor=red](G)}%
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-4,-3)(14,4)},
                     end={\end{pspicture}}]{10}% 10 images/s
\multiframe{60}{i=30+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{/psxyG {/alpha exch def
         alpha DegtoRad alpha sin 3 sqrt div sub     % x
         3 sqrt 3 div alpha cos 3 sqrt div sub       % y
     } def
     /dGA 1 3 sqrt div def
     }%
\rput{!\i}(!\i\space neg psxyG){\psset{linecolor=blue}\triangleReuleauxA}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{\i\space neg}{t DegtoRad t sin 3 sqrt div sub 3 sqrt 3 div t cos 3 sqrt div sub}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{\i\space neg}{/xG t DegtoRad t sin 3 sqrt div sub def
                                                  /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                                   dGA t sin mul xG add
                                                   dGA t cos mul yG add}
}%
\newframe
\multiframe{61}{i=0+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{\i}(!xC1 yC1){\psset{linecolor=blue}\triangleReuleauxB}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{!\i\space 120 add}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{!\i\space 90 add}
}%
\newframe
\multiframe{61}{i=30+-1,I=0+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{/psxyG {/alpha exch def
         alpha DegtoRad alpha sin 3 sqrt div sub     % x
         3 sqrt 3 div alpha cos 3 sqrt div sub       % y
     } def
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{!\i}(!\i\space neg psxyG exch xC1 2 mul add exch){\psset{linecolor=blue}\triangleReuleauxA}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{\i\space neg}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{\i\space neg}{/xG t DegtoRad t sin 3 sqrt div sub def
                                          /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                           0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                           -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
}%
\newframe
\multiframe{61}{i=0+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{\i}(!xC1 3 mul yC1){\psset{linecolor=blue}\triangleReuleauxB}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 3 mul yC1){!d12}{120}{!\i\space 120 add}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                         /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                          0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                          -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
                                          }%
\newframe
\multiframe{61}{i=30+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{/psxyG {/alpha exch def
         alpha DegtoRad alpha sin 3 sqrt div sub     % x
         3 sqrt 3 div alpha cos 3 sqrt div sub       % y
     } def
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{!\i}(!\i\space neg psxyG exch xC1 4 mul add exch){\psset{linecolor=blue}\triangleReuleauxA}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 3 mul yC1){!d12}{120}{60}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                          /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                           0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                           -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
\parametricplot[linecolor=red]{-30}{\i\space neg}{t DegtoRad t sin 3 sqrt div sub xC1 4 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\parametricplot[linecolor=magenta]{30}{\i\space}{/xG t DegtoRad t sin 3 sqrt div sub def
                                          /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                          /xP1 0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add def
                                          /yP1 -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add def
                                          6 xC1 mul xP1 sub
                                          yP1
                                          }
}%
\newframe
\multiframe{61}{i=0+-1}{
\psset{unit=4}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(35,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(35,7)
                        }%
\pstVerb{
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{\i}(!xC1 5 mul yC1){\psset{linecolor=blue}\triangleReuleauxB}
%\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div 0.02 add)
%\psline(!-0.7 3  sqrt 3 div)(!2.8 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!3.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 3 mul yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub xC1 4 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 5 mul yC1){!d12}{120}{!\i\space 120 add}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                            /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                            0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                            -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
\parametricplot[linecolor=magenta]{30}{-30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                          /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                          /xP1 0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add def
                                          /yP1 -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add def
                                          6 xC1 mul xP1 sub
                                          yP1}
\psarcn[linecolor=magenta](!xC1 5 mul yC1){1}{150}{!\i\space 150 add}
}%
\end{animateinline}
\end{center}
\end{document}

vendredi 20 mai 2016

Le triangle de Reuleaux - 2



Si on fait rouler le triangle (curviligne) de Reuleaux entre 2 planchettes horizontales, on peut voir les différentes phases du mouvement : roulement sans glissement d'un côté sur le sol, puis pivotement autour du premier sommet en contact avec le sol, ensuite roulement sans glissement du côté suivant etc.

Voici une animation réalisée avec PSTricks, on y voit le mouvement du triangle de Reuleaux ainsi que ceux du centre de gravité et de l'un des sommets.

Le code suivant permet, après compilation, une animation dans le fichier pdf, pas à pas si on le souhaite, grâce au package animate d'Alexander Grahn. Ce code est très touffu et il faut certainement le retravailler pour en faire quelque chose de plus court.

\documentclass{article}
\usepackage[a4paper,hmargin=1cm]{geometry}
\usepackage{pst-plot,pstricks,pst-node}
% manuel.luque27@gmail.com
\usepackage{animate}
\begin{document}

\begin{center}
\def\triangleReuleauxA{
\pnode(!0 3  sqrt 3 div){A}
\pnode(!-0.5 3 sqrt 6 div neg){B}
\pnode(!0.5 3 sqrt 6 div neg){C}
\pspolygon[showpoints,linestyle=none,linecolor=magenta](A)(B)(C)
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0.5 0}},opacity=0.6]{%
\psarc(A){1}{240}{300}
\psarc(B){1}{0}{60}
\psarc(C){1}{120}{180}\closepath}%
\psdot[linecolor=red](0,0)
}%
\def\triangleReuleauxB{
\pnode(!0 1){A}
\pnode(!3 sqrt -2 div 0.5){B}
\pnode(0,0){C}
\pspolygon[showpoints,linestyle=none,linecolor=magenta](A)(B)(C)
\pscustom[fillstyle=solid,fillcolor={[rgb]{0 0.5 0}},opacity=0.6]{
\psarc(A){1}{210}{270}
\psarc(B){1}{-30}{30}
\psarc(C){1}{90}{150}\closepath}
\psdot[linecolor=red](! 3 sqrt 6 div neg 0.5)}%
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-4,-3)(13,4)},
                     end={\end{pspicture}}]{10}% 10 images/s
\multiframe{60}{i=30+-1}{
\psset{unit=5}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(25,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(25,7)
                        }%
\pstVerb{/psxyG {/alpha exch def
         alpha DegtoRad alpha sin 3 sqrt div sub     % x
         3 sqrt 3 div alpha cos 3 sqrt div sub       % y
     } def
     /dGA 1 3 sqrt div def
     }%
\rput{!\i}(!\i\space neg psxyG){\psset{linecolor=blue}\triangleReuleauxA}
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div 0.02 add)
\psline(!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{\i\space neg}{t DegtoRad t sin 3 sqrt div sub 3 sqrt 3 div t cos 3 sqrt div sub}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{\i\space neg}{/xG t DegtoRad t sin 3 sqrt div sub def
                                                  /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                                   dGA t sin mul xG add
                                                   dGA t cos mul yG add}
}%
\newframe
\multiframe{61}{i=0+-1}{
\psset{unit=5}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(25,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(25,7)
                        }%
\pstVerb{
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{\i}(!xC1 yC1){\psset{linecolor=blue}\triangleReuleauxB}
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div 0.02 add)
\psline(!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{!\i\space 120 add}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{!\i\space 90 add}
}%
\newframe
\multiframe{61}{i=30+-1,I=0+-1}{
\psset{unit=5}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(25,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(25,7)
                        }%
\pstVerb{/psxyG {/alpha exch def
         alpha DegtoRad alpha sin 3 sqrt div sub     % x
         3 sqrt 3 div alpha cos 3 sqrt div sub       % y
     } def
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{!\i}(!\i\space neg psxyG exch xC1 2 mul add exch){\psset{linecolor=blue}\triangleReuleauxA}
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div 0.02 add)
\psline(!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{\i\space neg}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{\i\space neg}{/xG t DegtoRad t sin 3 sqrt div sub def
                                          /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                           0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                           -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
}%
\newframe
\multiframe{61}{i=0+-1}{
\psset{unit=5}
\rput(0,-0.02264973070){%
      \psframe*[linecolor=yellow!20,unit=0.1](-7,-5)(25,7)
      \psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-7,-5)(25,7)
                        }%
\pstVerb{
     /xG1 3.14159 6 div 1 2 3 sqrt mul div sub def
     /yG1 3 sqrt 3 div 0.5 sub def
     /xC1 3.15159 6 div def
     /yC1 3 sqrt 3 div 1 sub def
     /d12 xC1 xG1 sub dup mul yC1 yG1 sub dup mul add sqrt def
     /dGA 1 3 sqrt div def
     }%
\rput{\i}(!xC1 3 mul yC1){\psset{linecolor=blue}\triangleReuleauxB}
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div 0.02 add)
\psline(!-0.7 3  sqrt 3 div)(!2.5 3  sqrt 3 div)
\psframe[linestyle=none,fillstyle=hlines,hatchwidth=.6pt,hatchsep=2pt](!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1.02 sub)
\psline(!-0.7 3  sqrt 3 div 1 sub)(!2.5 3 sqrt 3 div 1 sub)
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 yC1){!d12}{120}{60}
\parametricplot[linecolor=red]{-30}{30}{t DegtoRad t sin 3 sqrt div sub xC1 2 mul add  3 sqrt 3 div t cos 3 sqrt div sub}
\psarcn[linecolor=red](!xC1 3 mul yC1){!d12}{120}{!\i\space 120 add}
% lieu du sommet A
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                        /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                         dGA t sin mul xG add
                                         dGA t cos mul yG add}
\psarcn[linecolor=magenta](!xC1 yC1){1}{90}{30}
\parametricplot[linecolor=magenta]{-30}{30}{/xG t DegtoRad t sin 3 sqrt div sub def
                                         /yG 3 sqrt 3 div t cos 3 sqrt div sub def
                                          0.5 t cos mul 3 sqrt 6 div neg t sin mul add xG xC1 2 mul add add
                                          -0.5 t sin mul 3 sqrt 6 div neg t cos mul add yG add}
}%
\end{animateinline}
\end{center}
\end{document}




mercredi 18 mai 2016

Le triangle de Reuleaux - 1

Le triangle curviligne a été décrit par Franz Reuleaux dans son ouvrage : “Cinématique : Principes fondamentaux d’une théorie générale des machines” traduit par A. Debize en 1877. Ce livre a été numérisé par Google, il est librement disponible.
Le chapitre 25 est consacré aux figures de largeur constante, il ne comprend aucun calcul mais des raisonnements et des constructions géométriques, il débute ainsi :
« En partant du principe établi au § 21, nous sommes conduits, par voie de synthèse, à une série d’autres couples d’éléments, dont quelques-uns doivent faire ici l’objet d’un examen spécial. Si à une figure plane on mène deux tangentes parallèles AB et CD (fig. 99), la distance c de ces tangentes est la mesure de la dimension de la figure, dans la direction des normales d’appui. Cette dimension, qui constitue ce qu’on peut appeler la largeur de la figure, est, en général, une grandeur variable. Mais on peut imaginer des figures dans lesquelles la largeur soit constante, c’est-à-dire dans lesquelles tous les
couples de tangentes parallèles et formant appui, en sens contraires, aient la même distance; 1e cercle en fournit un exemple.
Si à une figure jouissant de cette propriété on mène deux couples de tangentes de ce genre, ces lignes toucheront la figure en quatre points et constitueront ainsi des appuis susceptibles d’empêcher toute translation, ainsi qu’il a été démontré au § 18. Mais nous savons également que ces appuis ne s’opposent pas à la rotation de la figure et que, de plus, cette rotation ne peut avoir lieu qu’autour d’un seul point; ce qui revient à dire que les normales aux quatre points d’appui se coupent toutes en un même point, ou que les normales d’appui coïncident, comme l’indique la fig. 100, où la normale en a passe par c et celle en d par b. Puisqu’en effet la largeur de la figure est constante, on doit en conclure que, pour tous les changements de position de cette figure, à l’intérieur du quadrilatère des tangentes, le système d’appuis subsiste, et que, par suite, d’après le § 2l, il doit exister un pôle unique. Il résulte également de là que les figures de largeur constante jouissent de cette propriété caractéristique que, sur le rayon de courbure de chaque élément du contour, se trouve situé, non-seulement le centre de courbure correspondant, mais encore celui de l’élément opposé. Les quatre tangentes limitent, dans le plan, un carré, ou, plus généralement, un losange ABCD. On peut conclure de là que toute figure de largeur constante est desmodromique dans un losange qui l’entoure, et que, par suite, elle peut servir à former, avec ce losange, un couple d’éléments. »


Il existe bien sûr de très nombreux schémas, animations en 2D et 3D sur internet et ce triangle et les polygones de Reuleaux ont été étudiés par de très nombreux auteurs : en voici deux, l’un d'Eric Weisstein parce qu’il y a beaucoup de renseignements théoriques sur les propriétés du triangle :
http://mathworld.wolfram.com/ReuleauxTriangle.html
et l’autre de Jean-Bernard Roux, parce ce qu’il contient des explications et des calculs très concrets pour faire tourner le triangle dans le carré. :
http://rouxjeanbernard.ch/AM/html/amch87.html

Le magazine ``Dossier pour la SCIENCE''  N°91 d'Avril-Juin 2016 contient un article intitulé ``De l'importance d'être constant... dans sa largeur'' où il est question du triangle de Reuleaux, des polygones de Reuleaux et de compléments mathématiques en rapport avec le titre de l'article.
http://www.pourlascience.fr/ewb_pages/d/dossierpourlascience.php

Voici deux adaptations réalisées avec PSTricks :
Le code ci-dessous permet une animation dans le fichier pdf grâce au package animate d'Alexander Grahn.
https://www.ctan.org/tex-archive/macros/latex/contrib/animate

\documentclass{article}
\usepackage{pst-plot,pstricks,pst-node,pst-text}
\usepackage{amsmath,amssymb}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage{animate}
\begin{document}
\begin{center}
\def\triangleReuleaux{
\pnode(!3 sqrt -3 div 0){A}
\pnode(!3 sqrt 6 div -0.5){B}
\pnode(!3 sqrt 6 div 0.5){C}
%\pspolygon(A)(B)(C)
%\psdots(A)(B)(C)
\pscustom[linestyle=none,fillstyle=solid,fillcolor={[rgb]{0.15 0.15 0.15}},opacity=0.7]{
\psarc(A){1}{-30}{30}
\psarc(B){1}{90}{150}
\psarc(C){1}{210}{270}\closepath}
\pscustom[linecolor=red]{%
\psarc(A){0.998}{-30}{30}
\psarc(B){0.998}{90}{150}
\psarc(C){0.998}{210}{270}\closepath}
\psdot[linecolor=red](!0 0)
}%
\def\CenterPath{
\psparametricplot[linecolor=red]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=red]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=red]{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6|(3-3*cos(t)-sqrt(3)*sin(t))/6}
\psparametricplot[linecolor=red]{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6|(3-3*cos(t)-sqrt(3)*sin(t))/6}
}%
\def\EnveloppeTriangleCadre{
\psframe*[linecolor=cyan!20](-.5,-.5)(.5,.5)
\pscustom[fillstyle=solid,fillcolor=blue,linestyle=none]{
\psparametricplot{1.047197}{0.5236}{(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub 2 div -0.5)(!1 3 sqrt sub neg 2 div -0.5)
\psparametricplot{0.5236}{1.047197}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!0.5 1 3 sqrt sub 2 div )(!0.5 1 3 sqrt sub neg 2 div)
\psparametricplot{1.047197}{0.5236}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub neg 2 div 0.5)(!1 3 sqrt sub 2 div 0.5)
\psparametricplot{0.5236}{1.047197}{(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!-0.5 1 3 sqrt sub neg 2 div)(!-0.5 1 3 sqrt sub 2 div)
\moveto(! -0.6 0.6)
\psline(-0.6,0.6)(0.6,0.6)(0.6,-0.6)(-0.6,-0.6)(-0.6,0.6)
\closepath}%
\psgrid[subgriddiv=0,gridcolor=blue,griddots=5,gridlabels=0pt,unit=0.1](-5,-5)(5,5)}
\psset{unit=10,algebraic,linejoin=1}%
\begin{animateinline}[controls,loop,
                     begin={\begin{pspicture}(-.7,-.7)(.7,.7)},
                     end={\end{pspicture}}]{20}% 20 images/s
\multiframe{30}{iA=60+-1,IA=0+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy1 {/alpha exch def
       -3 3 sqrt alpha cos mul add 3 alpha sin mul add 6 div % x
       -3 3 alpha cos mul add 3 sqrt alpha sin mul add 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy1){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=30+1,IA=-30+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy2 {/alpha exch def
       3 3 sqrt alpha cos mul sub -3 alpha sin mul add 6 div % x
       -3 3 alpha cos mul add 3 sqrt alpha sin mul add 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy2){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=60+-1,IA=-60+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy3 {/alpha exch def
       3 3 sqrt alpha cos mul sub -3 alpha sin mul add 6 div % x
       3 3 alpha cos mul sub 3 sqrt alpha sin mul sub 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy3){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=30+1,IA=30+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy4 {/alpha exch def
       -3 3 sqrt alpha cos mul add 3 alpha sin mul add 6 div % x
        3 3 alpha cos mul sub 3 sqrt alpha sin mul sub 6 div % y
       } def}%
\rput{\IA}(!\iA\space posxy4){\triangleReuleaux}\CenterPath}
\end{animateinline}
\end{center}
\newpage

\begin{center}
\font\bigpala=pplb at 0.5 cm
\def\triangleReuleaux{
\pnode(!3 sqrt -3 div 0){A}
\pnode(!3 sqrt 6 div -0.5){B}
\pnode(!3 sqrt 6 div 0.5){C}
%\pspolygon(A)(B)(C)
%\psdots(A)(B)(C)
%\pscircle(0,0){!3 sqrt 3 div}
\pscustom{
%\pscustom[linestyle=none,fillstyle=solid,fillcolor=gray!50!blue!50]{
\psarc(A){1}{-30}{30}
\psarc(B){1}{90}{150}
\psarc(C){1}{210}{270}\closepath}
\pstextpath[c]{\psarc[linestyle=none](A){0.9}{-30}{30}}{\bigpala Triangle de Reuleaux}
\pstextpath[c]{\psarc[linestyle=none](B){0.9}{90}{150}}{\bigpala Triangle de Reuleaux}
\pstextpath[c]{\psarc[linestyle=none](C){0.9}{210}{270}}{\bigpala Triangle de Reuleaux}
\psdot(!0 0)
}%
\def\CenterPath{
\psparametricplot{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6|(-3+3*cos(t)+sqrt(3)*sin(t))/6}
\psparametricplot{0.5236}{1.047197}{(3-sqrt(3)*cos(t)-3*sin(t))/6|(3-3*cos(t)-sqrt(3)*sin(t))/6}
\psparametricplot{0.5236}{1.047197}{(-3+sqrt(3)*cos(t)+3*sin(t))/6|(3-3*cos(t)-sqrt(3)*sin(t))/6}
}%
\def\EnveloppeTriangleCadre{
\pscustom{
\psparametricplot{1.047197}{0.5236}{(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub 2 div -0.5)(!1 3 sqrt sub neg 2 div -0.5)
\psparametricplot{0.5236}{1.047197}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!0.5 1 3 sqrt sub 2 div )(!0.5 1 3 sqrt sub neg 2 div)
\psparametricplot{1.047197}{0.5236}{-(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!1 3 sqrt sub neg 2 div 0.5)(!1 3 sqrt sub 2 div 0.5)
\psparametricplot{0.5236}{1.047197}{(1-cos(t)-sqrt(3)*sin(t))*0.5|-(1-sin(t)-sqrt(3)*cos(t))*0.5}
\psline(!-0.5 1 3 sqrt sub neg 2 div)(!-0.5 1 3 sqrt sub 2 div)
\moveto(! -0.6 0.6)
\psline(-0.6,0.6)(0.6,0.6)(0.6,-0.6)(-0.6,-0.6)(-0.6,0.6)
\closepath
}}
\psset{unit=10,algebraic,linejoin=1}%
\begin{animateinline}[controls,loop,
                     begin={\begin{pspicture}(-.7,-.7)(.7,.7)},
                     end={\end{pspicture}}]{20}% 20 images/s
\multiframe{30}{iA=60+-1,IA=0+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy1 {/alpha exch def
       -3 3 sqrt alpha cos mul add 3 alpha sin mul add 6 div % x
       -3 3 alpha cos mul add 3 sqrt alpha sin mul add 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy1){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=30+1,IA=-30+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy2 {/alpha exch def
       3 3 sqrt alpha cos mul sub -3 alpha sin mul add 6 div % x
       -3 3 alpha cos mul add 3 sqrt alpha sin mul add 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy2){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=60+-1,IA=-60+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy3 {/alpha exch def
       3 3 sqrt alpha cos mul sub -3 alpha sin mul add 6 div % x
       3 3 alpha cos mul sub 3 sqrt alpha sin mul sub 6 div % y
       } def}%
 \rput{\IA}(!\iA\space posxy3){\triangleReuleaux}\CenterPath}
\newframe
\multiframe{30}{iA=30+1,IA=-90+-1}{%
\EnveloppeTriangleCadre%
\pstVerb{%
/posxy4 {/alpha exch def
       -3 3 sqrt alpha cos mul add 3 alpha sin mul add 6 div % x
        3 3 alpha cos mul sub 3 sqrt alpha sin mul sub 6 div % y
       } def}%
\rput{\IA}(!\iA\space posxy4){\triangleReuleaux}\CenterPath}
\end{animateinline}
\end{center}
\end{document} 

mercredi 4 mai 2016

Représenter le spectre continu de la lumière visible avec le package pst-spectrum - version 2

Par rapport à la version précédente : pst-spectrum version 1
il y a maintenant la possibilité de choisir un certain nombre de longueurs d'onde avec l'option [lambda=...] pour afficher sur l'échelle du spectre la couleur correspondante ainsi que le code RGB de la couleur. Quelques exemples illustrant cette option :
\psCIEspectrum[gamma=1,begin=360,end=750,lambda=425 465 550 620](-7.6,-1)(8,1)

Le reste est sans changement : pst-spectrum.zip

dimanche 1 mai 2016

Représenter le spectre continu de la lumière visible avec le package pst-spectrum

2 mai 2016 :  Pour éviter des conflits avec le package pst-spectra, la commande a changé de nom et s'appelle : \psCIEspectrum.

Pour représenter le spectre de la décomposition de la lumière, nous avons, avec PSTricks, plusieurs packages à notre disposition : pst-spectra d’Arnaud Schmittbuhl, xcolor d’Uwe Kern ainsi qu’une commande de pstricks-add. Tous utilisent la même source un code fortran de Dan Bruton transposé en postscript ou TEX. J’en ai donné une version ici : spectre visible étendu. Cependant il est possible d’obtenir la représentation du spectre directement à partir des données de la Commission Internationale de l’Éclairage et nous avons le choix entre les données de (CIE 1931) et celles de (CIE1964). Ensuite il faut choisir un espace de couleurs, sRGB, Adobe etc, qui chacun donne une représentation sensiblement différente. Cependant, il est très peu raisonnable de penser arriver à reproduire un spectre obtenu par une méthode expérimentale, en effet les différents espaces de couleurs utilisent l’illuminant D65, celui-ci possède une température de couleur proximale voisine de 6500 K et correspond(Robert Sève : “Physique de la couleur” - Masson (1991) à un rayonnement solaire global typique par temps couvert. Expérimentalement on choisira de préférence un temps non couvert, il faudrait donc définir un autre illuminant et d’après Robert Sève : « On choisira des températures plus basses que 6500 K pour tenir compte d’un rayonnement solaire direct plus important[. . . ]». On peut aussi à partir de l’espace de travail choisi tenter une modélisation des valeurs de R, G et B, c’est certainement ce qu’a fait Dan Bruton, nous verrons cela dans la deuxième partie.
La commande \psCIEspectrum possède différentes options qui sont détaillées dans la documentation. Voici quelques exemples:
\psCIEspectrum[gamma=1,begin=360,end=750,ColorSpace=sRGB](-7.6,-1)(8,1)
\psCIEspectrum[gamma=1,begin=360,end=750,datas=CIE1964,ColorSpace=sRGB](-7.6,-1)(8,1)
\psCIEspectrum[gamma=1,begin=400,end=700,ColorSpace=sRGB](-6,-1)(6,1)
\psspectrumDB[gamma=0.8,begin=400,end=700](-6,-1)(6,1)
\psCIEspectrum[gamma=2.2,begin=400,end=700,ColorSpace=Adobe](-6,-1)(6,1)
\psCIEspectrum[gamma=1.8,begin=400,end=700,ColorSpace=ColorMatch](-6,-1)(6,1)
\psCIEspectrum[begin=400,end=700,ColorSpace=CIE](-6,-1)(6,1)
\psCIEspectrum[begin=400,end=700,ColorSpace=SMPTE](-6,-1)(6,1)
\psCIEspectrum[begin=400,end=700,ColorSpace=SMPTE,datas=CIE1964](-6,-1)(6,1)

Comparaison des proportions de R,Get B selon les modèles de Dan Burton et de l’un obtenu directement avec les données de CIE


Tous les fichiers sont dans l'archive : pst-spectrum.zip