\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