mercredi 14 septembre 2011

Vos courbes aux couleurs de l'arc-en-ciel !

Cette commande \parametricplotHSB, est dérivée de \parametricplot du package pst-plot de Timothy Van Zand. Elle en reprend l’essentiel.
Elle s’emploie comme celle de \parametricplot, mais ne supporte pas les options de style linestyle.
Par défaut le codage HSB=true est activé, on alors une courbe qui déploie toutes les couleurs de l’arc-en-ciel sur sa longueur.
On peut choisir la couleur de début et la couleur de la fin de la courbe avec les paramètres : HueBegin=0,HueEnd=0.5, par exemple ; les valeurs de H étant choisies entre 0 et 1.
Avec l’option HSB=false, les options de couleurs classiques redeviennent opérantes.
Le nombre de points se fixe avec le paramètre : plotpoints=1000
L’option [algebraic] est possible, si l'on préfère.
Les fichiers peuvent être téléchargés ici : http://manuel.luque.perso.neuf.fr/plotHSB2011/
Le code :
\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[height=24cm,width=17cm]{geometry}
\usepackage{pstricks,pst-plot,pst-slpe}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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

% La façon de procéder a été copiée sur pst-plot

\title{\psframebox[fillstyle=slopes]{\huge Vos courbes aux couleurs de l'arc-en-ciel !}}
\author{ Denis GIROU, Manuel LUQUE}
\date{19-25 février 2003 et 14 septembre 2011}

\begin{document}

\maketitle

Cette commande \verb+\parametricplotHSB+, est dérivée de
\verb+\parametricplot+ du package \texttt{pst-plot} de Timothy Van Zand.
Elle en reprend l'essentiel.

Elle s'emploie comme celle de \verb+\parametricplot+, mais ne
supporte pas les options de style \verb+linestyle+. Par défaut le codage
\texttt{HSB=true} est activé, on alors une courbe qui déploie toutes les
couleurs de l'arc-en-ciel sur sa longueur.

Une nouvelle option : on peut choisir la couleur de début et la
couleur de la fin de la courbe avec les paramètres :
\verb+HueBegin=0,HueEnd=0.5+, par exemple ; les valeurs de
\texttt{H} étant choisies entre 0 et 1.

Avec l'option \texttt{HSB=false}, les options de couleurs classiques
redeviennent opérantes.

Le nombre de points se fixe avec le paramètre : \texttt{plotpoints=1000}

L'option \texttt{[algebraic]} est possible.

\begin{verbatim}
\begin{pspicture}(0,-4.5)(10,4.5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=360}
  \parametricplotHSB[linewidth=1mm,HSB=false,linecolor=red,algebraic]{0}{6.28}
     {10*t/6.28|4*sin(t)}
  \parametricplotHSB[linewidth=1mm,algebraic]{0}{6.28}{10*t/6.28|4*cos(t)}
\end{pspicture}
\end{verbatim}

\begin{center}
\begin{pspicture}(0,-5)(10,5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=360}%
  \parametricplotHSB[linewidth=1mm,HSB=false,linecolor=red,algebraic]{0}{6.28}
     {10*t/6.28|4*sin(t)}
  \parametricplotHSB[linewidth=1mm,algebraic]{0}{6.28}{10*t/6.28|4*cos(t)}
\end{pspicture}
\end{center}

\newpage
\begin{verbatim}
\begin{pspicture}(0,-5)(10,5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=300}%
  \parametricplotHSB[linewidth=1mm,HueBegin=0,HueEnd=0.5]{0}{360}
    {t t 36 div t sin 4 mul}
  \parametricplotHSB[linewidth=1mm,HueBegin=0.5,HueEnd=0.7]{0}{360}
    {t t 36 div t cos 4 mul}
  \parametricplotHSB[linewidth=1mm,HueBegin=0.8,HueEnd=1]{0}{360}
    {t t 36 div t sin 2 mul}
\end{pspicture}
\end{verbatim}
\begin{center}
\begin{pspicture}(0,-5)(10,5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=300}%
  \parametricplotHSB[linewidth=1mm,HueBegin=0,HueEnd=0.5]{0}{360}
    {t t 36 div t sin 4 mul}
  \parametricplotHSB[linewidth=1mm,HueBegin=0.5,HueEnd=0.7]{0}{360}
    {t t 36 div t cos 4 mul}
  \parametricplotHSB[linewidth=1mm,HueBegin=0.8,HueEnd=1]{0}{360}
    {t t 36 div t sin 2 mul}
\end{pspicture}
\end{center}

\newpage
\begin{verbatim}
\begin{pspicture}(-5,-5)(5,5)
  \psframe*[linecolor=lightgray](-5,-4)(5,4)
  \psgrid[gridlabels=0,subgriddiv=0](-5,-4)(5,4)
  \multido{\nxDiv=-5+0.2}{50}{%
    \psline(\nxDiv,-.1)(\nxDiv,0.1)}
  \multido{\nyDiv=-4.0+0.2}{40}{%
    \psline(-0.1,\nyDiv)(0.1,\nyDiv)}
  \psset{linewidth=1mm}%
  \parametricplotHSB[plotpoints=1000,linecolor=blue,HSB=false,yunit=0.5]{-5}{5}{%
    t
    /temps t 2e-3 mul def
    /frequence2 100 def
    frequence2 360 mul temps mul cos
    1 mul 3 add
    }
  \parametricplotHSB[plotpoints=10000,yunit=1]{-5}{5}{%
    t
    /temps t 2e-3 mul def
    /frequence1 1200 def
    /frequence2 100 def
    frequence2 360 mul temps mul cos
    1 mul 3 add
    frequence1 360 mul temps mul cos
    4 mul
    mul
    0.1 mul
    }
\end{pspicture}
\end{verbatim}
\begin{center}
\begin{pspicture}(-5,-5)(5,5)
  \psframe*[linecolor=lightgray](-5,-4)(5,4)
  \psgrid[gridlabels=0,subgriddiv=0](-5,-4)(5,4)
  \multido{\nxDiv=-5+0.2}{50}{%
    \psline(\nxDiv,-.1)(\nxDiv,0.1)}
  \multido{\nyDiv=-4.0+0.2}{40}{%
    \psline(-0.1,\nyDiv)(0.1,\nyDiv)}
  \psset{linewidth=1mm}%
  \parametricplotHSB[plotpoints=1000,linecolor=blue,HSB=false,yunit=0.5]{-5}{5}{%
    t
    /temps t 2e-3 mul def
    /frequence2 100 def
    frequence2 360 mul temps mul cos
    1 mul 3 add
    }
  \parametricplotHSB[plotpoints=1000,linecolor=red,HSB=false,yunit=0.5]{-5}{5}{%
    t
    /temps t 2e-3 mul def
    /frequence2 100 def
    frequence2 360 mul temps mul cos
    -1 mul 3 sub
    }
  \parametricplotHSB[plotpoints=10000,yunit=1]{-5}{5}{%
    t
    /temps t 2e-3 mul def
    /frequence1 1200 def
    /frequence2 100 def
    frequence2 360 mul temps mul cos
    1 mul 3 add
    frequence1 360 mul temps mul cos
    4 mul
    mul
    0.1 mul
    }
\end{pspicture}
\end{center}
\newpage
\begin{verbatim}
\begin{pspicture}(-2,-2)(2,2)
  \psgrid(-2,-2)(2,2)
  \psset{plotpoints=1000}%
  \parametricplotHSB[linewidth=1,algebraic=true]{0}{6.28}
    {1.5*cos(t)|1.5*sin(t)}
\pscircle{2}\pscircle{1}
\end{pspicture}
\end{verbatim}
\begin{center}
\begin{pspicture}(-2,-2)(2,2)
  \psgrid(-2,-2)(2,2)
  \psset{plotpoints=1000}%
  \parametricplotHSB[linewidth=1,algebraic=true]{0}{6.28}
    {1.5*cos(t)|1.5*sin(t)}
\pscircle{2}\pscircle{1}
\end{pspicture}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire