8.3 Macros de draw2d.mac
Ce modèle est désormais automatiquement chargé. Il gère notamment
différentes sortes de marqueurs et propose une unification des commandes de dessin
sous la forme :
draw("type", <données>, [options locales])
Les options sont une liste d’affectations <paramètre> := < valeur >,
ces affectations sont locales. Les paramètres peuvent être des attributs
prédéfinis comme FillStyle, LineStyle, ..., ou bien des paramètres définis
par le modèle. La valeur par défaut des attributs prédéfinis est leur
valeur courante au moment de l’appel à la commande draw. La valeur par
défaut des paramètres définis par le modèle sera vue dans les sections
suivantes.
Types de base :
- dot : pour dessiner une liste de points. Un nouveau style de point est
défini à l’occasion, c’est le style pix (pour pixel) ainsi que les exports
correspondants,
- label : pour afficher un label, ce type est utilisé par les autres mis à
part dot,
- path : pour dessiner un chemin, les éventuels marqueurs sont pris en
compte dans les options, ainsi qu’un gradient de ligne, l’attribut Arrows
est également pris en compte.
Types secondaires reprenant des commandes prédéfinies :
- bezier : pour dessiner une succession de courbes de Bézier, ce type
hérite du type path,
- ellipse : pour dessiner ellipse, ce type hérite du type path,
- ellipticArc : pour dessiner un arc d’ellipse, ce type hérite du type path,
- line : pour dessiner une ligne polygonale, ce type hérite du type path,
- cartesian : pour dessiner une courbe cartésienne, ce type hérite du
type line,
- polar : pour dessiner une courbe polaire, ce type hérite du type line,
- parametric : pour dessiner une courbe paramétrique, ce type hérite du
type line,
- implicit : pour dessiner une courbe implicite, ce type hérite du type
line,
- odeint : pour dessiner une solution à une équation différentielle, ce
type hérite du type line,
- spline : pour dessiner une courbe spline, ce type hérite du type path,
- straightL : pour dessiner une droite à partir de son équation ou de
deux points, ce type hérite du type line.
Types supplémentaires :
- angleD : pour dessiner un angle droit, ce type hérite du type line,
- arc : pour dessiner un arc de cercle, ce type hérite du type path,
- circle : pour dessiner un cercle, ce type hérite du type path,
- periodic : pour dessiner une courbe de fonction périodique, ce type
hérite du type line,
- halfPlane : pour dessiner un demi-plan à partir d’une inéquation, ce
type hérite du type line,
- seg : pour dessiner un segment, ce type hérite du type line,
- interval : pour dessiner un intervalle, ce type hérite du type seg.
8.3.1 Options pour des lignes en dégradé
Pour avoir un dégradé dans le tracé d’un contour, les options sont :
- LineStyle:=gradient annonce un tracé en dégradé, cette option
pouvant être globale car par défaut c’est la valeur courante de
LineStyle qui est prise en compte,
- LineColorA := < couleur > définit la couleur de départ, white par
défaut,
- LineColorB := < couleur > définit la couleur d’arrivée, red par
défaut,
- GradLineStep := < longueur en cm > définit la longueur des morceaux
de couleur unie, 0.25cm par défaut
8.3.2 Options pour les marqueurs
Pour ajouter des marqueurs le long d’un chemin, il y a deux options et celles-ci seront
appliquées à chaquecomposante connexe de la ligne :
- marker := < [pos1, mark1, pos2, mark2, ...] > définit la liste des
marqueurs et leur position. Les positions (pos1, pos2, ...) sont des
nombres compris entre 0 et 1, 0 indiquant le début de la composante
et 1 la fin. Les valeurs mark1, mark2, ..., sont des valeurs représentant
des marqueurs, ceux-ci sont énumérés dans la figure suivante.
- scale := < entier positif > permet de modifier la taille des marqueurs, sa
valeur est par défaut est celle de CurrentArrowScale (qui est une variable
globale initialisée à 1, une modification de cette variable permet de
modifier globalement la taille des marqueurs).
figureListes des marqueurs
Figure 8.1 – Listes des marqueurs
NB : par défaut un marqueur fermé se termine au même point que le
segment, un marqueur ouvert est ajouté au bout du segment, pour inverser la
situation il suffit de remplacer le marqueur par son opposé (-Orc, -Carc,
...).
Les types path et line (et donc tous les types qui utilisent ces deux là) testent
l’attribut Arrows et ajoutent des marqueurs lorsque cet attribut vaut 1 ou 2. Par
défaut la flèche ajoutée est Carrow, mais il est possible de changer la flèche par
défaut avec le paramètre global :
CurrentArrow := < marker >
8.3.3 Le type dot
draw("dot", <[liste de points 2d]>, [options])
- Description : lorsque l’attribut DotStyle n’a pas la valeur pix, la
commande a le même effet que la commande Dot<liste de points
2d>) à la différence près que la modification des attributs
prédéfinis dans les options est locale.
- Lorsque l’attribut DotStyle a la valeur pix, les points sont dessinés sous
forme de pixels, ceux-ci ne seront visibles que si l’élément graphique
contient l’instruction : NewBitmap(). Un export vectoriel a été
prévu en eps et en tikz/pgf, sinon un export bitmap est toujours possible.
Il est à noter que l’export tikz/pgf sature très vite la mémoire de
TeX lorsque le nombre de pixels augmente, l’export eps est donc à
privilégier.
- NB : le style de point pix n’est utilisable que dans l’interface graphique
de TeXgraph.
8.3.4 Le type label
draw("label", "texte1", [options1], "texte2", [options2], ...)
- Description : comme la commande Label, cette commande permet de
placer un ou plusieurs labels.
-
Les options sont :
- anchor := < affixe > définit le point d’ancrage du label (valeur Nil
par défaut),
- labeldir := < North/NE/East/SE/South/SW/West/NW > indique
la position du label par rapport au point d’ancrage. La distance est
de 0.25 cm par défaut et peut être modifiée avec le paramètre
labelsep. On peut personnaliser le positionnement avec la syntaxe
labeldir := < [distance, direction] > où direction est un vecteur non
nul. Par défaut la valeur de ce paramètre est Nil.
- labelsep := < distance > pour modifier la distance du label au point
d’ancrage lorsque le paramètre labeldir est une des huit constantes
citées ci-dessus. La valeur est de 0.25 cm par défaut.
- showdot := < 0/1 > permet d’afficher ou non le point d’ancrage, la
valeur est 0 par défaut.
La mise des options à leur valeur par défaut est faite une seule fois (avant
l’évaluation de [options1]). Cette commande est utilisée par tous les types
qui vont suivre. Afin d’éviter d’éventuelles incohérences dans les attributs
lorsque le style framed est utilisé, la commande exécute la macro
framestyle(). Cette macro n’existe pas par défaut et peut être créée
ainsi :
setframestyle([FillStyle:=full, LineStyle:=noline])
- IMPORTANT : l’option globale TeXifyLabels := 0/1 (0 par défaut)
permet d’avoir les labels compilés par TeX dans les exports eps et
svg.
8.3.5 Le type path
draw("path", <commande path>, [options])
- Description : c’est la commande de base pour le dessin de chemins,
elle utilise pour cela la commande Path(<commande path>), mais
elle permet également l’utilisation de marqueurs le long du chemin, ce
chemin pouvant être lui-même dessiné avec un dégradé entre deux
couleurs.
-
On peut donc utiliser les options de marqueurs (p.309), les options de tracé
de lignes en dégradé (p.309), en plus des attributs prédéfinis. À cela
s’ajoute des options pour gérer un label :
- legend := < "texte" > permet d’ajouter un label, lorsque les
paramètres anchor et labelpos sont à Nil (valeur par défaut), le
texte est placé au centre de gravité du chemin.
- labelcolor := < couleur > si le label doit être d’une autre couleur
que le chemin.
- anchor := < affixe > définit le point d’ancrage du label (Nil par
défaut), lorsque la valeur n’est pas donnée, c’est le paramètre
labelpos qui est pris en compte.
- labelpos := < nombre dans [0;1] > permet de placer le label le long
du chemin, la valeur 0 représente le premier point et la valeur 1
représente le dernier. La valeur par défaut est Nil.
- labeldir := < North/NE/East/SE/South/SW/West/NW > indique
la position du label par rapport au point d’ancrage, mais lorsque les
paramètres anchor et labelpos sont à Nil (valeur par défaut), il
s’agit de la position par rapport au rectangle qui englobe le chemin.
La distance au point d’ancrage est de 0.25 cm par défaut et peut
être modifiée avec le paramètre labelsep. On peut personnaliser
le positionnement par rapport au point d’ancrage avec la syntaxe
labeldir := < [distance, direction] > où direction est un vecteur non
nul. Par défaut la valeur de ce paramètre est Nil.
- labelsep := < distance > pour modifier la distance du label au point
d’ancrage lorsque le paramètre labeldir est une des huit constantes
citées ci-dessus. La valeur est de 0.25 cm par défaut.
- showdot := < 0/1 > permet d’afficher ou non le point d’ancrage, la
valeur est 0 par défaut.
-
Et des options enrichissant le type de tracé de ligne :
- lineborder := < épaisseur >, ajoute une bordure de part et d’autre
de la ligne de l’épaisseur voulue. Cette épaisseur est nulle par
défaut (c’est à dire pas de bordure).
- bordercolor := < couleur >, précise la couleur de la bordure lorsqu’il
y en a une, white par défaut.
- doubleline := < 0/1 >, permet de tracer ou non une double ligne.
- doublesep := < épaisseur >, épaisseur du trait central lorsqu’il y a
double ligne. Par défaut, celle-ci est 1.25 fois l’épaisseur courante.
- doublecolor := < couleur >, précise la couleur du trait central
lorsqu’il y a double ligne, white par défaut.
| |
- \begin[name=typepath, file]
- Graph image = [
- view(-5,5,-5,5),Marges(0,0,0.25,0.25),size(7.5),
- draw("path",[carre(Xmin+i*Ymin,Xmax+i*Ymin,1),line,closepath],
- [FillStyle:=gradient, GradAngle:=-90, FillColorB:=lightgray,
- LineStyle:=noline]),
- draw("path",[-4.5+2*i,-2+2*i,circle],[doubleline:=1,
- doublecolor:=red,Width:=12,FillStyle:=gradient,
- GradStyle:=radial,GradColor:=white+i*darkblue,
- legend:="$S$"]),
- draw("path",[-4-4*i,-1,3-3*i,4+i,bezier],
- [LineStyle:=gradient,LineColorA:=yellow,Width:=12,
- Arrows:=1,marker:=[0,Line,0.5,Carrow],scale:=1.5,
- legend:="$L$",labelpos:=0.55, labeldir:=North]),
- draw("path",[carre(-1-0.6*i,1.7-0.6*i,-1),line,closepath],
- [lineborder:=20,Color:=darkgreen,FillStyle:=full,
- FillOpacity:=0.3,FillColor:=cyan])
- ];
- \end
| |
| |
Exemple avec le type
path.
8.3.6 Le type bezier
draw("bezier", <[P1,c1,c2,P2,c3,c4,P3,...]>, [options])
- Description : comme la commande Bezier, cette commande dessine une
courbe de Bézier passant par les points (affixes) P1,...,Pn. Les points
(affixes) c1, c2 , c3, c4, ... sont les points de contrôle, deux points de
contrôle consécutifs peuvent être remplacés par la constante jump
pour représenter un segment.
- Les options sont celles du type path (p.314). La valeur de la variable
NbPoints est également prise en compte.
8.3.7 Le type ellipse
draw("ellipse", <[centre,rayonX,rayonY,inclinaison]>, [options])
- Description : comme la commande Ellipse, cette commande dessine une
ellipse. L’inclinaison est en degrés, par rapport à Ox, elle est facultative
et vaut 0 par défaut.
- Les options sont celles du type path (p.314).
8.3.8 Le type ellipticArc
draw("ellipticArc", <[B,A,C,rX,rY,sens(+/-1),inclinaison]>,
[options])
- Description : comme la macro ellipticArc, cette commande dessine un
arc d’ellipse de centre le point A (affixe), de rayons rX et rY , allant de
B à C (affixes), dans le sens trigonométrique ou inverse, et avec une
inclinaison (en degrés) par rapport à Ox (l’inclinaison est facultative
et vaut 0 degré par défaut).
- Les options sont celles du type path (p.314).
8.3.9 Le type line
draw("line", <[liste de points 2d]>, [options])
8.3.10 Le type cartesian
draw("cartesian", <f(x)>, [options])
8.3.11 Le type polar
draw("polar", <r(t)>, [options])
8.3.12 Le type parametric
draw("parametric", <f(t)>, [options])
| |
- \begin[name=courbes, file]
- Graph image = [
- view(-5,5,-5,5), Marges(0,0,0,0), size(7.5),
- draw("line",carre(Xmin+i*Ymin,Xmax+i*Ymin,1),
- [close:=1,LineStyle:=noline,FillStyle:=gradient,
- GradAngle:=-45,FillColorB:=darkgray]),
- draw("polar",2*(1+cos(t)),[t:=[-pi,pi],Width:=12,
- FillStyle:=gradient,Width:=8,FillColorB:=darkblue,
- GradStyle:=radial, GradCenter:=0.5+0.5*i,
- legend:="$\rho(t)=2(1+\cos(t))$",labeldir:=South]),
- draw("parametric",2*(cos(2*t)+i*sin(3*t))-2.5+2.5*i,
- [t:=[pi/2,pi+pi/2],Width:=24,LineStyle:=gradient,
- LineColorA:=yellow,LineColorB:=red,
- GradLineStep:=0.25,Width:=8,legend:="$\cal C$",
- labelpos:=0.25, labeldir:=West] ),
- draw("axes",[0,1+i],Arrows:=1),
- draw("cartesian",Ent(x),[x:=[-4,4],discont:=1,
- Color:=seagreen, marker:=[0,dot,1,Oarc],Width:=8])
- ];
- \end
| |
| |
Exemple de tracés de courbes.
NB : on voit sur cet exemple que le départ en blanc du gradient de la
cardioïde n’est pas au centre alors qu’il devrait l’être, ce problème se produit
uniquement avec le code TeXgraph dans le source LaTeX, et manifestement c’est le
\pgfdeclareradialshading de la figure précédente qui a été pris en compte. Il
semblerait que la nouvelle déclaration n’ait pas effacé pas l’ancienne... Bizarrerie
de pgf?
8.3.13 Le type implicit
draw("implicit", <f(x,y)>, [options])
8.3.14 Le type odeint
draw("odeint", <f>, <t0>, <Y0>, [options])
8.3.15 Le type periodic
draw("periodic", <f(x)>, [options])
| |
- \begin[name=periodic, file]
- Graph image = [
- view(-5,5,-5,5), size(7.5),
- Axes(0,1+i), Width:=8,
- draw("periodic",if x>0 then 4 else 2 fi,[period:=[-1,1],
- discont:=1, Color:=red]),
- draw("periodic",2*abs(x)-1,[period:=[-1,1], Color:=blue]),
- draw("periodic", sin(x)-3, [period:=[-pi/2,pi/2],
- Color:=magenta])
- ];
- \end
| |
| |
Fonctions périodiques
8.3.16 Le type spline
draw("spline", [V1,A1,...,An,Vn], [options])
- Description : comme la commande Spline, cette commande dessine une
spline cubique passant par les points (affixes) A1,...,An. Les vecteurs
(affixes) V 1, et V n sont les vecteurs tangents aux extrémités, lorsque
V 1 et/ou V 2 sont nuls, l’extrémité est libre. Ce type hérite du type
path ce qui permet l’utilisation des options de marqueurs (p.309), des
options de tracé de lignes en dégradé (p.309), des options pour tracer
une ligne double ou bordée (p.313), et des options pour un éventuel
label (p.312).
- Les options sont celles du type path (p.314). La valeur de la variable
NbPoints est également prise en compte.
8.3.17 Le type straightL
draw("straightL", <a*x+b*y=c ou [A,B]>, [options])
| |
- \begin[name=straightL, file]
- Graph image = [
- view(-4,4,-4,4), Marges(0.25,0.25,0.25,0.25), size(7.5),
- draw("axes",[0,1+i],[Arrows:=1, nbsubdiv:=[2,2],grid:=1]),
- Width:=8,
- draw("straightL",x+2*y=2,[Color:=blue,legend:="$x+2y=2$",
- rotation:=1]),
- draw("straightL",x=-3,[Color:=crimson,labelpos:=0.1,
- legend:="$x=-3$",LabelStyle:=left]),
- draw("straightL",[-2-2*i,1],[Color:=darkgreen,
- labelpos:=0.85,legend:="$\cal D$"]),
- draw("label","$A$", [anchor:=-2-2*i,labeldir:=NW,showdot:=1],
- "$B$", [anchor:=1])
- ];
- \end
| |
| |
Exemple avec le type
straightL.
8.3.18 Le type seg
draw("seg", <[A,B]>, [options])
| |
- \begin[name=seg, file]
- Graph image = [
- view(-4,4,-4,4), Marges(0,0,0,0), size(7.5),
- v:=-1.5*i, seg:=shift([-3+4*i,3+5*i], v),
- draw("seg", seg, [legend:="segment", Arrows:=1] ),
- seg:=shift(seg,v),
- draw("seg", seg, [legend:="segment", labelsep:=0,
- marker:=[0,Oarc,1,Oarc] ] ),
- seg:=shift(seg,v),
- setframestyle([FillStyle:=full, LineStyle:=noline,
- FillColor:=white]),
- draw("seg", seg, [legend:="segment", labelsep:=0,
- Arrows:=2 ] ),
- seg:=shift(seg,v),
- draw("seg", seg, [legend:="segment", labelpos:=0.25,
- labelsep:=-0.25, LineStyle:=dashed, LabelStyle:=left,
- rotation:=0, marker:=[0,dot,0.75,Cscissors,1,dot]]),
- seg:=shift(seg,v),
- draw("seg", seg, [legend:="segment", LabelStyle:=left,
- labelsep:=-0.25, showdot:=1, rotation:=0,
- LabelAngle:=-90, marker:=[0,Line,1,CParrow]])
- ];
- \end
| |
| |
Exemple avec le type
seg.
8.3.19 Le type interval
draw("interval", <[A,B]>, [options])
| |
- \begin[name=interval, file]
- Graph image = [
- view(-4,4,-1.5,2), Marges(0,0,0,0), size(7.5),
- dollar:=1, LabelSize:=footnotesize,
- v:=i, axeX([v,1],1),
- draw("interval", [-1+v,3+v], [legend:="$(x+1)(x-3)<0$",
- labelsep:=0.5, marker:="][", Width:=8, Color:=crimson]),
- v:=-i, dollar:=1, axeX([v,1],1),
- draw("interval", [-4.5+v,-1+v],
- [legend:="$(x+1)(x-3)\geqslant0$", labeldir:=North,
- anchor:=1+v, marker:="]]", Width:=8, Color:=darkblue]),
- draw("interval", [3+v,4.5+v],
- [marker:="[[", Width:=8, Color:=darkblue])
- ];
- \end
| |
| |
Exemple avec le type
interval.
8.3.20 Le type halfPlane
draw("halfPlane", <a*x+b*y<=c>, [options])
| |
- \begin[name=halfPlane, file]
- Graph image = [
- view(-5,5,-5,5), Marges(0.5,0,0,0.5), size(7.5),
- draw("grid",[-5-5*i,5+5*i,0.5+0.5*i],[unit:=[0.5,0.5],
- gridwidth:=2]),
- Width:=8, FillOpacity:=0.6,
- draw("halfPlane" ,x+2*y>=5, [FillColor:=navy,
- labelpos:=0.425, legend:="$x+2y \geqslant 5$"]),
- draw("halfPlane" ,-5*x+2*y<2, [FillColor:=crimson,
- labelpos:=0.425, legend:="$-5x+2y< 2$" ]),
- draw("halfPlane" ,x<-2, [FillColor:=darkgreen,
- labelpos:=0.6, legend:="$x<-2$" ]),
- draw("halfPlane" ,y<=-1, [FillColor:=gold,
- legend:="$y\leqslant -1$" ]),
- draw("axes",[-5-5*i,1+i],[Arrows:=1, Width:=4,
- originpos:=[0,0]])
- ];
- \end
| |
| |
Exemple avec le type
halfPlane.
8.3.21 Le type angleD
draw("angleD", <[B,A,C,r]>, [options])
- Description : dessine l’angle BAC avec un parallélogramme de coté r.
Ce parallélogramme peut être rempli en utilisant la variable FillStyle,
- hérite du type line.
8.3.22 Le type arc
draw("arc", <[B,A,C,r,sens(+/-1)]>, [options])
- Description : dessine un arc de cercle de centre A (affixe) de rayon R,
allant de B à C, dans le sens trigonométrique si <sens> vaut 1,
ce dernier paramètre est facultatif et vaut 1 par défaut. Le secteur
correspondant à cet arc peut être rempli en utilisant la variable
FillStyle,
- hérite du type path.
| |
- \begin[name=Arc, file]
- Graph image = [
- view(-2.25,3.75,-1.75,4.5),Marges(0,0,0,0),size(7.5),
- A:=0, B:=3+i, C:=2+4*i, Color:=blue, Width:=8,
- draw("arc", [B,A,C,1,-1], [Arrows:=1, FillStyle:=full,
- FillColor:=pink,legend:="$\alpha$"]),
- draw("angleD", [B,A,C,0.75], [FillStyle:=gradient,
- FillColorB:=darkgreen]),
- draw("line",[B,A,C],[showdot:=1,dotcolor:=red,DotScale:=2]),
- draw("label","$A$",[Color:=red, anchor:=A, labeldir:=South],
- "$B$",[anchor:=B, labeldir:=North],
- "$C$",[anchor:=C, labeldir:=SE])
- ];
- \end
| |
| |
Les types
angleD et
Arc
8.3.23 Le type circle
draw("circle", <[centre,rayon] ou [A,B,C]>, [options])
- Description : dessine un cercle défini par un centre et un rayon ou bien
par trois points non alignés,
- hérite du type path.
| |
- \begin[name=cycloide, file]
- Graph image = [
- view(-5,5,-1,3), Marges(0,0,0,0), size(7.5),
- CurrentArrowScale:=0.5, draw("seg",[-5,5],Width:=8),
- points:=[], centres:=[],
- for t in [-3.75,-1.9,0,1.85,3.7] do
- M:=t-sin(t)+i*(1-cos(t)), I:=t+i,
- Append(centres,I), Append(points,M),
- draw("circle", [I,1], [Width:=12, FillStyle:=full,
- FillColor:=darkblue,FillOpacity:=0.3]),
- draw("seg", [M,I]),
- if t<>0 then
- draw("arc", [M,I,t,0.5,t], Arrows:=1) fi,
- draw("seg",[I,t], LineStyle:=dashed)
- od,
- draw("dot",centres, DotStyle:=cross),
- draw("parametric",t-sin(t)+i*(1-cos(t)),[Width:=8,Color:=red,]),
- draw("dot",points,[DotStyle:=bigdot,DotScale:=1.5])
- ];
- \end
| |
| |
Le type
circle