\documentclass[a4paper]{article}

\usepackage[height=25cm,width=17cm]{geometry}
\usepackage[latin1]{inputenc}
\usepackage{pstricks,pst-xkey,pst-plot}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Essai de Manuel Luque 19 février 2003
% transformé par Denis Girou le 25 février 2003
% révisé le 9 mai 2007
% Herbert Voss 11 juillet 2007
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter

\pst@addfams{pst-HSB}

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

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

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

% Default values
\psset[pst-HSB]{HueBegin=0,HueEnd=1,HSB=true}

\def\parametricplotHSB{\pst@object{parametricplotHSB}}
\def\parametricplotHSB@i#1#2#3{{%
  \begin@ClosedObj
  \addto@pscode{%
    /t #1 def
    /dt #2 t sub \psk@plotpoints\space div def
    /t t dt sub def
    /Counter 0 def
    1 setlinejoin
    \psk@plotpoints {
      /t t dt add def
      /Counter Counter 1 add def
      #3
      \pst@number\psyunit mul exch
      \pst@number\psxunit mul exch
      1 Counter eq { moveto currentpoint /OldY ED /OldX ED } % 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
          OldX OldY PointX PointY lineto lineto
          stroke
          PointX PointY moveto
          /OldX PointX def /OldY PointY def
        \else lineto \fi } ifelse
     } repeat }% fin du code ps
   \end@ClosedObj}%
  \ignorespaces} % fin de la commande PSTricks

\makeatother

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

\title{Vos courbes aux couleurs de l'arc-en-ciel !}
\author{Denis GIROU, Manuel LUQUE}
\date{19-25 février 2003, révisé le 9 mai 2007}

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

\begin{verbatim}
\begin{pspicture}(0,-4.5)(10,4.5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=300}
  \parametricplotHSB[linewidth=1mm,HSB=false,linecolor=red]{0}{360}
    {t t 36 div t sin 4 mul}
  \parametricplotHSB[linewidth=1mm]{0}{360}{t t 36 div t cos 4 mul}
\end{pspicture}
\end{verbatim}

\begin{center}
\begin{pspicture}(0,-5)(10,5)
  \psgrid(0,-4)(10,4)
  \psset{plotpoints=300}%
  \parametricplotHSB[linewidth=5mm,HSB=false,linecolor=red]{0}{360}
    {t t 36 div t sin 4 mul}
  \parametricplotHSB[linewidth=5mm]{0}{360}{t t 36 div t cos 4 mul}
\end{pspicture}
\end{center}

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

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

\end{document}
