mercredi 23 mars 2016

Spectre visible étendu

Le spectre continu affiché par le package pst-spectra d’Arnaud Schmittbuhl, est le résultat de la transcription en postscript du code fortran de Dan Bruton, tout comme celui de pstricks-add. Uwe Kern dans le package xcolor utilise la même source, mais les calculs sont effectués en TeX.
(voir le message précédent : Rayonnement du corps noir illustré avec PSTricks - version xcolor)

Cependant le spectre calculé par Uwe a une particularité très intéressante : à ses deux extrémités le spectre s’éteint progressivement, ce qui lui confère un rendu un peu plus réaliste. C’est donc le code d’Uwe que j’ai retranscrit en postscript pour l’incorporer dans un mini-package pst-xspectrum (le
x symbolise “extended spectrum”). Quelques exemples :
\psxspectrum(-5,-1)(5,2)
\psxspectrum[begin=300,end=900](-8,0)(8,1)

\psxspectrum[gamma=1.4](-6,0)(6,1)

 J'ai incorporé cette commande dans la nouvelle version de la loi de Planck :

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


mardi 22 mars 2016

Rayonnement du corps noir illustré avec PSTricks - version xcolor

Le package xcolor peut convertir une longueur d'onde exprimée en nm en code rgb, et l'auteur Uwe a ajouté l'extinction du spectre aux deux extrémités, le résultat affiché est plus réaliste. On peut toutefois signaler que le fichier dvi obtenu est 6 fois plus lourd que celui obtenu avec la commande \psspectrum du package pst-spectra  d'Arnaud Schmittbuhl et que la compilation est plus lente car tous les calculs sont faits avec TeX. Il serait intéressant de convertir en postscript les calculs que réalise Uwe pour la conversion wave -> hsb.

Les fichiers :
Loi-Planck-v3.tex
Loi-Planck-v3.pdf

Les images pour le Gif :
Gif-Loi-Planck-xcolor.tex

samedi 19 mars 2016

Rayonnement du corps noir illustré avec PSTricks


La courbe donnant l’émittance énergétique monochromatique du corps noir se construit aisément avec les outils de pst-plot. Comme il est d’usage, on y superpose le spectre visible grâce au package d’Arnaud Schmittbuhl : pst-spectra. Une commande supplémentaire \psTtoRGB permettra d'afficher la couleur émise par le rayonnement du corps noir en fonction de la température. Pour cela, j’ai converti en postscript le code de Tanner Helland. Cette commande comprend plusieurs paramètres décrits dans le document, en voici 2 exemples :

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

Loi-Planck-v2.tex
Loi-Planck-v2.pdf
Pour obtenir simplement les images nécessaires à la réalisation du Gif animé :
Gif

samedi 12 mars 2016

Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks : version colorée 2

Le listing, à compiler avec la séquence : LaTeX->dvips->ps2pdf

\documentclass{article}
\usepackage[paperwidth=8cm,paperheight=8cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-plot}
\psset{dimen=middle}
\pagestyle{empty}
\author{Manuel Luque}
\date{10 mars 2016}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Essai de Manuel Luque 19 février 2003
% transformé par Denis Girou le 25 février 2003
% révision le 14 septembre 2011
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\pst@addfams{pst-plothsb}

