Retour

mode_emploi.tex

Télécharger le fichier
\input $FORMAT/myplain.tex
\bookstyle
\titrestyle {\twentybf }
 
\titre {Un robot pour le dessin mathématique~:\\
guide d'utilisation de BBgraf}
 
\centerline {{\sl par Jean-Paul Vignault, Lycée Louis-Armand,
Poitiers}}
 
\centerline {(|jp.vignault@interpc.fr|)}
 
\vskip \titreskip
 
{\narrower \sl
Le but de ce document est de vous présenter un petit logiciel sans
prétention, accessible à travers la fenêtre de son navigateur à
toute personne ayant un accès Internet. Ce logiciel est destiné à la
production de dessins mathématiques, dans des formats en permettant
l'utilisation dans des pages Web ou dans des documents papiers
imprimables ({\sl via\/} un traitement de texte standard type Word,
Word Perfect, Work, \TeX, etc\dots )
\par }
 
\paragraphe {Introduction~: la naissance des robots}
 
Lors d'une réunion entre collègues de mathématiques, au lycée Louis
Armand en début d'année scolaire 1999/2000, nous avons pu faire le constat que nous étions
tous confrontés aux mêmes problêmes dans nos recherches de production
d'images mathématiques pour nos documents.
 
Ayant résolu, avec mon collègue Jean-Michel Sarlat, un certain nombre
de ces problèmes en créant nos propres logiciels de dessin, nous avons
eu l'idée de proposer à la collectivité l'utilisation de ces logiciels.
 
Afin de simplifier au maximum les procédures pour l'utilisateur
(notamment en termes de maintenance des logiciels, mises à jour,
etc\dots ), et dans l'optique d'une utilisation optimale des réseaux
informatiques, il a été choisi  de placer ces logiciels sur une seule
machine, elle-même sur le réseau Internet%
\footnote {$^{(*)}$}{En fait sur deux machines, mais l'autre n'est
accessible que de l'intranet local Louis-Armand, à l'adresse
$172.16.0.2$}, et de faire un interface 
HTML afin que ces logiciels soient pilotables à travers un navigateur.
 
\` A l'heure actuelle ($\oldstyle 23$ janvier $\oldstyle 2\, 000$), Il
y a 4~robots disponibles, dont deux sont consacrés au dessin
mathématique (les deux autres sont consacrés à l'édition de textes et
formules mathématique, sur base \TeX\ et La\TeX).
 
Ce document va surtout s'intéresser au robot BBgraf. Comme son nom
(provisoire) l'indique, ce dernier n'est encore qu'un bébé, mais il ne
demande qu'à apprendre, et il attend beaucoup des suggestions de ses
futurs u\-ti\-li\-sa\-teurs pour murir un peu avant de se choisir un
nom plus définitif.
 
Bien sûr, tout cela n'est encore qu'à un stade très
expérimental. Merci de votre indulgence.
 
\paragraphe {Les robots de Syracuse}
 
Sur le site {\sl Syracuse\/}
(|http://melusine.eu.org/syracuse/|), hébergé par {\sl
Mélusine}, on trouve un certain nombre de robots destinés à produire
des images à tendance mathématique pour illustrer vos pages Web ou
vos documents papiers.
 
Le principe est le même pour chacun de ces robots~: vous disposez d'un
formulaire pour vos demandes, et le robot vous renvoie la réponse sous la
forme d'une image dans le navigateur (format |gif| ou |jpeg|), plus un
fichier (format |postscript|) à télécharger%
\footnote {$^{(**)}$}{Il faut savoir que le
format |postscript| s'est imposé comme format de référence dans
l'édition professionnelle, et si vous allez chez un imprimeur, votre
fichier postscript pilotera lui-même la photocomposeuse, sans aucune
manipulation préalable~!}.
 
Pour chacun d'entre eux, vous pouvez consulter les archives dans le
répertoire temporaire associé (|genps/temp| pour |genps|,
|jps/tmp| pour |jps|, etc\dots ) Pour une image donnée, vous pouvez
ainsi consulter le code qui a été tapé dans le formulaire. 
 
\paragraphe {Le robot BBgraf}
 
Le robot BBgraf se trouve à l'adresse
|http://melusine.eu.org/syracuse/jps/|. Son but est
de permettre l'obtention simple des dessins mathématiques dont on
a besoin dans l'enseignement au lycée. 
 
Dans un premier temps fortement
axé sur le tracé de courbes de fonctions numériques, le script est en
train d'évoluer pour permettre également le tracé des figures
géométriques simples qui font le quotidien de l'enseignement mathématique.
 
Pour obtenir une figure, vous devez en donner la description complète
dans le formulaire, {\sl via\/} les commandes reconnues dans un format
spécifique (le format $jps$) décrit ci-après. Ce format n'est en fait
qu'une collection de 
macros écrites en Postscript, et destinées à faciliter la description
par un humain de la figure désirée.
 
\def \epspath {%
   $HOME/public_html/io/robots/}
\let \listingpath \epspath
\withoutlineno
 
Par exemple, voici un fichier $jps$ de 4~lignes, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      tracerepere
      marks
      /f $\{\}$ def
      tracecourbe
      && ex_01.ps
   \cr
}}
$$
 
Pour utiliser ce robot, on peut procéder par essais successifs
ou bien préparer à l'avance ses fichiers $jps$ avec l'éditeur de son
choix, pour ensuite les soumettre au robot et récupérer les
réponses.
 
\paragraphe {La fenêtre de dessin}
 
Le cadre de la fenêtre de dessin est géré par quatre variables~:
$xmin$, $xmax$, $ymin$ et $ymax$. Par défaut ces variables valent
respectivement $-2, 10, -2, 10$. On peut les modifier en utilisant les
opérateurs |setxrange| et |setyrange|.
 
Par exemple, voici un fichier jps, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -7 5 setxrange
      -1 5 setyrange
      tracerepere
      marks
      && ex_02.ps
   \cr
}}
$$
On peut également modifier ces ariables une par une avec les commandes
|setxmin|, |setxmax|, |setymin|, |setymax|, ou en écrivant directement
les ordres postscript. Ainsi, les 3~séquences ci-dessous sont équivalentes
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize .3\hsize \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      $\vcenter {\hsize .3\hsize \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      $\vcenter {\hsize .3\hsize \obeylines \obeyspaces \tt #}$
   \cr
 
      -7 5 setxrange
      && 
 
      -7 setxmin
      5 setxmax
      && 
 
      /xmin $\{$-7$\}$ def
      /xmax $\{$5$\}$ def
   \cr
}}
$$
 
\paragraphe {Tracé du repère}
 
La commande |tracerepere| génère un tracé complet du repère (les
2~axes, les graduations, sous-graduations et marques, les unités et
les flèches au bout des axes). On peut également affiner et ne
demander qu'une partie de ce tracé.
 
\` A noter que par défaut, le repère est orthonormé. Pour avoir un
repère seulement orthogonal, merci de vous reporter au paragraphe \og
Gestion de la Bounding Box\fg.
 
\sparagraphe {Les axes}
 
On dispose des commandes suivantes, qui font ce que l'on pense~:
|traceOx|, |traceOy|, |traceaxes|. \` A noter que l'origine du tracé des axes
n'est pas forcément le point $O (0, 0)$. On peut la changer avec la
commande |setorigine|.
 
 
Pour avoir les flèches au bout des axes, on dispose des commandes
|axeOxarrow|, |axeOyarrow| et |axesarrow|.
 
Par exemple, voici un fichier jps, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      traceaxes
      marks
      mixte
      1 2 setorigine
      traceaxes
      axeOxarrow
      && ex_03.ps
   \cr
}}
$$
 
\sparagraphe {Les graduations, sous-graduations, et marques}
 
Pour tracer des graduations, on dispose des commandes suivantes~:
|ticks|, |xticks|, |yticks|, |xtick| et |ytick|.
Les trois premières n'ont pas d'argument et tracent les graduations
auxquelles on pense. Les deux dernières prennent un argument
numérique, et placent une seule graduation. Par exemple, la commande
|pi xtick| place une graduation sur l'axe $Ox$ au point d'abscisse
$\pi $.
 
Pour tracer des sous-graduations, on dispose des commandes analogues
suivantes~: 
|subticks|, |xsubticks|, |ysubticks|, |xsubtick| et |ysubtick|.
Pour marquer les valeurs, on dispose des commandes |marks|, |xmarks|,
|ymarks|, |xmark| et |ymark|. Les 3~premières ne demandent pas
d'argument, les 2~dernières veulent un nombre.
 
Les 9~commandes sans argument que nous venons de voir utilisent
des variables contenant les valeurs d'incrémentation. Par défaut
celles-ci sont fixées à~1 pour les marques et graduations, et à $0, 5$
pour les sous-graduations. On peut changer ces valeurs avec les
commandes |setxmkstep|, |setymkstep|, |setxtkstep|, |setytkstep|,
|setxsubtkstep| et |setysubtkstep| qui prennent chacune un argument
numérique.
 
Ainsi, voilà un fichier jps, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      traceaxes
      4 setytkstep
      4 setymkstep
      ticks
      ymarks
      pi ymark
      e xmark
      2.25 xsubtick
      && ex_04.ps
   \cr
}}
$$
 
\sparagraphe {Les unités}
 
Pour tracer des flèches indiquant les unités, on dispose de la
commande |unites|.
 
\sparagraphe {Le quadrillage}
 
La commande |quadrillage| permet de générer un quadrillage en fond d'écran.
Cette commande ne prend pas d'argument, mais utilise les 3~variables
$xstquadrillage$, $ystquadrillage$ et $quadrillagegray$ définissant
respectivement les incrémentations horizontales et verticales et le
niveau de gris utilisé (de 0 à 1). On peut modifier ces paramètres
avec les commandes à un argument |setxstquadrillage|,
|setystquadrillage| et |setquadrillagegray|. On peut également
modifier les 2~paramètres d'incrémentation en une seule fois avec la
commande à 2~arguments |setquadrillagestep|.
 
 
Ainsi, voilà un fichier jps, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -3.5 3.5 setyrange
      2 1 setquadrillagestep
      quadrillage
      traceaxes
      unites
      ticks
      && ex_05.ps
   \cr
}}
$$
 
On peut aussi,en bricolant un peu, simuler du papier d'écolier, ou du
papier millimétré~: 
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -1.5 1.5 setxrange
      -1.5 1.5 setyrange
      1 setlinewidth
      traceaxes
      unites
      ticks
      .1 setlinewidth
      .2 .2 setquadrillagestep
      quadrillage
      1 1 setquadrillagestep
      .6 setlinewidth
      quadrillage
      && ex_18.ps
   \cr
}}
$$
 
\paragraphe {Insérer des commentaires dans le fichier}
 
Sur une ligne de fichier donnée, le caractère |%| est ignoré, ainsi
que toute la fin de la ligne. Cette propriété de Postscript permet
d'insérer des commentaire dans les fichiers $jps$, afin d'améliorer
leur lisibilité et leur éventuelle modification ultérieure.
 
\paragraphe {Gestion de la Bounding Box}
 
\epsfxsize 50mm 
%
Ci-dessus vous a été décrit tout un système de coordonneés. Ce système
est particulier au format $jps$, et il faut savoir que Postscript
possède son propre système de coordonnées. 
 
\rightepsillustrate{ex_16.ps}{-11}
%
En particulier, Postscript
définit ce que l'on appelle la {\sl Bounding Box}, qui est une boîte
contenant complètement le dessin, ce qui permet sa manipulation par
des logiciels externes. Cette boîte est définie par la donnée de
4~nombres positifs correspondant respectivement aux co\-or\-don\-nées du
coin inférieur gauche et du coin supérieur droit.
 
Par exemple, le script |jps| donne par défaut une image postscript
dont la Bounding Box est définie par les nombres $0, 0, 265, 265$.
 
Par défaut, le script calcule lui-même la Bounding Box à partir du
$xrange$ et du $yrange$. Ce faisant, il respecte 2~contraintes~: le
repère $jps$ doît être orthonormé, et, dans le repère postscript, la plus
petite des coordonnées du coin supérieur gauche est $250$. Après ses
calculs, les 2~variables postscript $width$ et $height$ contiennent
respectivement la largeur utile et la hauteur utile dans le système de
coordonnées Postscript. Une fois cela accompli, le script ajoute tout
le tour une bande dont la taille est définie dans la variable $border$
(valant $7, 5$ par défaut).
 
Ainsi, pour une image par défaut, les variables $width$, $height$ et
$border$ contiennent respectivement les valeurs $250$, $250$ et $7,
5$, ce qui donne, pour la Bounding Box, les deux points extrémaux $(0,
0)$ et $(265, 265)$.
 
Le format $jps$ inclut la commande |setborder| qui permet de modifier la
variable $border$. Ainsi, si l'on garde les valeurs par défaut et que
l'on utilise la commande |25 setborder|, on obtiendra une Bounding Box
dont les points extrémaux seront $(0, 0)$ et $(300, 300)$ (où $300 =
250 + 2\times 25$).
 
Le format $jps$ inclut également les commandes |setwidth| et |setheight|
qui font ce que l'on pense. Si un fichier contient l'une de ces deux
commandes, alors le script ne calcule plus ni $height$, ni $width$,
mais continue d'utiliser ces valeurs pour déterminer la Bounding Box.
C'est l'utilisation de ces commandes qui permet d'obtenir un repère
jps non orthormé.
 
Par exemple, la commande |500 setwidth|, si l'on garde les autres
valeurs par défaut, donnera une Bounding Box dont les points extrémaux
seront $(0, 0)$ et $(515, 265)$ et ce {\sl indépendamment} du repère
jps utilisé.
 
Ainsi l'utilisation des commandes |500 setwidth|, |1000 setheight| et
|0 setborder| donnera une image deux fois plus haute que large.
 
\paragraphe {Définir et placer des points}
 
La commande |point| permet de dessiner un point donné par ses
coordonnées cartésiennes. Ainsi la commande |-2 3 point| va dessiner le
point de coordonnées $(-2, 3)$. Pour dessiner plusieurs
points, on utilise la commande |points| dont la syntaxe est
$$
   \hbox {$A_1$ $A_2$ $\ldots $ $A_n$ $n$ |points|}
$$
où les $A_i$ sont des couples de nombres réels définissant des points,
et où $n$ est un entier.
 
On peut également définir une variable de type {\sl point} en
utilisant la commande Postscript |def|.
 
Pour placer un point avec la projection en pointillés sur les axes, on
utilise la commande |dashpoint|. Là encore, on dispose de la commande
|dashpoints| si on veut faire des tracés multiples.
 
\` A noter que |O| désigne le point prédéfini $O (0, 0)$.
 
Ainsi, voilà un fichier jps, et la figure générée~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      1 1 setsubtkstep
      tracerepere
 
      O point
 
      /A $\{$4 2$\}$ def
      /B $\{$5.5 3.5$\}$ def
 
      A point
      B dashpoint
         -.5 6.5 1.5 6.5 
         2.5 6.5 3.5 6.5 
      4 points
      && ex_06.ps
   \cr
}}
$$
 
\paragraphe {Placer du texte}
 
\sparagraphe {Sélection d'une police}
 
Pour le moment, le format $jps$ reconnaît quatre familles de fontes
différentes~: Courrier, Times, Symbol et Palatino. Chacune d'entre
elle est disponible en standard, gras, italique, ou gras et italique. 
 
Pour sélectionner une police, on dispose des commandes 
$$\vbox {
\settabs 5 \columns
\+ |setTimes| & |setTimesItalic| & |setTimesBold| &
|setTimesBoldItalic| \cr
 
\+ |setCourrier| & |setCourrierItalic| & |setCourrierBold| &
|setCourrierBoldItalic| \cr
 
\+ |setPalatino| & |setPalatinoItalic| & |setPalatinoBold| &
|setPalatinoBoldItalic| \cr 
 
\+ |setSymbol| & |setSymbolItalic| & |setSymbolBold| &
|setSymbolBoldItalic| \cr
}$$
 
Pour utiliser d'autres
fontes, il faut employer directement les ordres Postscript.
 
\sparagraphe {Sélection de la taille d'une police}
 
La taille de la police courant est stockée dans la variable
$fontsize$. Elle est fixée par défaut à $12, 5$, et on peut modifier
cette valeur avec la commande |setfontsize|. Par exemple,
l'instruction |8 setfontsize| sélectionne $8$ pour la taille de la
police courante.
 
\sparagraphe {Placement du texte}
 
Pour placer le texte, on dispose de plusieurs commandes qui ont toutes
la même syntaxe. Par exemple 
$$
   \hbox {|(Abo) 1 1 text|}
$$
va placer la chaîne de caractères `Abo` au point de coordonnées $(1,
1)$.
 
Les commandes disponibles sont |dltext|, |drtext|,
|dtext|, |ltext|, |rtext|, |text|, |ultext|,
|urtext|, |utext|.
 
\sparagraphe {Indice et exposant}
 
On dispose pour le moment de 2~commandes~: |indice| et |exposant|. Elles
prennent en argument une chaîne de caractères et procèdent aux étapes
suivantes~: sélection de la police courante avec une réduction de
$70\% $, déplacement vertical adapté du point courant, insertion de la
chaîne de caractères, rétablissement de la police courante à sa taille
initiale, puis repositionnement du point courant sur la ligne de base.
 
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 70mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -1 4 setxrange
      -1 4 setyrange
      1 1 setsubtkstep
      tracerepere
 
      /A $\{$2 2$\}$ def
 
      A point
 
      setTimesItalic
      	 (A) A text
      	 (A) A rtext
      	 (A) A ltext
      	 (A) A dtext
      	 (A) A drtext
      	 (A) A dltext
      	 (A) A utext
      	 (A) A urtext
      	 (A) A ultext
      setPalatino
      	 (x) xmin 1 rtext
      	 (2) exposant
 
      setSymbol
      	 (p) 1 1 text
      	 (1) indice
      && ex_14.ps
   \cr
}}
$$
 
\paragraphe {Type de tracé}
 
Pour l'épaisseur tracé, on dispose de plusieurs paramètres~: $linewidth$ et
$curvelinewidth$ servent à définir la largeur du tracé courant
respectivement pour les axes, les hachures, etc\dots , et les tracés
de courbes. Plusieurs dimensions sont prédéfinies~: $verythin$,
$thin$, $medium$ et $thick$ (qui valent respectivement $0, 25$; $0,
75$; $1, 75$ et $4$). On peut opérer sur ces dimensions de
façon à obtenir n'importe quelle dimension désirée. On peut également
les redéfinir en utilisant les ordres postscript.
 
Pour modifier ces paramètres, on dispose des commandes |setlinewidth|
et |setcurvelinewidth|. 
 
Ainsi les séquences
$$
   \hbox {|medium setcurvelinewidth|}
      \qquad {\rm et} \qquad
   \hbox {|2 medium mul setcurvelinewidth|}
$$
sélectionnent-elles successivement l'épaisseur $medium$ pour le tracé
des courbes, puis une épaisseur double pour ce même tracé.
 
On dispose pour le moment de 3~types de tracés prédéfinis~: continu,
pointillé, ou mixte. Comme, pour des raisons que je ne m'explique pas,
le rendu est différent suivant que l'on prend le format jpeg ou le
format ps, on est obligé de préciser le format final.
 
Ainsi |continu| sélectionne le tracé continu, |pointilles| sélectionne
le tracé pointillé (pour postscript par défaut) et |mixte| sélectionne
le tracé mixte (pour postscript par défaut). On dispose en plus des
commandes |jpegpointilles|, |pspointilles|, |jpegmixte| et |psmixte|
qui sélectionnent le tracé convenable et change la valeur par
défaut. Ainsi, après la séquence de commande 
$$
   \hbox {|pointilles jpegpointilles continu psmixte pointilles|}
$$
le tracé pointillé pour format jpeg est sélectionné.
 
\paragraphe {Définition d'une fonction}
 
Pour définir une fonction, il faut utiliser le langage Postscript et
la manipulation de la pile. On a tout de même rajouté la commande
|setxvar| qui permet d'assigner à la variable |x| l'élement en haut de
la pile.
Les fonctions et constantes mathématiques reconnues sont~: 
 
\halign {
   % preamble
      &\hskip 30mm \cc {#}& #$\longrightarrow $ & #\hfil & #\qquad
   \cr
      $a$ $b$ |add|&& $a+b$
   \cr
      $a$ $b$ |sub|&& $a-b$
   \cr
      $a$ $b$ |mul|&& $a\times b$
   \cr
      $a$ $b$ |div|&& $a/b$
   \cr
      $a$ $b$ |idiv|&& quotient de la division euclidienne de $a$ par $b$
   \cr
      $a$ $b$ |mod|&& reste de la division euclidienne de $a$ par $b$
   \cr
      $a$ |sin|&& $\sin a$ ($a$ en degré)
   \cr                         
      $a$ |cos|&& $\cos a$ ($a$ en degré)
   \cr                         
      $a$ |tan|&& $\tan a$ ($a$ en degré)
   \cr
      $a$ |Sin|&& $\sin a$ ($a$ en radian)
   \cr                         
      $a$ |Cos|&& $\cos a$ ($a$ en radian)
   \cr                         
      $a$ |Tan|&& $\tan a$ ($a$ en radian)
   \cr
      |pi|&& $3, 141\, 59$
   \cr
      |e|&& $2, 718$
   \cr
      $a$ |Exp|&& $\exp (a) = e^a$
   \cr
      $a$ |ln|&& $\ln a$
   \cr
      $a$ |sqrt|&& $\sqrt a$
   \cr
      $a$ $n$ |exp|&& $a^n$
   \cr
      $a$ |abs|&& $|a|$
   \cr
      $a$ |neg|&& $-a$
   \cr
}
Plus quelques opérateurs utiles~: |ceiling|, |floor|, |round| et
      |truncate|, qui traitent de ce que l'on pense, et |rand| qui
      donne accès à un générateur aléatoire.
 
Par exemple, voici quelques définitions de fonctions, avec leur
équivalent mathématique~:
\halign {
   % preamble
      &\hskip 10mm \cc {#}& #$\longrightarrow $ & #\hfil & #\qquad
   \cr
      |/f $\{$$\}$ def|&& $f (x) = x$
   \cr
      |/f $\{$setxvar x$\}$ def|&& $f (x) = x$
   \cr
      |/f $\{$Sin$\}$ def|&& $f (x) = \sin x$
   \cr
      |/f $\{$setxvar x Sin$\}$ def|&& $f (x) = \sin x$
   \cr
      |/f $\{$2 add ln$\}$ def|&& $f (x) = \ln (x+2)$
   \cr
      |/f $\{$setxvar x 2 add ln$\}$ def|&& $f (x) = \ln (x+2)$
   \cr
      |/g $\{$setxvar x 2 add x neg 3 sub mul$\}$ def|&& $g (x) = (x+2)(-x-3)$
   \cr
      |/g $\{$setxvar x 2 exp 3 x mul add 2 sub$\}$ def|&& $g (x) =
      x^2 + 3x - 2$
   \cr
}
 
\paragraphe {Tracé d'une courbe de fonction numérique}
 
Il faut tout d'abord définir la fonction dont on veut la courbe. Cette
fonction doit obligatoirement s'appeller $f$ ou $g$.
 
La commande |tracecourbe| trace la courbe de la fonction $f$ sur
l'intervalle $[xmin, xmax]$. La commande |Tracecourbe| prend deux
nombres $a$ et $b$ en argument, et trace la courbe de la fonction $f$
sur l'intervalle $[a, b]$. 
 
On dispose des commandes analogues |tracegcourbe| et |Tracegcourbe|
pour la fonction $g$.
 
Par exemple, le fichier suivant génère le tracé, sur tout l'intervalle
considéré, de la courbe de la fonction $f$ définie par $f (x) = 3 + 2
\sin x$, ainsi que le tracé, sur l'intervalle $[1, 5]$, de la courbe
de la fonction $g$ définie par $g (x) = x + \cos (3x)$.
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      tracerepere
      0 0 point
      /f $\{$setxvar
         x Sin 2 mul 3 add
      $\}$ def
      /g $\{$setxvar
         3 x mul Cos x add
      $\}$ def
 
      tracecourbe
      mixte
      1 5 Tracegcourbe
      && ex_07.ps
   \cr
}}
$$
 
\paragraphe {Tracé de tangente à une courbe de fonction numérique}
 
Pour le moment, la courbe de la fonction $f$ est la seule pour
laquelle il soit prévu de pouvoir tracer des
tangentes. Malheureusement, il vous faudra tout de même calculer la
dérivée de la fonction $f$, et la coder dans $f'$. Une fois cela
accompli, la commande |tracetangente|, qui prend un nombre réel $a$ en
argument, tracera la tangente à la courbe de $f$ au point d'abscisse
$a$.
 
Le seul paramètre utilisé est |tailletangente| qui donne la longueur,
dans le repère, de la tangente tracée. On peut modifier ce paramètre
avec la commande |settailletangente|.
 
Par exemple, le fichier suivant génère le dessin de la courbe
représentative de la fonction $f$ avec quelques tangentes. La fonction
$f$ étant définie par $f (x) = 1 + x^2/2$, sa fonction dérivée est $f'
(x) = x$. 
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -5 5 setxrange
      traceaxes
      unites
      ticks
      /f $\{$setxvar
         x 2 exp .5 mul 1 add
      $\}$ def
      /f' $\{$setxvar
         x
      $\}$ def
      tracecourbe
      3.5 settailletangente
      1.5 tracetangente
      -1.5 tracetangente
      0 tracetangente
      && ex_08.ps
   \cr
}}
$$
 
\paragraphe {Hachurer un domaine plan limité par des courbes de fonctions}
 
Ici, pas besoin de calculer une primitive de la fonction $f$. La
commande |Hachurecourbe| permet de hachurer le domaine plan limité 
par la courbe de $f$, l'axe $Ox$, et les droites verticales dont
les abscisses sont passées en argument. La commande |hachurecourbe|
(sans argument) fait la même chose, mais avec les droites verticales
correspondant généralement aux bornes de la fenêtre de dessin
(variables $Xmin$ et $Xmax$, gérées par le programme).
 
Par exemple, le fichier suivant génère le dessin de la courbe
représentative de la fonction $f$ et un domaine hachuré. La fonction
$f$ est définie par $f (x) = 1 + (x-2)^2$.
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -1 6 setyrange
      -2 6 setxrange
 
      traceaxes
      unites
      ticks
      xmarks
 
      /f $\{$
         setxvar
         x -2 add 2 exp 1 add
      $\}$ def
 
      tracecourbe
      1 3 Hachurecourbe
      && ex_09.ps
   \cr
}}
$$
 
On peut également hachurer un domaine plan limité par les courbes
représentatives des 2~fonctions $f$ et $g$. On retrouve 2~commandes
analogues |hachurecourbes| et |Hachurecourbes|, la première sans
argument, et la deuxième avec deux.
 
Par exemple, le fichier suivant génère le dessin de la courbe
représentative des 2 fonctions $f$ et $g$ ainsi qu'un
domaine hachuré. Les fonctions $f$ et $g$ sont respectivement définies
par
$f (x) = {1\over 4} x^2 - 4$ et $g (x) = 4x - x^2$.
 
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -5 6 setxrange
      -6 5 setyrange
      tracerepere
      /f $\{$
         dup mul .25 mul 4 sub
      $\}$  def
      /g $\{$
         dup neg 4 add mul
      $\}$ def
      tracecourbe
      -.8 4 Hachurecourbes
      mixte
      tracegcourbe
      && ex_10.ps
   \cr
}}
$$
 
Pour les hachures, on dispose de 2~paramètres $hangle$ et $hstep$ qui
définissent respectivement l'angle (en degré) que font les hachures
avec l'horizontale ($-45^\circ $ par défaut), et l'écart entre
2~hachures ($4$ par défaut). On peut modifier ces paramètres avec les
commandes |sethangle| et |sethstep|.
 
\paragraphe {Courbes paramétrées}
 
Il est possible de dessiner des courbes décrites par un paramétrage du
type
$$
   t \mapsto (X (t), Y (t)).
$$
Pour cela, il faut définir les fonctions $X$ et $Y$, puis utiliser la
commande |tracecourbeparam|. 
 
On règle l'intervalle de dessin avec la commande |settrange|. Pour la
définition des fonctions $X$ et $Y$, on dispose des commandes
|setxvar| et |settvar| qui assignent l'élément en haut de la pile
respectivement à la variable $x$ ou à la variable $t$.
 
Pour tracer des tangentes, il faut définir les fonctions $X'$ et $Y'$,
puis utiliser la commande |traceptangente|. Comme dans le cas des
fonctions numériques, le paramètre |tailletangente| est utilisé. Ce
paramètre est modifiable avec la commande |settailletangente|.
 
Dans l'exemple ci-dessous, on génère le tracé de la courbe de la
fonction $f$ définie de $[-\pi ; \pi ]$ vers $\rset ^2$ par~:
$$
   f (t) = (2\cos t, 2 \sin (6t))
$$
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -3 3 setxrange
      -3 3 setyrange
      traceaxes
      unites
 
      pi neg pi settrange
      /X $\{$Cos 2 mul$\}$ def
      /Y $\{$6 mul Sin 2 mul$\}$ def
 
      /X' $\{$Sin -2 mul$\}$ def
      /Y' $\{$6 mul Cos 12 mul$\}$ def
      tracecourbeparam
      pi 4 div traceptangente
 
      && ex_15.ps
   \cr
}}
$$
 
\titre {Géométrie}
 
La géométrie est pour le moment le parent pauvre de ce script. Un
certain nombre de problèmes reste à régler, dont le moindre n'est pas
celui du choix d'un nom convenable pour chacune des commandes qu'il
est possible d'implémenter. En tout état de cause, ce qui suit n'est
absolument pas stabilisé, tant au niveau syntaxe qu'au niveau de la
représentation interne des objets, et il est à peu près sûr que ce qui
suit changera au cours du temps. Je suis intéressé par toute remarque,
critique ou suggestion à ce sujet.
 
\paragraphe {Quelques opérateurs pour la géométrie}
 
Quelques opérateurs disponibles~:
 
\halign {
   % preamble
      &\hskip 30mm \cc {#}& #$\longrightarrow $ & #\hfil & #\qquad
   \cr
      $A$ $B$ |distance|&& $AB$ (réel positif ou nul)
   \cr
      $A$ $B$ |milieu|&& $I$ (point)
   \cr
      $A$ $B$ |vecteur|&& $\overrightarrow {AB}$ (vecteur)
   \cr
      $A$ $B$ |verticale?|&& booléen
   \cr
      $A$ $B$ |coeffdir|&& $a$ (réel) si $(AB)$ n'est pas verticale~!
   \cr
      $A$ $B$ |ordorig|&& $b$ (réel) si $(AB)$ n'est pas verticale~!
   \cr
      $\vec u$ $\vec v$ |addv|&& $\vec u + \vec v$ (vecteur)
   \cr
      $\vec u$ $\vec v$ |subv|&& $\vec u - \vec v$ (vecteur)
   \cr
      $\vec u$ $a$ |mulv|&& $a \vec u$ (vecteur)
   \cr
}
 
\paragraphe {Tracé de droites, de segments, intersections de droites}
 
Pour le moment, la représentation principale d'une droite est la
donnée de 2~points distincts. On peut utiliser la commande |def| de
Postscript pour définir une droite nommée. Le programme offre
3~commandes~: |droite|, |tracesegment| et |intersectdroite|. Les
2~premières prennent une droite en argument (soit 2~points,
soit 4~nombres) et la dernière en prend deux pour déposer les
coordonnées d'un point sur la pile. Attention, comme toujours, il n'y
a pas de vérification autre que le |fatal error| dans la figure (c'est
mon côté Windows). Essayez de vérifier à l'avance que les droites dont
vous demandez l'intersection ne sont pas parallèles\dots
 
Un exemple~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      traceaxes
      unites
      /A $\{$4 1$\}$ def
      /B $\{$8 -1$\}$ def
      /C $\{$4 8$\}$ def
      /I $\{$A B O C intersectdroite$\}$ def
      I A B C O 5 points
      A B droite
      O C tracesegment
      setTimesItalic
      	 (I) I ultext
 
      && ex_11.ps
   \cr
}}
$$
 
\paragraphe {Tracé de lignes brisées, de polygônes}
 
On dispose des 2~commandes |ligne| et |polygone| qui
ont toutes deux une syntaxe du type
$$
   A_1 \ A_2 \ \ldots \ A_n \ n \hbox { |ligne|}
$$
où les $A_i$ sont des points. La différence entre ces deux commandes
est que |polygone| ferme le contour avant de faire le tracé.
 
Un exemple~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      traceaxes
      unites
 
      /A $\{$4 1$\}$ def
      /B $\{$8 -1$\}$ def
      /C $\{$4 8$\}$ def
 
      A B C O 4 points
 
      A B O C 4 ligne
      && ex_12.ps
   \cr
}}
$$
 
\paragraphe {Tracé de cercles, d'arcs de cercles}
 
Pour tracer un cercle, on utilise la commande |tracecercle| dont la
syntaxe est la suivante~:
$$
   A\ r \hbox { |tracecercle|}
$$
où $A$ est un point et $r$ le rayon. Le résultat est le tracé du
cercle de centre $A$ et de rayon $r$.
 
Pour tracer un arc de cercle, on dispose des 2~commandes |tracearc| et
|tracearcn| suivant que l'on trace, ou non dans le sens trigonométrique.
La syntaxe est la suivante~:
$$
   A\ r\ \theta _1 \ \theta _2 \hbox { |tracearc|}
$$
où $A$ est le centre, $r$ le rayon, $\theta _1$ l'angle de départ et
$\theta _2$ l'angle d'arrivée.
 
Par exemple~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      -1 5 setxrange
      -1 5 setyrange
      /a $\{$4$\}$ def
      /A $\{$a 0$\}$ def
      /B $\{$0 a$\}$ def
      /C $\{$A B milieu$\}$ def
 
      medium setcurvelinewidth
 
      O a 0 90 tracearc
      O B milieu a 2 div 90 -90 tracearcn
      O A milieu a 2 div 180 0 tracearcn
 
      C A C distance tracecercle
      setTimesItalic
      (A) A drtext
      (B) B ultext
      (C) C urtext
      (O) O dltext
      && ex_13.ps
   \cr
}}
$$
 
\paragraphe {Vecteurs}
 
Cette partie n'est pas du tout développée pour le moment. En
attendant, vous pouvez utiliser la commande |tracevecteur| qui
prend deux points $A$ et $B$ en argument, et qui se contente de tracer
le segment $[AB]$ et de mettre une flèche en $B$.
 
Par exemple~:
$$
\vcenter {\offinterlineskip \halign {
   % preamble 
      $\vcenter {\hsize 80mm \obeylines \obeyspaces \tt #}$& 
      #\qquad &
      \epsfxsize 50mm $\vcenter {\boxepsillustrate{#}}$
   \cr
 
      /A $\{$2 -1$\}$ def
      /B $\{$6 3$\}$ def
      /C $\{$-1 4$\}$ def
 
      1 1 setsubtkstep
      tracerepere
      A point
      A B tracevecteur
      A C tracevecteur
      C B tracevecteur
      && ex_17.ps
   \cr
}}
$$
 
\paragraphe {Transformations géométriques}
 
Pour les translations, on dispose de la commande |translatepoint| qui
prend un point $A$ et un vecteur $\vec u$ en argument, et qui dépose
sur la pile les coordonnées du point $B$ image de $A$ par la
translation de vecteur $\vec u$. On a également la commande
|translatedroite| qui agit de manière analogue, mais avec une droite
en argument. 
 
Pour les rotations, on dispose de la commande |rotatepoint| qui prend
en argument deux points $B$, $A$ ainsi qu'un angle $\theta $ en degré, et
qui dépose sur la pile les coordonnées du point $C$, image de $B$ par
la rotation de centre $A$, d'angle $\theta $.
 
\paragraphe {Chemin, définition d'un domaine plan}
 
En postscript, pour faire un tracé, on procède en deux temps~: tout
d'abord on crée le chemin du tracé, puis on l'encre. Toutes les
commandes $jps$ vues jusque là réalisents les 2~opérations
successivement. Pour certains dessins, il est nécessaire de séparer
les 2~opérations. En effet, un chemin, s'il est fermé, définit un
domaine plan, avec un intérieur et un extérieur, et il peut arriver
que l'on ait besoin de griser, ou de hachurer, un tel domaine.
 
\centerline {\bf à suivre\dots }
 
\paragraphe {Des exemples de réalisations}
 
\sparagraphe {Une cubique}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_01a.ps}
$$
\listing 0 {real_01a.jps}{le source |jps|}
 
\sparagraphe {La même, enrichie}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_01b.ps}
$$
\listing 0 {real_01b.jps}{le source |jps|}
 
\sparagraphe {Une courbe de baccalauréat}
 
\epsfxsize 80mm
$$\displaylines {
   \superboxepsillustrate {real_02.ps}
\cr
   f (x) = (x+1) e^{-2x} + x + 1
\cr
}$$
 
\listing 0 {real_02.jps}{le source |jps|}
 
\sparagraphe {Une autre courbe de baccalauréat}
 
\epsfxsize 80mm
$$\displaylines {
   \superboxepsillustrate {real_03.ps}
\cr
   f (x) = x - \ln x
      \qquad {\rm et} \qquad
   g (x) = x - \left( \ln x\right) ^2
\cr
}$$
 
\listing 0 {real_03.jps}{le source |jps|}
 
\sparagraphe {Représentation d'images de nombres complexes}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_04.ps}
$$
 
\listing 0 {real_04.jps}{le source |jps|}
 
\sparagraphe {Intersection de deux cubiques}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_05.ps}
$$
 
\listing 0 {real_05.jps}{le source |jps|}
 
\sparagraphe {Un dessin en géométrie}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_06.ps}
$$
 
\listing 0 {real_06.jps}{le source |jps|}
 
\sparagraphe {Un autre dessin en géométrie}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_09.ps}
$$
 
\listing 0 {real_09.jps}{le source |jps|}
 
\sparagraphe {Un cercle trigonométrique}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_07.ps}
$$
 
\listing 0 {real_07.jps}{le source |jps|}
 
\sparagraphe {Une courbe paramétrée}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {real_08.ps}
$$
 
\listing 0 {real_08.jps}{le source |jps|}
 
\sparagraphe {Un carré avec domaine hachuré}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {carre.ps}
$$
 
\listing 0 {carre.jps}{le source |jps|}
 
\sparagraphe {Un autre domaine hachuré}
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {cercle.ps}
$$
 
\listing 0 {cercle.jps}{le source |jps|}
 
\paragraphe {Résumé des opérateurs}
 
\tmpdimen = .0625\hsize
\tmpdimen = 10\tmpdimen
 
\def \entree#1#2#3{%
  && \llap {#1 } #2 &&&&& \vtop {\hsize = \tmpdimen #3\phantom {g}}\cr
  \vskip \lineskip
}
 
\settabs 16 \columns
 
\sparagraphe {La fenêtre de dessin}
 
\+ \entree {$num_1$ $num_2$}{|setxrange| $-$}{réglage de la largeur de
la fenêtre de dessin, affecte $num_1$ à $xmin$ et $num_2$ à $xmax$}
\+ \entree {$num_1$ $num_2$}{|setyrange| $-$}{réglage de la hauteur de
la fenêtre de dessin, affecte $num_1$ à $ymin$ et $num_2$ à $ymax$}
\+ \entree {$num$}{|setxmin| $-$}{affecte $num$ à $xmin$}
\+ \entree {$num$}{|setxmax| $-$}{affecte $num$ à $xmax$}
\+ \entree {$num$}{|setymin| $-$}{affecte $num$ à $ymin$}
\+ \entree {$num$}{|setymax| $-$}{affecte $num$ à $ymax$}
\+ \entree {$num$}{|setborder| $-$}{}
\+ \entree {$num$}{|setwidth| $-$}{}
\+ \entree {$num$}{|setheight| $-$}{}
 
\sparagraphe {Le tracé du repère}
 
\+ \entree {$-$}{|O| 0 0}{place les coordonnées de l'origine $O (0,
0)$ sur la pile}
\+ \entree {$-$}{|tracerepere| $-$}{trace les deux axes du repère avec les unités,
les ticks et les subticks}
\+ \entree {$-$}{|traceOx| $-$}{trace l'axe $Ox$}
\+ \entree {$-$}{|traceOy| $-$}{trace l'axe $Oy$}
\+ \entree {$-$}{|traceaxes| $-$}{trace les axes $Ox$ et $Oy$}
\+ \entree {$num_1$ $num_2$}{|setorigine| $-$}{définit le point $(num_1, num_2)$
comme origine pour le tracé des axes}
\+ \entree {$-$}{|axeOxarrow| $-$}{trace la flèche au bout de l'axe $Ox$}
\+ \entree {$-$}{|axeOyarrow| $-$}{trace la flèche au bout de l'axe $Oy$}
\+ \entree {$-$}{|axesarrow| $-$}{trace les flèches au bout des axex}
\+ \entree {$-$}{|ticks| $-$}{trace les graduations sur les axes}
\+ \entree {$-$}{|xticks| $-$}{trace les graduations sur l'axe $Ox$}
\+ \entree {$-$}{|yticks| $-$}{trace les graduations sur l'axe $Oy$}
\+ \entree {$num$}{|xtick| $-$}{trace la graduation d'abscisse $num$ sur l'axe $Ox$}
\+ \entree {$num$}{|ytick| $-$}{trace la graduation d'ordonnée $num$ sur l'axe $Oy$}
\+ \entree {$-$}{|subticks| $-$}{trace les sous-graduations sur les axes}
\+ \entree {$-$}{|xsubticks| $-$}{trace les sous-graduations sur l'axe $Ox$}
\+ \entree {$-$}{|ysubticks| $-$}{trace les sous-graduations sur l'axe $Oy$}
\+ \entree {$num$}{|xsubtick| $-$}{trace la sous-graduation d'abscisse $num$ sur l'axe $Ox$}
\+ \entree {$num$}{|ysubtick| $-$}{trace la sous-graduation d'ordonnée $num$ sur l'axe $Oy$}
\+ \entree {$-$}{|marks| $-$}{inscrit les valeurs des graduations
(marques) sur les axes}
\+ \entree {$-$}{|xmarks| $-$}{inscrit les valeurs des graduations
(marques) sur l'axe $Ox$}
\+ \entree {$-$}{|ymarks| $-$}{inscrit les valeurs des graduations
(marques) sur l'axe $Oy$}
\+ \entree {$num$}{|xmark| $-$}{inscrit la valeur de la graduation
d'abscisse $num$ sur l'axe $Ox$} 
\+ \entree {$num$}{|ymark| $-$}{inscrit la valeur de la graduation
d'ordonnée $num$ sur l'axe $Oy$} 
\+ \entree {$num$}{|setxmkstep| $-$}{définit la valeur du pas pour les
marques sur l'axe $Ox$}
\+ \entree {$num$}{|setymkstep| $-$}{définit la valeur du pas pour les
marques sur l'axe $Oy$}
\+ \entree {$num$}{|setxtkstep| $-$}{définit la valeur du pas pour les
graduations sur l'axe $Ox$}
\+ \entree {$num$}{|setytkstep| $-$}{définit la valeur du pas pour les
graduations sur l'axe $Oy$}
\+ \entree {$num$}{|setxtkstep| $-$}{définit la valeur du pas pour les
sous-graduations sur l'axe $Ox$}
\+ \entree {$num$}{|setytkstep| $-$}{définit la valeur du pas pour les
sous-graduations sur l'axe $Oy$}
\+ \entree {$-$}{|unites| $-$}{trace les flèches pour représenter les
vecteurs unitaires définissant le repère}
\+ \entree {$-$}{|quadrillage| $-$}{trace le quadrillage défini par
les paramètres $ystquadrillage$, $quadrillagegray$ et $xstquadrillage$}
\+ \entree {$num$}{|setxstquadrillage| $-$}{définit le pas horizontal
pour le quadrillage}
\+ \entree {$num$}{|setystquadrillage| $-$}{définit le pas vertical
pour le quadrillage}
\+ \entree {$num$}{|setquadrillagegray| $-$}{définit le niveau de gris
du quadrillage (de 0 à 1)}
 
\sparagraphe {}
\+ \entree {$point$}{|point| $-$}{}
\+ \entree {$point_1$ $\ldots $ $point_n$ $n$}{|points| $-$}{}
\+ \entree {$point$}{|dashpoint| $-$}{}
\+ \entree {$point_1$ $\ldots $ $point_n$ $n$}{|dashpoints| $-$}{}
 
\sparagraphe {Polices de caractères}
 
\+ \entree {$num$}{|setfontsize| $-$}{affecte la taille de police à $num$}
\+ \entree {$-$}{|setTimes| $-$}{sélectionne la police Times comme police courante}
\+ \entree {$-$}{|setTimesItalic| $-$}{sélectionne la police TimesItalic comme police courante}
\+ \entree {$-$}{|setTimesBold| $-$}{sélectionne la police TimesBold comme police courante}
\+ \entree {$-$}{|setTimesBoldItalic| $-$}{sélectionne la police TimesBoldItalic comme police courante}
\+ \entree {$-$}{|setCourrier| $-$}{sélectionne la police Courrier
comme police courante} 
\+ \entree {$-$}{|setCourrierItalic| $-$}{sélectionne la police
CourrierItalic comme police courante} 
\+ \entree {$-$}{|setCourrierBold| $-$}{sélectionne la police
CourrierBold comme police courante} 
\+ \entree {$-$}{|setCourrierBoldItalic| $-$}{sélectionne la police
CourrierBoldItalic comme police courante} 
\+ \entree {$-$}{|setPalatino| $-$}{sélectionne la police Palatino
comme police courante} 
\+ \entree {$-$}{|setPalatinoItalic| $-$}{sélectionne la police 
PalatinoItalic comme police courante} 
\+ \entree {$-$}{|setPalatinoBold| $-$}{sélectionne la police
PalatinoBold comme police courante} 
\+ \entree {$-$}{|setPalatinoBoldItalic| $-$}{sélectionne la police
PalatinoBoldItalic comme police courante} 
\+ \entree {$-$}{|setSymbol| $-$}{sélectionne la police Symbol comme
police courante} 
\+ \entree {$-$}{|setSymbolItalic| $-$}{sélectionne la police
SymbolItalic comme police courante} 
\+ \entree {$-$}{|setSymbolBold| $-$}{sélectionne la police SymbolBold
comme police courante} 
\+ \entree {$-$}{|setSymbolBoldItalic| $-$}{sélectionne la police
SymbolBoldItalic comme police courante} 
 
\+ \entree {$chaine$ $point$}{|dltext| $-$}{dessine les caractères de
 $chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|drtext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|dtext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|ltext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|rtext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|text| $-$}{dessine les caractères de $chaine$
sur la page ... du point $point$}
\+ \entree {$chaine$ $point$}{|ultext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$} 
\+ \entree {$chaine$ $point$}{|urtext| $-$}{dessine les caractères de
$chaine$ sur la page ... du point $point$}
\+ \entree {$chaine$ $point$}{|utext| $-$}{dessine les caractères de $chaine$
sur la page ... du point $point$}
\+ \entree {$chaine$}{|indice| $-$}{réduction de la taille de la
police courante de $70\% $, déplacement vertical adapté du point
courant, dessin des caractères de $chaine$, rétablissement de la
police courante à sa taille initiale, puis re\-po\-si\-tion\-ne\-ment du point
courant sur la ligne de base.} 
\+ \entree {$chaine$}{|exposant| $-$}{réduction de la taille de la
police courante de $70\% $, déplacement vertical adapté du point
courant, dessin des caractères de $chaine$, rétablissement de la
police courante à sa taille initiale, puis re\-po\-si\-tion\-ne\-ment du point
courant sur la ligne de base.} 
 
\sparagraphe {Type de tracé}
 
\+ \entree {$num$}{|setlinewidth| $-$}{}
\+ \entree {$num$}{|setcurvelinewidth| $-$}{}
\+ \entree {$-$}{|continu| $-$}{}
\+ \entree {$-$}{|pointilles| $-$}{}
\+ \entree {$-$}{|mixte| $-$}{}
\+ \entree {$-$}{|jpegpointilles| $-$}{}
\+ \entree {$-$}{|pspointilles| $-$}{}
\+ \entree {$-$}{|jpegmixte| $-$}{}
\+ \entree {$-$}{|psmixte| $-$}{}
 
\sparagraphe {Opérateurs mathématiques}
 
\sparagraphe {Tracé de courbes de fonctions numériques}
 
\+ \entree {}{|setxvar| $-$}{}
\+ \entree {}{|tracecourbe| $-$}{}
\+ \entree {}{|Tracecourbe| $-$}{}
\+ \entree {}{|tracegcourbe| $-$}{}
\+ \entree {}{|Tracegcourbe| $-$}{}
\+ \entree {}{|tracetangente| $-$}{}
\+ \entree {}{|tailletangente| $-$}{}
\+ \entree {}{|settailletangente| $-$}{}
 
\sparagraphe {Hachurer un domaine plan limité par des courbes de
fonctions numériques}
 
\+ \entree {}{|Hachurecourbe| $-$}{}
\+ \entree {}{|hachurecourbe| $-$}{}
\+ \entree {}{|hachurecourbes| $-$}{}
\+ \entree {}{|Hachurecourbes| $-$}{}
\+ \entree {}{|sethangle| $-$}{}
\+ \entree {}{|sethstep| $-$}{}
 
\sparagraphe {Tracé de courbes paramétrées}
 
\+ \entree {}{|tracecourbeparam| $-$}{}
\+ \entree {}{|settrange| $-$}{}
\+ \entree {}{|setxvar| $-$}{}
\+ \entree {}{|settvar| $-$}{}
\+ \entree {}{|traceptangente| $-$}{}
\+ \entree {}{|tailletangente| $-$}{}
\+ \entree {}{|settailletangente| $-$}{}
 
\sparagraphe {opérateurs mathématiques pour la géométrie}
 
\+ \entree {}{|distance| $-$}{}
\+ \entree {}{|milieu| $-$}{}
\+ \entree {}{|vecteur| $-$}{}
\+ \entree {}{|verticale?| $-$}{}
\+ \entree {}{|coeffdir| $-$}{}
\+ \entree {}{|ordorig| $-$}{}
\+ \entree {}{|addv| $-$}{}
\+ \entree {}{|subv| $-$}{}
\+ \entree {}{|mulv| $-$}{}
\+ \entree {}{|def| $-$}{}
\+ \entree {}{|intersectdroite| $-$}{}
\+ \entree {}{|translatepoint| $-$}{}
\+ \entree {}{|translatedroite| $-$}{}
\+ \entree {}{|rotatepoint| $-$}{}
 
\sparagraphe {Tracés géométriques}
 
\+ \entree {}{|droite| $-$}{}
\+ \entree {}{|tracesegment| $-$}{}
\+ \entree {}{|ligne| $-$}{}
\+ \entree {}{|polygone| $-$}{}
\+ \entree {}{|ligne| $-$}{}
\+ \entree {}{|polygone| $-$}{}
\+ \entree {}{|tracecercle| $-$}{}
\+ \entree {}{|tracecercle| $-$}{}
\+ \entree {}{|tracearc| $-$}{}
\+ \entree {}{|tracearcn| $-$}{}
\+ \entree {}{|tracearc| $-$}{}
\+ \entree {}{|tracevecteur| $-$}{}
 
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
\+ \entree {}{}{}
 
%% 	 $a$ $b$ |add|&& $a+b$
%%    \cr
%% 	 $a$ $b$ |sub|&& $a-b$
%%    \cr
%% 	 $a$ $b$ |mul|&& $a\times b$
%%    \cr
%% 	 $a$ $b$ |div|&& $a/b$
%%    \cr
%% 	 $a$ $b$ |idiv|&& quotient de la division euclidienne de $a$ par $b$
%%    \cr
%% 	 $a$ $b$ |mod|&& reste de la division euclidienne de $a$ par $b$
%%    \cr
%% 	 $a$ |sin|&& $\sin a$ ($a$ en degré)
%%    \cr                         
%% 	 $a$ |cos|&& $\cos a$ ($a$ en degré)
%%    \cr                         
%% 	 $a$ |tan|&& $\tan a$ ($a$ en degré)
%%    \cr
%% 	 $a$ |Sin|&& $\sin a$ ($a$ en radian)
%%    \cr                         
%% 	 $a$ |Cos|&& $\cos a$ ($a$ en radian)
%%    \cr                         
%% 	 $a$ |Tan|&& $\tan a$ ($a$ en radian)
%%    \cr
%% 	 |pi|&& $3, 141\, 59$
%%    \cr
%% 	 |e|&& $2, 718$
%%    \cr
%% 	 $a$ |Exp|&& $\exp (a) = e^a$
%%    \cr
%% 	 $a$ |ln|&& $\ln a$
%%    \cr
%% 	 $a$ |sqrt|&& $\sqrt a$
%%    \cr
%% 	 $a$ $n$ |exp|&& $a^n$
%%    \cr
%% 	 $a$ |abs|&& $|a|$
%%    \cr
%% 	 $a$ |neg|&& $-a$
%%    \cr
%% }
%% Plus quelques opérateurs utiles~: |ceiling|, |floor|, |round| et
%% 	 |truncate|, qui traitent de ce que l'on pense, et |rand| qui
%% 
\titre {Les projets}
 
La couleur, plus tout ce qu'il faut pour obtenir facilement des dessins comme ceux
présentés ci-dessous, plus beaucoup d'autre (suites récurrentes du
type $u_{n+1} = f (u_n)$, génération de
suites aléatoires et des courbes de fréquence associées, de nuages de
points aléatoires, des courbes de lois binomiales à partir des
paramètres, etc\dots )
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {futur_01.ps}
$$
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {futur_02.ps}
$$
 
\epsfxsize .9\hsize
$$
   \superboxepsillustrate {futur_06.ps}
$$
 
\epsfxsize 120mm
$$
   \superboxepsillustrate {futur_03.ps}
$$
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {futur_04.ps}
$$
 
\epsfxsize 80mm
$$
   \superboxepsillustrate {futur_05.ps}
$$
 
 
%% \paragraphe {Les rectangles de Riemann}
%% 
%% \paragraphe {Familles de courbes}
%% 
%% \paragraphe {Suites numériques}
%% 
%% \paragraphe {Suites récurrentes}
 
 
\bye