Pour conserver aux cercles qui bordent la ligne ondulée les rayons initiaux, il faut opérer comme pour le package “pst-guillochis” : exemple ci-dessous et les précédents :
La documentation a été mise à jour :
guillochis-cercles.tex
guillochis-cercles.pdf
Le listing pour ceux qui souhaitent le compiler suivant la séquence habituelle (Latex->dvips->ps2pdf)
\documentclass{article}
\usepackage[a4paper,hmargin=1.5cm]{geometry}
\usepackage{pst-plot,pst-slpe}
%\usepackage[garamond]{mathdesign}
\usepackage{amsmath}
\usepackage{animate}
\usepackage{url}
\psset{dimen=middle}
\title{Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks}
\date{10 mars 2016}
%\pagestyle{empty}
\newpsstyle{ball}{fillstyle=ccslope,slopebegin=white,slopecenter=0.4 0.6,linestyle=none}
\newpsstyle{pupil}{fillstyle=ccslope,slopeend={[rgb]{0 0.6 0}},slopebegin=white,slopecenter=0.2 0.6,linestyle=none}
\newpsstyle{center}{fillstyle=ccslope,slopeend={[rgb]{0 0.3 0}},slopebegin=white,slopecenter=0.4 0.6,linestyle=none}
\author{Manuel Luque}
\begin{document}
\maketitle
Dessiner une courbe périodique fermée comprise entre 2 cercles concentriques et tangente à ceux-ci est facile, voir le début des ``\textit{guillochis}'':
\centerline{\url{http://pstricks.blogspot.fr/}}
Le cas le plus simple est celui d'une \textit{sinusoïde} circulaire comprise entre 2 cercles concentriques. $R_1$ et $R_2$ sont les rayons des cercles avec $R_1
\[
\left\{
\begin{array}[m]{l}
x=\Big(a+b\cos\frac{p}{q}t\Big)\sin t\\
y=\Big(a+b\cos\frac{p}{q}t\Big)\cos t
\end{array}
\right.
\]
Si le 2 cercles ne sont plus concentriques, le problème est plus compliqué. Une astuce consiste à utiliser l'inversion, comme pour les cercles de Steiner :
\centerline{\url{http://pstricks.blogspot.fr/2015/08/chaine-de-cercles-de-steiner.html}}
\noindent<< \textit{Si deux courbes $(\mathcal{L}_1)$ et $(\mathcal{L}_2)$ sont tangentes en $M$, leurs inverses $(\mathcal{L'}_1)$ et $(\mathcal{L'}_2)$ sont tangentes en $M'$ inverse de $M$.}>>\footnote{\label{Maillard}Cours Maillard, tome : Géométrie | Mécanique, page 310, Hachette 1964.}
On peut choisir le centre d'inversion pour que le grand cercle $(\mathcal{C}_1)$ et son image $(\mathcal{C'}_1)$ aient le même rayon, mais le petit cercle $(\mathcal{C}_2)$ et son image $(\mathcal{C'}_2)$ auront des rayons différents :
\begin{center}
\begin{animateinline}[controls,loop,
begin={\begin{pspicture}(-7,-3)(7,3)},
end={\end{pspicture}}]{20}% 20 images/s
\multiframe{29}{r=0+2.5}{%
\pstVerb{
/R1 2 def % choix du rayon du cercle externe
/R2 1 def
/xC1 2 R1 mul neg def % position du centre du cercle (C1)
/k_ xC1 dup mul R1 dup mul sub neg def
%%--determiner le rayon du cercle image--%%
%%----et les coordonnées du centre-------%%
%% x y R xyR ==> x' y' R'
/xyR {
10 dict begin
/R exch def % rayon du cercle à inverser
/y exch def % abscisse du centre de (C)
/x exch def % ordonnée du centre de (C)
/d x dup mul y dup mul add sqrt def % d(OC)
% puissance de O/C
/p d dup mul R dup mul sub def
/beta R d div arcsin def
% vecteur unitaire suivant OC
/ux x d div def
/uy y d div def
% pied de la polaire H
% /xH p sqrt beta cos mul ux mul def
% /yH p sqrt beta cos mul uy mul def
p sqrt beta cos mul ux mul % xH
p sqrt beta cos mul uy mul % yH
Inverse % ==> xC' et yC'
k_ p div R mul abs % ==> R'
end
} def
% formule d'inversion : calcul des coordonnées du point image
%% x y Inverse ==> x' y'
/Inverse {
3 dict begin
/y exch def
/x exch def
/d2 x dup mul y dup mul add def
k_ x mul d2 div % x'
k_ y mul d2 div % y'
end
}def
/CoorA {xC1 0 R1 xyR pop} def
/CoorB {xC1 0 R2 xyR pop} def
/RA xC1 0 R1 xyR exch pop exch pop def
/RB xC1 0 R2 xyR exch pop exch pop def
/2pi 6.283185 def
/a1 0 def
/a2 0 def
/p1 17 def
/q1 5 def
/xF1 {
R1 R2 add 2 div
R1 R2 sub 2 div
p1 t mul q1 div \r\space add cos mul
add
t cos mul
2 R1 mul sub
} def
/yF1 {
R1 R2 add 2 div
R1 R2 sub 2 div
p1 t mul q1 div \r\space add cos mul
add
t sin mul
} def
/tableauInverses {
0 1 360 q1 mul {/t exch def
xF1 yF1 Inverse
} for
} def
/decal {\r\space DegtoRad} def
}%
\psparametricplot[plotpoints=720,algebraic]{0}{2pi q1 mul}{((R1+R2)/2+(R1-R2)/2*cos(p1*t/q1+decal))*cos(t)-2*R1|((R1+R2)/2+(R1-R2)/2*cos(p1*t/q1+decal))*sin(t)}
\listplot[plotstyle=curve,linecolor=red]{tableauInverses}
% les 2 cercles initiaux et leurs images
\pscircle[linecolor=blue](!xC1 0){!R1}
\pscircle[linecolor=blue](!xC1 0){!R2}
\psdot(!xC1 0)
%\psdot[dotstyle=+](!CoorB)
\psline(!CoorB pop -0.1 add 0)(!CoorB pop 0.1 add 0)
\psline(!CoorB pop -0.1 )(!CoorB pop 0.1)
\pscircle[linecolor=blue](!CoorA){!RA}
\pscircle[linecolor=blue](!CoorB){!RB}
\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]
}
\end{animateinline}
\end{center}
Pour conserver aux cercles qui bordent la ligne ondulée les rayons initiaux, il faut opérer comme pour le package ``pst-guillochis'', exemple et précédents :
\centerline{\url{http://pstricks.blogspot.fr/2016/03/pst-guillochis-exemple-avec-animation-n3.html}}
Mais pour faire plus simple, nous allons revenir aux coordonnées cartésiennes. Le grand cercle $(\mathcal{C}_1)$ sera centré en $O_1(0,0)$ et le centre du petit cercle $(\mathcal{C}_2)$ en $O_2(a,b)$. Les coordonnées de $O_2$ seront choies pour que $(\mathcal{C}_2)$ reste entièrement à l'intérieur de $(\mathcal{C}_1)$. Leurs équations respectives sont.
\[(\mathcal{C}_1)
\left\{
\begin{array}[m]{l}
x_1=R_1\cos t\\
y_1=R_1\sin t
\end{array}
\right.
\quad
(\mathcal{C}_2)
\left\{
\begin{array}[m]{l}
x_2=a+R_2\cos t\\
y_2=b+R_2\sin t
\end{array}
\right.
\]
Les équations paramétriques de l'ondulation comprise entre ces 2 cercles s'écrivent :
\[
\left\{
\begin{array}[m]{l}
x=\frac{x_1+x_2}{2}+\frac{x_1-x_2}{2}\cos\frac{p}{q}t\\
y=\frac{y_1+y_2}{2}+\frac{y_1-y_2}{2}\cos\frac{p}{q}t
\end{array}
\right.
\]
\begin{center}
\begin{pspicture}(-3,-3)(3,3)
\pstVerb{/R1 3 def /R2 1.5 def /p1 15 def /q1 7 def /2pi 6.283185 def /ax 0.75 def /by 0 def
}%
\psparametricplot[plotpoints=1040,linecolor=red,algebraic]{0}{2pi q1 mul}{(R1*cos(t)+(R2*cos(t)+ax))/2+(R1*cos(t)-(R2*cos(t)+ax))/2*cos(p1*t/q1)| % x
(R1*sin(t)+(R2*sin(t)+by))/2+(R1*sin(t)-(R2*sin(t)+by))/2*cos(p1*t/q1) % y
}
\pscircle{!R1}
\pscircle(0.75,0){!R2}
\rput(1,0){$p=15$\ ;\ $q=7$}
\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]
\end{pspicture}
\end{center}
\begin{center}
\begin{animateinline}[controls,palindrome,
begin={\begin{pspicture}(-4,-4)(4,4)},
end={\end{pspicture}}]{20}% 20 images/s
\multiframe{34}{r=-1.7+0.1}{%
\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]
\pstVerb{/R1 3 def /R2 1 def /p1 15 def /q1 7 def /2pi 6.283185 def /ax \r\space def /by 0 def
}%
\pscircle[style=ball]{!R1}
\psparametricplot[plotpoints=1040,linecolor=red,algebraic]{0}{2pi q1 mul}{(R1*cos(t)+(R2*cos(t)+ax))/2+(R1*cos(t)-(R2*cos(t)+ax))/2*cos(p1*t/q1)| % x
(R1*sin(t)+(R2*sin(t)+by))/2+(R1*sin(t)-(R2*sin(t)+by))/2*cos(p1*t/q1) % y
}
\pscircle[style=pupil](\r,0){!R2}\pscircle[style=center](\r,0){!R2 3 div}
}
\end{animateinline}
\end{center}
\end{document}
Aucun commentaire:
Enregistrer un commentaire