\define@key[psset]{pst-plothsb}{HueBegin}{% Between 0 and 1
\edef\PstParametricplotHSB@HueBegin{#1}}

\define@key[psset]{pst-plothsb}{HueEnd}{% Between 0 and 1
\edef\PstParametricplotHSB@HueEnd{#1}}

\newif\ifPst@HSB
\define@key[psset]{pst-plothsb}{HSB}[true]{\@nameuse{Pst@HSB#1}}

% Default values
\psset{HueBegin=0,HueEnd=1,HSB=true}

\def\parametricplotHSB{\pst@object{parametricplotHSB}}
\def\parametricplotHSB@i{\@ifnextchar[{\parametricplotHSB@do}{\parametricplotHSB@do[]}}
\def\parametricplotHSB@do[#1]#2#3#4{{%
\psset{#1}%
\begin@ClosedObj
\addto@pscode{%
/t  #2 def
/dt #3 t sub \psk@plotpoints\space div def
/t t dt sub def
/Counter 0 def
\psk@plotpoints {
  /t t dt add def
  /Counter Counter 1 add def
/F@pstplot \ifPst@algebraic (#4)
                    tx@AlgToPs begin AlgToPs end cvx
                 \else { #4 }
          \fi
   def
\ifPst@algebraic
   F@pstplot
    \else  #4
\fi
  \pst@number\psyunit mul exch
  \pst@number\psxunit mul exch
  1 Counter eq
    {moveto}                    % First point
    {\ifPst@HSB                 % Other points than the first one
       /PointY exch def
       /PointX exch def
       Counter \psk@plotpoints\space div
           \PstParametricplotHSB@HueEnd\space
             \PstParametricplotHSB@HueBegin\space sub mul
           \PstParametricplotHSB@HueBegin\space add
         1 1 sethsbcolor
       PointX PointY lineto
       stroke
       PointX PointY moveto
     \else
       lineto
     \fi} ifelse
    } repeat}% fin du code ps
\end@ClosedObj}} % fin de la commande PSTricks

\makeatother
\begin{document}
\begin{center}
\multido{\i=0+2}{180}{%
\begin{pspicture}(-4,-4)(4,4)
\pstVerb{/R1 3 def /R2 1 def /p1 17 def /q1 5 def /2pi 6.283185 def /theta \i\space def
         /ry theta sin 1.5 mul def /rx theta cos 1.5 mul def
         }%
%\pscircle{!R1}
\psframe*(-4,-4)(4,4)
\parametricplot[plotpoints=1040,linecolor=yellow!10,linewidth=0.25,algebraic]{0}{2pi q1 mul 0.1 add}{(R1*cos(t)+(R2*cos(t)+rx))/2+(R1*cos(t)-(R2*cos(t)+rx))/2*cos(p1*t/q1)| % x
                                                                          (R1*sin(t)+(R2*sin(t)+ry))/2+(R1*sin(t)-(R2*sin(t)+ry))/2*cos(p1*t/q1) % y
                          }
\parametricplotHSB[plotpoints=3600,algebraic,linewidth=2\pslinewidth,plotstyle=curve]{0}{2pi q1 mul 0.1 add}{(R1*cos(t)+(R2*cos(t)+rx))/2+(R1*cos(t)-(R2*cos(t)+rx))/2*cos(p1*t/q1)| % x
                                                                          (R1*sin(t)+(R2*sin(t)+ry))/2+(R1*sin(t)-(R2*sin(t)+ry))/2*cos(p1*t/q1) % y
                          }
%\pscircle(\r,0){!R2}
\end{pspicture}\newpage}
\end{center}
\end{document} 


Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks : version colorée

Cette version utilise la macro : \parametricplotHSB pour dessiner des courbes aux couleurs de l'arc-en-ciel :
http://pstricks.blogspot.fr/2011/09/vos-courbes-aux-couleurs-de-larc-en.html

Ci-dessous le listing permettant d'obtenir les images pour créer le Gif animé ci-dessus :

\documentclass{article}
\usepackage[paperwidth=8cm,paperheight=8cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-plot}
\psset{dimen=middle}
\pagestyle{empty}
\author{Manuel Luque}
\date{10 mars 2016}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Essai de Manuel Luque 19 février 2003
% transformé par Denis Girou le 25 février 2003
% révision le 14 septembre 2011
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\pst@addfams{pst-plothsb}

\define@key[psset]{pst-plothsb}{HueBegin}{% Between 0 and 1
\edef\PstParametricplotHSB@HueBegin{#1}}

\define@key[psset]{pst-plothsb}{HueEnd}{% Between 0 and 1
\edef\PstParametricplotHSB@HueEnd{#1}}

\newif\ifPst@HSB
\define@key[psset]{pst-plothsb}{HSB}[true]{\@nameuse{Pst@HSB#1}}

% Default values
\psset{HueBegin=0,HueEnd=1,HSB=true}

\def\parametricplotHSB{\pst@object{parametricplotHSB}}
\def\parametricplotHSB@i{\@ifnextchar[{\parametricplotHSB@do}{\parametricplotHSB@do[]}}
\def\parametricplotHSB@do[#1]#2#3#4{{%
\psset{#1}%
\begin@ClosedObj
\addto@pscode{%
/t  #2 def
/dt #3 t sub \psk@plotpoints\space div def
/t t dt sub def
/Counter 0 def
\psk@plotpoints {
  /t t dt add def
  /Counter Counter 1 add def
/F@pstplot \ifPst@algebraic (#4)
                    tx@AlgToPs begin AlgToPs end cvx
                 \else { #4 }
          \fi
   def
\ifPst@algebraic
   F@pstplot
    \else  #4
\fi
  \pst@number\psyunit mul exch
  \pst@number\psxunit mul exch
  1 Counter eq
    {moveto}                    % First point
    {\ifPst@HSB                 % Other points than the first one
       /PointY exch def
       /PointX exch def
       Counter \psk@plotpoints\space div
           \PstParametricplotHSB@HueEnd\space
             \PstParametricplotHSB@HueBegin\space sub mul
           \PstParametricplotHSB@HueBegin\space add
         1 1 sethsbcolor
       PointX PointY lineto
       stroke
       PointX PointY moveto
     \else
       lineto
     \fi} ifelse
    } repeat}% fin du code ps
\end@ClosedObj}} % fin de la commande PSTricks

\makeatother
\begin{document}
\begin{center}
\multido{\r=-1.8+0.1}{35}{%
\begin{pspicture}(-4,-4)(4,4)
\pstVerb{/R1 3 def /R2 1 def /p1 17 def /q1 5 def /2pi 6.283185 def /ax \r\space def /by 0 def
         }%
%\pscircle{!R1}
\psframe*(-4,-4)(4,4)
\parametricplot[plotpoints=1040,linecolor=yellow!10,linewidth=0.25,algebraic]{0}{2pi q1 mul 0.1 add}{(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
                          }
\parametricplotHSB[plotpoints=3600,algebraic,linewidth=2\pslinewidth,plotstyle=curve]{0}{2pi q1 mul 0.1 add}{(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(\r,0){!R2}
\end{pspicture}\newpage}
\multido{\r=1.8+-0.1}{35}{%
\begin{pspicture}(-4,-4)(4,4)
\pstVerb{/R1 3 def /R2 1 def /p1 17 def /q1 5 def /2pi 6.283185 def /ax \r\space def /by 0 def
         }%
%\pscircle{!R1}
\psframe*(-4,-4)(4,4)
\parametricplot[plotpoints=1040,linecolor=yellow!10,linewidth=0.25,algebraic]{0}{2pi q1 mul 0.1 add}{(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
                          }
\parametricplotHSB[plotpoints=3600,algebraic,linewidth=2\pslinewidth]{0}{2pi q1 mul 0.1 add}{(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(\r,0){!R2}
\end{pspicture}\newpage}
\end{center}
\end{document}

jeudi 10 mars 2016

Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks (suite)

 (suite de http://pstricks.blogspot.fr/2016/03/dessiner-des-guillochis-entre-2-cercles.html)
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_1q$, la courbe se referme après $q$ tours.
\[
\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} 




mercredi 9 mars 2016

Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks

Dessiner une courbe périodique fermée comprise entre 2 cercles concentriques et tangente à ceux-ci est facile, voir le début des “guillochis” sur :


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 :


On peut choisir le centre d’inversion pour que le grand cercle (C 1 ) et son image (C′ 1 ) aient le même rayon, mais le petit cercle (C 2 ) et son image (C′ 2 ) auront des rayons différents :
Quelques explications sont dans le fichier pdf :

L'animation dans ce fichier a été réalisée avec le package animate d'Alexander Grahn.

Cette page a été complétée et la documentation mise à jour :


Ci-dessous le code permettant d'obtenir les images pour réaliser le Gif animé ci-dessus :

\documentclass{article}
\usepackage[paperwidth=14cm,paperheight=6cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-plot}
\usepackage[garamond]{mathdesign}
\usepackage{amsmath}
\usepackage{animate}
\usepackage{url}
\psset{dimen=middle}
\title{Dessiner des guillochis entre 2 cercles non concentriques avec PSTricks}
\date{9 mars 2016}
\pagestyle{empty}
\author{Manuel Luque}
\begin{document}
\begin{center}
\multido{\r=0+2.5}{29}{%
\begin{pspicture}(-7,-3)(7,3)
\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)
\psline(!CoorB pop -0.1 add 0)(!CoorB pop 0.1 add 0)
\psline(!CoorB pop -0.1 )(!CoorB pop 0.1)
% les inverses
\pscircle[linecolor=blue](!CoorA){!RA}
\pscircle[linecolor=blue](!CoorB){!RB}
\psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]
\end{pspicture}\newpage}
\end{center}
\end{document}


mardi 8 mars 2016

pst-guillochis : exemple avec animation n°3

Le code pour obtenir les images :

\documentclass{article}
\usepackage[paperwidth=14cm,paperheight=14cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-guillochis}
\usepackage{animate}
\psset{dimen=middle}
\title{Dessiner des guillochis avec PSTricks - exemples}
\date{8 mars 2016}
\pagestyle{empty}
\author{Manuel Luque}
\begin{document}
\newpsstyle{colorbordersnone}{linestyle=none}
\begin{center}
\multido{\i=0+12}{30}{
\begin{pspicture}(-7,-7)(7,7)
\psset{p=5,q=12,colorborders=colorbordersnone}%
\psGuillochis[R1=0.5,R2=1,a1=0.2,a2=0.2,n1=8,n2=7,angularshiftborder2=\i,angularshiftborder1=-\i]
\psGuillochis[R1=1,R2=2,a1=.2,a2=0.15,n1=7,n2=6,angularshiftborder1=\i,angularshiftborder2=-\i]
\psGuillochis[R1=2,R2=3,a1=.15,a2=0.15,n1=6,n2=5,angularshiftborder2=\i,angularshiftborder1=-\i]
\psGuillochis[R1=3,R2=4,a1=.15,a2=0.1,n1=5,n2=4,angularshiftborder1=\i,angularshiftborder2=-\i]
\psGuillochis[R1=4,R2=5,a1=.1,a2=0.1,n1=4,n2=3,angularshiftborder2=\i,angularshiftborder1=-\i]
\psGuillochis[R1=5,R2=6,a1=.1,a2=0.1,n1=3,n2=2,angularshiftborder1=\i,angularshiftborder2=-\i]
\psGuillochis[R1=6,R2=7,a1=.1,a2=0,n1=2,n2=1,angularshiftborder2=\i,angularshiftborder1=-\i]
\end{pspicture}\newpage}
\end{center}
\end{document}



PS : la documentation et le package ont été mis à jour (8 mars 2016)


lundi 7 mars 2016

pst-guillochis : exemple avec animation

Toutes les indications du package ``pst-guillochis'' sont dans la page précédente :
http://pstricks.blogspot.fr/2016/03/dessiner-des-guillochis-avec-pstricks.html
Le listing :
\documentclass{article}
\usepackage[paperwidth=12cm,paperheight=12cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-guillochis}
\usepackage{animate}
\psset{dimen=middle}
%\title{Dessiner une courbe périodique fermée comprise entre 2 courbes et tangente à celles-ci}
\title{Dessiner des guillochis avec PSTricks - exemples}
\date{7 mars 2016}
\pagestyle{empty}
\author{Manuel Luque}
\begin{document}
\begin{center}
\newpsstyle{colorsurfacecyan}{fillstyle=solid,fillcolor=cyan!20,linestyle=none,plotpoints=720}
\newpsstyle{guillochisgreen}{linecolor={[rgb]{0 0.7 0}}}
\multido{\i=0+12}{30}{
\begin{pspicture}(-6,-6)(6,6)
\psGuillochis[R1=1,R2=3,p=28,q=3,a1=0.2,a2=0.25,n1=4,n2=6,angularshiftborder2=\i,angularshiftborder1=-\i,
              colorsurface=colorsurfacecyan,
              colorguillochis=guillochisgreen]
\psGuillochis[R1=3,R2=5,p=17,q=5,a1=.25,a2=0.15,n1=6,n2=2,angularshiftborder1=\i,angularshiftborder2=-\i]
\end{pspicture}\newpage}
\end{center}
\end{document}

Dessiner des guillochis avec PSTricks

D’aprèsWikipedia, «un guillochis est un ornement composé de lignes, de traits ondés qui s’entrelacent ou se croisent avec symétrie».
En toute honnêteté, cette étude a pour origine le superbe travail de Michael Schreiber effectué avec le logiciel Mathematica, quelques lignes lui ont suffit pour le réaliser ; le revers de la médaille c’est qu’il est très difficile de déduire le principe de ces guillochis de ces trois lignes de code concentré : c’est pourquoi je suis parti de zéro afin d’essayer d’arriver à des résultats similaires à ceux de Michael. J’ai hésité à employer le terme de “guillochis”, car on trouve plus facilement le terme “guilloché”, mais celui-ci semble plutôt s’appliquer aux objets fabriqués par “guillochage”, cependant le dictionnaire Larousse donne les deux termes comme équivalents.

Le package pst-guillochis, avec sa documentation est disponible ici :
pst-guillochis.zip

Voici quelques autres images obtenues avec ce package :