% cours5.tex (gH) : Courbes et trac\'{e}s divers
%
\documentclass[a4paper,12pt]{article}
%
\usepackage{maple2e}
%
\parskip    0.35cm
\parindent  0.00cm
%
\renewcommand{\thesection}{\arabic{section}. }
\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}
%
\def\C{\mbox{l\hspace{-0.43em}C}}
\def\Maple{\textit{Maple}}
\def\L{\ensuremath{\mathcal{L}}}
\def\dz{\texttt{\symbol{'043}}}      % di\`{e}se
%
% pour une matrice 2x2
%
\newcommand{\mat}[4]{\ensuremath{%
\left(\begin{tabular}{cc}%
#1&#2\\#3&#4\\\end{tabular}\right)}
}% fin de definition de \mat
%
% pour simuler une entr\'{e}e (ligne) Maple
%
\newcommand{\mapleIn}[1]{\textsf{
\begin{tabular}{ll}
 $ > $ &#1
\end{tabular}
}}
%
% pour simuler une sortee (ligne) Maple
%
\newcommand{\mapleOut}[1]{\texttt{
\begin{tabular}{ll}
 \hspace{1.3cm} & #1
\end{tabular}
}}
%
% une entr\'{e}e et une sortie pour Maple longue
%
\newcommand{\mapleInt}[1]{\textsf{#1}}
\newcommand{\mapleOutLong}[1]{\texttt{#1}}
%
% des macros "locales" au sujet
%
\def\sl{$sl(2,\C)$}
\def\slm{\textit{sl}-matrix}
\def\slms{\textit{sl}-matrices}
\newcommand{\sym}[1]{$Sym^{#1}(\C^ 2)$}
%
%
\begin{document}
%
\title{5. Surfaces et Trac\'{e}s divers}
\author{Gilles Hunault}
\date{Bergson, 1996}
\maketitle
%\tableofcontents
%
\section{Droites} % ##
%
\subsection{Enveloppes} % ##
%
L'\'{e}quation g\'{e}n\'{e}rale d'une droite est
$ a.x+b*y+c=0$.
Si on param\`{e}tre une droite \`{a} l'aide de la variable t,
on peut tracer les familles de droite
$ a(t).x+b(t)*y+c(t)=0$.
Ainsi une famille de droites qui passent par le point $(1,0)$ est donn\'{e}e par
$ -cos(t).x + y - 1 = 0 $
que l' on r\'{e}\'{e}crit en
$ y = cos(t)*x + 1 $
ce qui permet de la tracer en \Maple\ par :
%
$$plot( { seq( cos(t)*x+1,t=1..100) },x=-10..10,y=-10..10 ) ;$$
%
De m\^{e}me, on obtient des cercles avec
$  cos(t).x + sin(t)*y + R^2=0 $
qu'on trace avec \Maple\ (si $R^2 = 5$) par :
%
$$plot( { seq( (5-cos(t)*x)/sin(t),t=1..100) },x=-10..10,y=-10..10 ) ;$$
%
Une hypocycloide \`{a} 4 rebroussements est d\'{e}finie par
%
$$cos(t)*x-sin(t)*y-cos(2t)=0$$
%
et on la trace par :
\begin{verbatim}
    plot({seq((cos(t)*x-cos(2*t))/sin(t),t=1..100)},
          x=-10..10,y=-10..10 ) ;
\end{verbatim}
%
L'\'{e}quation de la d\'{e}velopp\'{e}e d'une cycloide est
$sin(t)x+cos(t)y-2t.sin(t)=0$
Pour la tracer avec t de $-\pi$ \`{a} $3\pi$ en
70 valeurs, il faut commencer par construire une fonction
lin\'{e}aire pour passer de 1..70 \`{a} $[-\pi,3\pi]$ avant de compliquer
l'expression $plot((\{seq...$ avec un $sub$.%}))
\newpage
Le trac\'{e} de la d\'{e}velopp\'{e}e de la cycloide
se fait donc par
\begin{verbatim}
   f := t-> a*t+b  :
   s := solve({f(1)=-Pi,f(70)=3*Pi},{a,b})  :
   u := a*t+ b :
   plot( { seq( subs(s,sin(u)*(2*u-x)/cos(u)),
                t=1..70)
         },
         x=-10..16,y=-2..2,
         color=black,scaling=unconstrained) ;
\end{verbatim}

%
\subsection{Param\'{e}triques et Polaires}
%
Essayons maintenant de tracer une spirale avec les
\'{e}quations param\'{e}triques
$x(t)=t.cos(2\pi),\ y(t) = t*sin(2\pi)$.
Il suffit d'\'{e}crire en \Maple\ :
$$plot( [ t*cos(2*Pi*t), t*sin(2*Pi*t), t=0..17*Pi/6 ]) ;  $$
Par contre, on se m\'{e}fiera de l'expression
$$plot( [ t*cos(2*Pi*t), t*sin(2*Pi*t)], t=0..17*Pi/6) ;  $$
dans laquelle le crochet pr\'{e}c\'{e}dent est d\'{e}cal\'{e} car cette deuxi\`{e}me expression
est valide mais n'affiche que deux courbes en coordonn\'{e}es cart\'{e}siennes.

Le trac\'{e} en polaires se fait gr\^{a}ce \`{a} l'option \texttt{coords=polar}.
Pour la spirale pr\'{e}c\'{e}dente,
on \'{e}crit $\rho(\theta)=\theta$ en polaires, d'o\`{u} l'instruction de trac\'{e}
$plot( [ t, t, t=0..17*Pi/6], coords=polar ) ;  $
%
%  la droite y=2*x+1 s'�crit en polaire (puisque y=\rho.sin(\theta)
%  et  x=\rho.cos(\theta)), \rho = 1 /(\rho.sin(\theta)-2*\rho.cos(\theta)))
%
\subsection{Courbes implicites et logarithmiques}
%
Un \'{e}quation implicite donne la liaison entre $x$ et $y$
sans fournir de moyen de s\'{e}parer les variables. Par exemple
l'\'{e}quation $x^3+y^3-5.x.y-1/5=0$ d\'{e}finit une courbe qu'il n'est
pas facile d'exprimer sous la forme $y=f(x)$. Le "package"
$plots$ permet de tracer une telle courbe. On charge ce package
par \texttt{with(plots)}. Si on veut ne charger en m\'{e}moire que la
fonction $implicitplot$, on \'{e}crit plut\^{o}t
\texttt{with(plots,implicitplot)}. L'appel de la fonction directement \`{a} partir du
package est possible aussi ; on le r\'{e}alise par
\texttt{plots[implicitplot](...)}.

Pour tracer une courbe implicite,
\Maple\ utilise une grille de discr\'{e}tisation (voir plus bas la notion
de grille pour une surface).
Il faut donc \'{e}crire
%
\begin{verbatim}
    plots[implicitplot](
          x^3 + y^3 - 5*x*y - 1 /5 = 0,
          x=-3..3, y=4..4,
          grid=[50,50] ) ;
\end{verbatim}
%
Enfin, pour terminer le trac\'{e} de courbes, signalons qu'avec
$logplot$ du "package" $plots$, on peut utiliser une \'{e}chelle
logarithmique sur y. Ainsi l'expression $plots[logplot](exp)$ trace une
droite.
%
\section{Surfaces vue de dessus}
%
Pour repr\'{e}senter une surface d\'{e}finie par une fonction $f$ de deux variables
$x$ et $y$, on utilise une technique dite de densit\'{e}. La premi\`{e}re \'{e}tape de cette
technique consiste \`{a} discr\'{e}tiser la fonction c'est \`{a} dire \`{a} produire une grille
ou matrice de valeurs. A chaque case de la grille rep\'{e}r\'{e}e par un indice de ligne
$I$ et un indice de colonne $J$, on associe une valeur $f(x,y)$ bien choisie.
Discr\'{e}tiser $f$ en $M$ c'est donc passer de $f(x,y)$ \`{a} $M[I,J]$.
La deuxi\`{e}me \'{e}tape vient associer \`{a} chaque case une couleur. Supposant le nombre
de couleurs $NBC$ fix\'{e}, il faut trouver \`{a} quelle couleur correspond une valeur
donn\'{e}e. En admettant qu'il y a \'{e}quir\'{e}partition des plages de valeurs pour
chaque couleur, il suffit donc de calculer la plus grande valeur ($PG$) dans
la matrice et la plus petite ($PP$) puis de calculer la plage ($PL$) de valeurs
associ\'{e}e \`{a} une couleur. Un calcul simple de longueurs proportionnelles permet
alors de trouver la couleur $cc(I,J)$ associ\'{e}e \`{a} la case $(I,J)$.

Prenons un exemple : soit $f$ la fonction telle que $f(x,y)=x+y$, ce qui se d\'{e}finit
en \Maple\ par \texttt{f:= (x,y) -> x+y}. Prenons une grille d\'{e}finie par
une matrice carr\'{e}e de taille $T$ :
\texttt{M := array(1..T,1..T)}.
Un remplissage adroit de la matrice
$M$ consiste \`{a} mettre dans la case $(I,J)$ la valeur de la fonction en
$(T+1-I,J)$,
soit les boucles :
%
\begin{verbatim}
     for I from 1 to T do :
       for J from 1 to T do :
          M[I,J] := eval(f(T+1-I,J)) :
       od :
     od :
\end{verbatim}
%
Pour calculer le minimum et le maximum de la matrice, nous commencons par
convertir $M$ en un vecteur puis nous convertissons ce vecteur en ensemble
avant d'extraire ses \'{e}l\'{e}ments via $op$ :
\begin{center}
\texttt{Ens := convert(convert(M,vector),set) ;}.
\end{center}
Les extrema sont alors  calcul\'{e}s tout simplement par
\texttt{PG := max(Ens)} et \texttt{PP := min(Ens)}. Avec $NBC$ couleurs,
la plage $PL$ correspond alors \`{a} \texttt{PL:=(PG-PP)/NBC}. Pour une valeur
$h=f(x,y)$ quelconque, le code couleur associ\'{e} est 1 entre $PP$ et $PP+PL$,
2 entre $PP+PL$ et $PP+2*PL$, ... $NBC$ entre $PG-PL$ et $PG$. Ce nombre correspond
donc \`{a} \texttt{1+E[(h-PP)/PL]}. La fonction "code couleur" peut \^{e}tre
d\'{e}finie en \Maple\ par
%
\begin{center}
\texttt{cc := (h,PL) -> 1 + trunc( (h-p)/( (g-p)/nbc ) - 0.001 ) }
\end{center}
%
et la matrice MC des code-couleurs peut alors \^{e}tre construite par
%
\begin{center}
\texttt{MC := array(1..T,1..T,(I,J)->cc(M[I,J])}.
\end{center}
%
car \Maple\ permet une d\'{e}finition compacte des matrices. $M$ aurait donc
pu \^{e}tre \'{e}crite directement par
\begin{center}
\texttt{M := array(1..T,1..T,(I,J)->T+1-I+J)}
\end{center}
%
alors que la meilleure m\'{e}thode serait sans doute de s\'{e}parer la d\'{e}finition de
la fonction et le remplissage de la matrice avec les deux instructions :
%
\begin{verbatim}
   f := (x,y) -> x+y  :  g := (x,y,T) -> f(T+1-x,y) :
   M := matrix(T,T,g) :
\end{verbatim}
%
\Maple\ r\'{e}alise tous ces calculs en automatique dans la fonction
$densityplot$. Ainsi, notre probl\`{e}me se r\'{e}soud en une seule
ligne, \`{a} savoir :

\hspace{3cm} \texttt{densityplot(f(x,y),x=1..T,y=1..T,grid=[T,T])}.

A la suite de \texttt{grid} on peut utiliser
\texttt{colorstyle=HUE} ou \texttt{colorstyle=RGB} qui sont des
options de trac\'{e} avec des couleurs
un peu plus "sympathiques".
\end{document}
