summaryrefslogtreecommitdiff
path: root/graphics/metapost
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-05-03 03:01:08 +0000
committerNorbert Preining <norbert@preining.info>2023-05-03 03:01:08 +0000
commitfaf23b00f32bf5f3a94d891369bc55db1d305074 (patch)
treee28be735ce28e34e4a278408107115788dc8db47 /graphics/metapost
parent809279687ad6a85c7a45c9a469725248da509220 (diff)
CTAN sync 202305030301
Diffstat (limited to 'graphics/metapost')
-rw-r--r--graphics/metapost/contrib/macros/repere/README.md2
-rw-r--r--graphics/metapost/contrib/macros/repere/repere-doc.pdfbin988000 -> 1032694 bytes
-rw-r--r--graphics/metapost/contrib/macros/repere/repere-doc.tex304
-rw-r--r--graphics/metapost/contrib/macros/repere/repere.mp917
4 files changed, 933 insertions, 290 deletions
diff --git a/graphics/metapost/contrib/macros/repere/README.md b/graphics/metapost/contrib/macros/repere/README.md
index f68df80743..e96a0a0292 100644
--- a/graphics/metapost/contrib/macros/repere/README.md
+++ b/graphics/metapost/contrib/macros/repere/README.md
@@ -1,4 +1,4 @@
-Package repere - Version 23.02 - February 9, 2023
+Package repere - Version 23.05 - May 2, 2023
---
diff --git a/graphics/metapost/contrib/macros/repere/repere-doc.pdf b/graphics/metapost/contrib/macros/repere/repere-doc.pdf
index 255cb2cbb1..67f192c9eb 100644
--- a/graphics/metapost/contrib/macros/repere/repere-doc.pdf
+++ b/graphics/metapost/contrib/macros/repere/repere-doc.pdf
Binary files differ
diff --git a/graphics/metapost/contrib/macros/repere/repere-doc.tex b/graphics/metapost/contrib/macros/repere/repere-doc.tex
index 73b3d0e0ef..deddf7cef7 100644
--- a/graphics/metapost/contrib/macros/repere/repere-doc.tex
+++ b/graphics/metapost/contrib/macros/repere/repere-doc.tex
@@ -48,7 +48,6 @@
\usepackage{luamplib}
\everymplib{verbatimtex \leavevmode etex;
-% input geometriesyr16;
input repere;}
\mplibnumbersystem{decimal}
@@ -80,7 +79,6 @@
}
\makeatother
-%\definecolor{CoulParam}{rgb}{0.281,0.275,0.485}
\definecolor{CoulParam}{rgb}{0.4,0,0.5}
\definecolor{TestC}{rgb}{0.963,0.971,0.994}
@@ -525,7 +523,6 @@ Définit les valeurs minimales et maximales pour l'étiquetage.
repere.larg(110,160,5cm,2000,7000,5cm);
interaxes(120,3000);
setaxes(120,160,3000,7000);
- setgrad(120,160,3000,7000);
draw axex(10,10);
draw axey(1000,1000);
fin;
@@ -1156,8 +1153,8 @@ p=(-2,-2)..(-1,1)..(0,2)..(1,1)
C_f= courbefonc(f)(-2,2.5);
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
-draw p withcolor bleu;
-draw C_f withcolor rouge;
+draw p withcolor blue;
+draw C_f withcolor red;
intercourbes(I,C_f,p);
drawoptions(withcolor black);
nomme.lft(I1);nomme.rt(I2);
@@ -1689,13 +1686,13 @@ vardef f(expr x)= x**2-2x enddef;
Cf= courbefonc(f)();
ptantecedents(A,2,Cf);
draw axes(1,1);
-drawoptions(dashed evenly withcolor rouge);
+drawoptions(dashed evenly withcolor red);
draw Projectionx.lrt(A1,"$x_1$");
draw Projectionx(A2);
draw Projectiony(A1);
draw Projectiony.urt(A2,"$y$");
drawoptions();
-draw Cf withpen pencircle scaled 1 withcolor bleu;
+draw Cf withpen pencircle scaled 1 withcolor blue;
fin;
\end{exemple}
@@ -1711,12 +1708,12 @@ Cf= courbefonc(f)();
A1=(-0.5,f(-0.5));A2=(2.8,f(2.8));
A3=(0.75,f(0.75));
draw axes(1,1);
-drawoptions(dashed evenly withcolor rouge);
+drawoptions(dashed evenly withcolor red);
draw Projectionaxes(A1,"$x$","$f(x)$");
draw Projectionaxes(A2,"$x$","$f(x)$");
draw Projectionaxes(A3,"$x$","$f(x)$");
drawoptions();
-draw Cf withpen pencircle scaled 1 withcolor bleu;
+draw Cf withpen pencircle scaled 1 withcolor blue;
fin;
\end{exemple}
@@ -1840,7 +1837,7 @@ repere(-0.5,5,1cm,-0.5,5,1cm);
picture diag;
draw axes(1,1);
diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
- draw diag withcolor rouge;
+ draw diag withcolor red;
fin
\end{exemple}
@@ -2048,7 +2045,7 @@ Plusieurs segments peuvent être marqués simultanément.
\end{rpobjet}
\begin{rpobjet}{marquesegment(<A>,<B>,<n>)}{picture}
-Figure formée d'une marque sur le segment $[AB]$. L'espace entre les marques est contrôlé par le paramètre \verb|sep_marque_s|.
+Figure formée de \verb|n| marques sur le segment $[AB]$. L'espace entre les marques est contrôlé par le paramètre \verb|sep_marque_s|.
\end{rpobjet}
\begin{exemple}
@@ -2172,6 +2169,26 @@ nomme(C,B,A,"$\alpha$");
fin;
\end{exemple}
+\begin{rplabel}{nomme.pos(<A>,<O>,<B>,<texte>,<n>)}
+Même chose que précédemment avec en plus le tracé de \verb|n| arcs de cercle pour marquer l'angle.
+\end{rplabel}
+
+
+\begin{rplabel}{nomme(<A>,<O>,<B>,<texte>,<n>)}
+Même chose que précédemment mais la position est calculée automatiquement en fonction de l'angle.
+\end{rplabel}
+
+\begin{exemple}
+repere();
+pair A,B,C;
+A=(0,0);B=(4,0);C=(3,2.5);
+draw A--B--C--cycle;
+nomme.llft(A);nomme.lrt(B);nomme.top(C);
+nomme[15](B,A,C,"\ang{45}",1);
+nomme(C,B,A,"$\alpha$",2);
+fin;
+\end{exemple}
+
\subsection{Cotes}
@@ -2630,6 +2647,149 @@ draw TriangleLAA(G,H,I)(4,60,40,10)
fin;
\end{exemple}
+\subsection{Transformations}
+Un certain nombre de transformations sont prédéfinies dans \MP{}. Elles sont ici reprises et, parfois, légèrement modifiées, notamment en ce qui concerne la syntaxe.
+
+
+\begin{rpobjet}{translation(<vect>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la translation de vecteur \verb|vect|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere();
+pair A,B,C,C',u;
+path c;
+u=(1,-2);
+A=(1,1);B=(2,2);C=(4,2);
+nomme.ulft(B);
+c=cercle(B,A);draw c;
+draw translation(u)(c);
+C'=translation(u)(C);
+nomme.urt(C);nomme.urt(C');
+drawvecteur(B,u) withcolor red;
+fin;
+\end{exemple}
+
+
+\begin{rpobjet}{rotation(<pt>,<ang>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la rotation de centre \verb|pt| et d'angle \verb|ang|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere();
+pair A,B,C,B';
+A=(2,1);B=(3,3);C=(5,2);
+nomme.lrt(A);nomme.ulft(B);
+nomme.urt(C);
+B'=rotation(A,110)(B);
+nomme.llft(B');
+draw B--A--B';
+nomme(B,A,B',"\ang{110}",1);
+draw marquesegment(B,A,A,B');
+path seg; seg:=B--C;
+draw seg withcolor blue;
+draw rotation(A,110)(seg) withcolor blue;
+fin;
+\end{exemple}
+
+\begin{rpobjet}{symetrie(<pt>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la symétrie de centre \verb|pt|.
+\end{rpobjet}
+
+\begin{exemple}
+repere();
+ pair C,D,O;
+ path s,c;
+ C=(3,3);D=(1,4);
+ O=(0,2.5);
+ s=C--D;
+ c=cercle(D,1);
+ draw s;draw c;
+ nomme.bot(O) withcolor blue;
+ draw symetrie(O)(s);
+ draw symetrie(O)(c);
+fin;
+\end{exemple}
+
+
+\begin{rpobjet}{symetrie(<A>,<B>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la symétrie d'axe \verb|(AB)|.
+\end{rpobjet}
+
+
+\begin{exemple}
+repere(-4,4,1cm,0,5,1cm);
+ pair C,D,O,I;
+ path s,c;
+ C=(3,3);D=(1,4);
+ O=(1,0);I=(-1,4);
+ s=C--D;
+ c=cercle(D,1);
+ draw s;draw c;
+ draw droite(O,I) withcolor blue;
+ draw symetrie(O,I)(s);
+ draw symetrie(O,I)(c);
+fin;
+\end{exemple}
+
+\begin{rpobjet}{homothetie(<pt>,<rap>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par l'homothétie de centre \verb|pt| et de rapport \verb|rap|.
+\end{rpobjet}
+
+\begin{exemple}
+repere();
+ pair O,A,B,C,D;
+ O=(1,1);
+ A=(2,1);B=(3,2);C=(3,3);D=(1,3);
+ path p;p:= polygone(A,B,C,D);
+ nomme.llft(O);
+ draw p;
+ draw homothetie(O,2)(p);
+fin
+\end{exemple}
+
+\begin{rpobjet}{similitude(<pt>,<rap>,<ang>)(<obj>)}{pair, path ou picture}
+Image de \verb|obj| par la similitude de centre \verb|pt|, de rapport \verb|rap| et d’angle \verb|ang|.
+\end{rpobjet}
+
+\bigskip
+
+À titre expérimental, on dispose du paramètre suivant qui permet de définir les points créés par l'image d'une figure par transformation.
+
+\begin{rpparam}
+extratransf & string & "" & Chaine qui désigne les caractères à ajouter au nom des points lors du dessin de l'image de certaines figures (notamment \verb|Triangle|, \verb|Segment|) par transformation. La valeur peut être \verb|"'", "''",...| ou un nombre. Les nouveaux points sont créés.
+\end{rpparam}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere();
+extratransf:="'";
+pair A,B,C,u;
+u=(1,-2);
+A=(1,1);B=(2,2);C=(4,2);
+draw Triangle(A,B,C)()()();
+draw translation(u)(Triangle(A,B,C)()()());
+draw B'--C withcolor blue;
+drawvecteur(A,u) withcolor red;
+fin;
+\end{exemple}
+
+\begin{exemple}[lefthand ratio=0.55]
+repere();
+extratransf:="1";
+pair A,B,C,D,u,O;
+A=(2,1);B=(3,3);C=(5,2);
+O=(0,1);
+nomme.llft(O);
+draw Triangle(A,B,C)()()() withcolor blue;
+draw rotation(O,60)(Triangle(A,B,C)()()())
+ withcolor blue;
+draw B--O--B1 dashed evenly;
+fin;
+\end{exemple}
+
+
\section{Dessin à main levée}
L'idée de dessiner une figure comme si elle était faite à main levée vient de Christophe \bsc{Poulain} dans les macros de \verb|geometriesyr16.mp|\footnote{\url{https://melusine.eu.org/syracuse/poulecl/geometriesyr16/}} . Cette idée est reprise par Toby \bsc{Thurston} dans le document « Drawing with MetaPost »\footnote{\url{https://github.com/thruston/Drawing-with-Metapost/blob/master/Drawing-with-Metapost.pdf}}. Le principe est de modifier le tracé des chemins en changeant légèrement les angles de départ et d'arrivée pour créer une déformation qui rappelle le dessin à main levée.
@@ -2905,6 +3065,22 @@ draw c1;draw c2;
fin;
\end{exemple}
+\subsection{Couleur de fond}
+
+Il est possible de modifier la couleur de fond en modifiant la couleur \verb|fond_coul|.
+\begin{rpparam}
+fond_coul & color & white & Couleur du fond de la figure
+\end{rpparam}
+
+\begin{exemple}
+repere(-3.5,3.5,1cm,-3.5,3.5,1cm);
+ fond_coul:=(0.9,0.9,1);
+ setquad(-3,3,-3,3);
+ draw quadrillage(1,1);
+ draw axes(1,1);
+fin;
+\end{exemple}
+
\subsection{Francisation}
@@ -3173,7 +3349,72 @@ tableau(5,5,0.8cm);
fin;
\end{exemple}
+\section{Pixel art}
+Il est possible d'utiliser les tableaux pour dessiner des figures en pixel art.
+
+\begin{rpobjet}{pixart(<liste d'entiers> ou <liste de couleurs>)}{picture}
+Figure composée de carrés remplis d'une couleur qui est soit la couleur indiquée explicitement soit une couleur qui dépend de l'entier indiqué (celles-ci sont définies au départ mais peuvent être modifiées). On peut remplacer un entier par \verb|_| pour que la case ne soit pas remplie. Les pixels doivent être donnés de gauche à droite et de haut en bas.
+\end{rpobjet}
+
+
+\begin{exemple}
+tableau(3,3,1cm);
+draw pixart(0,1,2,
+ 3,4,5,
+ 6,7,_);
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(3,3,1cm);
+fond_coul:=grisclair;
+draw pixart(0,1,2,
+ 3,4,5,
+ 6,7,_);
+fin;
+\end{exemple}
+
+
+\begin{exemple}
+tableau(3,3,1cm);
+draw pixart(blanc,noir,rouge,
+ vert,bleu,cyan,
+ magenta,jaune,_);
+fin;
+\end{exemple}
+
+\begin{rpdeclaration}{pixcoul(<liste de couleurs>)}
+Macro qui permet de définir les couleurs qui seront utilisées. La première correspond à 0, la deuxième à 1...
+
+Au départ la macro est appelée de la façon suivante :
+
+\qquad \verb|pixcoul(blanc,noir,rouge,vert,bleu,cyan,magenta,jaune);|
+\end{rpdeclaration}
+
+\begin{exemple}
+tableau(3,3,1cm);
+pixcoul(marron,lime,orange,rose,
+ pourpre,olive,violet,beige);
+draw pixart(0,1,2,
+ 3,4,5,
+ 6,7,_);
+fin;
+\end{exemple}
+
+
+\begin{rpparam}
+pixart_ep & numeric & 0.3 & Écart laissé vide entre les cases.
+\end{rpparam}
+
+\begin{exemple}
+tableau(3,3,1cm);
+pixart_ep:=2;
+draw pixart(0,1,2,
+ 3,4,5,
+ 6,7,_);
+fin;
+\end{exemple}
\section{Quelques dessins}
@@ -3491,6 +3732,47 @@ tableau(13,5,1cm);
fin;
\end{exemple}
+\subsection{Pixel art}
+
+\begin{exemple}
+tableau(11,8,0.4cm);
+pixart_ep:=0;
+draw pixart(0,0,1,0,0,0,0,0,1,0,0,
+ 0,0,0,1,0,0,0,1,0,0,0,
+ 0,0,1,1,1,1,1,1,1,0,0,
+ 0,1,1,0,1,1,1,0,1,1,0,
+ 1,1,1,1,1,1,1,1,1,1,1,
+ 1,0,1,1,1,1,1,1,1,0,1,
+ 1,0,1,0,0,0,0,0,1,0,1,
+ 0,0,0,1,1,0,1,1,0,0,0);
+fin;
+\end{exemple}
+
+\begin{exemple}
+tableau(14,15,0.3cm);
+pixart_ep:=0;
+color b,n,v,r,c;
+b:=blanc;n:=noir;v:=0.6vert;
+r:=0.7rouge;c:=(1,0.2,0.2);
+draw pixart(_,_,_,_,_,_,_,_,_,_,_,n,n,_,
+ _,_,_,_,_,_,_,_,_,_,n,v,v,n,
+ _,_,_,_,_,_,_,n,n,n,n,v,v,n,
+ _,_,_,_,_,_,n,v,v,v,v,v,n,_,
+ _,_,_,_,_,n,v,n,n,n,v,n,_,_,
+ _,_,n,n,n,v,n,_,_,n,v,n,_,_,
+ _,n,c,c,v,c,n,_,n,v,n,_,_,_,
+ n,c,c,c,c,c,c,n,v,n,n,_,_,_,
+ n,c,c,c,c,c,n,c,v,c,c,n,_,_,
+ n,c,b,c,c,n,c,c,v,c,c,c,n,_,
+ n,c,c,b,r,n,c,c,c,c,c,c,n,_,
+ _,n,r,r,r,n,c,c,c,c,c,r,n,_,
+ _,_,n,n,n,n,c,c,c,b,r,r,n,_,
+ _,_,_,_,_,_,n,r,r,r,r,n,_,_,
+ _,_,_,_,_,_,_,n,n,n,n,_,_,_
+ );
+fin;
+\end{exemple}
+
\end{document}
diff --git a/graphics/metapost/contrib/macros/repere/repere.mp b/graphics/metapost/contrib/macros/repere/repere.mp
index c3f5a1496a..292d415a9b 100644
--- a/graphics/metapost/contrib/macros/repere/repere.mp
+++ b/graphics/metapost/contrib/macros/repere/repere.mp
@@ -2,7 +2,7 @@
%% repere.mp %%
%% Macros pour la construction de figures dans un repère %%
%% o.peault@posteo.net %%
-%% Version 23.02 (Février 2023) %%
+%% Version 23.05 (Mai 2023) %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This work may be distributed and/or modified under the conditions of
@@ -21,6 +21,7 @@
% segments, vecteurs, polygones complets
% Octobre-Décembre 2022 : doc
% Février 2023 : Main levée
+% Mai 2023 : Transformations, couleur de fond, pixart
input format;
if not known mplib: input latexmp fi;
@@ -140,7 +141,7 @@ vardef definitionrepere@#(text t) =
Ux:=_def3;Uy:=_def6;
_T:=identity xscaled Ux yscaled Uy slanted cosd(theta) yscaled sind(theta);
_defcadre;
- setrepere(Xmin,Xmax,Ymin,Ymax);
+ settout(Xmin,Xmax,Ymin,Ymax);
_O:=_cart(0,0); xO:=0 ; yO:=0;_O_:=(0,0);
_I:=_cart(1,0); _J:=_cart(0,1);
taillegrad:=0.8mm;taillepoint:=3;taillecroix:=5;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
@@ -167,13 +168,14 @@ def init_traces =
fi
_op_
enddef;
- def draw expr p=
+ def Draw expr p=
if (path p) and (type_trace="mainlevee"):
ddraw mainleveepath(p)
else:
ddraw p
fi
enddef;
+ def draw expr p= Draw p enddef;
%% fill
def fill expr c =
if path c:
@@ -182,6 +184,10 @@ def init_traces =
olddraw c
fi
enddef;
+ %% fill
+ def filldraw expr c =
+ addto currentpicture contour (c transformed _T) withpen currentpen
+ _op_ enddef;
%% thelabel
vardef thelabel@#(expr s,z) = % Position s near z
save p; picture p;
@@ -214,7 +220,7 @@ def init_traces =
if type_trace="mainlevee":
ddrawarrow mainleveepath(p)
else:
- ddrawarrow p
+ ddrawarrow p
fi
enddef;
def ddrawdblarrow expr p = _apth:=p transformed _T; _findarr enddef;
@@ -222,7 +228,7 @@ def init_traces =
if type_trace="mainlevee":
ddrawdblarrow mainleveepath(p)
else:
- ddrawdblarrow p
+ ddrawdblarrow p
fi
enddef;
%% bbox
@@ -244,6 +250,9 @@ def traces_orig =
fi
_op_
enddef;
+ def filldraw expr c =
+ addto currentpicture contour c withpen currentpen
+ _op_ enddef;
vardef thelabel@#(expr s,z) = % Position s near z
save p; picture p;
if picture s: p=s
@@ -266,13 +275,13 @@ enddef;
def _finarr text t =
olddraw _apth t;
- filldraw arrowhead _apth t
+ oldfilldraw arrowhead _apth t
enddef;
def _findarr text t =
olddraw _apth t;
- filldraw arrowhead _apth withpen currentpen t;
- filldraw arrowhead reverse _apth withpen currentpen t
+ oldfilldraw arrowhead _apth withpen currentpen t;
+ oldfilldraw arrowhead reverse _apth withpen currentpen t
enddef;
vardef arrowhead expr p = %redéfinition flèches
@@ -355,8 +364,7 @@ def setaxes(expr a,b,c,d)=
enddef;
def setgrad(expr a,b,c,d)=
- GradXmin:=a;GradXmax:=b;GradYmin:=c;GradYmax:=d;
- setval(a,b,c,d);
+ GradXmin:=a;GradXmax:=b;GradYmin:=c;GradYmax:=d
enddef;
def setval(expr a,b,c,d)=
@@ -377,9 +385,25 @@ enddef;
let setall=setrepere;
let settout=setrepere;
+color fond_coul;
+
+
def fin =
if _nbaxes=1: olddraw _axorlab fi;
if coupe: clip currentpicture to (cadre transformed _T) fi;
+% Gestion du fond
+ if known fond_coul:
+ background:=fond_coul;
+ save tmpfig;
+ picture tmpfig;
+ tmpfig:=currentpicture;
+ currentpicture:=nullpicture;
+ newinternal bboxmargin;
+ bboxmargin:=0bp;
+ fill bbox tmpfig withcolor background;
+ draw tmpfig;
+ fi;
+% Fin gestion du fond
if bf: oldendfig; bf:=false;_nfig:=_nfig+1 fi;
rep_tab:=false; % Ajout octobre 2021
traces_orig;
@@ -475,9 +499,9 @@ vardef etiquettey@#(expr y)=
enddef;
-%vardef cheminaxex=_cart(AxeXmin,yO)--_cart(AxeXmax,yO) enddef;
+%vardef dessinaxex=_cart(AxeXmin,yO)--_cart(AxeXmax,yO) enddef;
-%vardef cheminaxey=_cart(xO,AxeYmin)--_cart(xO,AxeYmax) enddef;
+%vardef dessinaxey=_cart(xO,AxeYmin)--_cart(xO,AxeYmax) enddef;
vardef cheminaxex=
(AxeXmin,yO)--
@@ -504,7 +528,9 @@ vardef graduationsaxex(expr grad)= %%%% ensemble des graduations abscisses
olddraw graduationx(arrondimil(i*grad)+xO) withpen pencircle scaled 0.5bp;
endfor
% dernière graduation
- if AxeXmax*Ux-(imax*grad+xO)*Ux>ahlength: olddraw graduationx(arrondimil(imax*grad)+xO) withpen pencircle scaled 0.5bp fi);
+ if AxeXmax*Ux-(imax*grad+xO)*Ux>ahlength:
+ olddraw graduationx(arrondimil(imax*grad)+xO) withpen pencircle scaled 0.5bp
+ fi);
$
enddef;
@@ -526,27 +552,27 @@ vardef etiquettesaxex@#(expr val)= %%% ensemble des étiquettes abscisses
picture $,labmin,labmax;
numeric imin,imax;
$=image(%
- imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
- % définition première étiquette
+ imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
+ % définition première étiquette
if (imin<>0):
- labmin:= etiquettex.@#(arrondimil(imin*val)+xO)
- else: labmin:=nullpicture
- fi;
- % définition dernière étiquette
+ labmin:= etiquettex.@#(arrondimil(imin*val)+xO)
+ else: labmin:=nullpicture
+ fi;
+ % définition dernière étiquette
if (imax<>0):
- labmax:= etiquettex.@#(arrondimil(imax*val)+xO)
- else: labmax:=nullpicture
- fi;
- % tracé première étiquette
- if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: olddraw labmin fi;
- % tracé autres étiquettes
- for i=imin+1 upto imax-1:
- if (i<>0):
- olddraw etiquettex.@#(arrondimil(i*val)+xO)
- fi;
- endfor;
- % tracé dernière étiquette
- if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: olddraw labmax fi;
+ labmax:= etiquettex.@#(arrondimil(imax*val)+xO)
+ else: labmax:=nullpicture
+ fi;
+ % tracé première étiquette
+ if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: olddraw labmin fi;
+ % tracé autres étiquettes
+ for i=imin+1 upto imax-1:
+ if (i<>0):
+ olddraw etiquettex.@#(arrondimil(i*val)+xO)
+ fi;
+ endfor;
+ % tracé dernière étiquette
+ if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: olddraw labmax fi;
);
$
enddef;
@@ -556,27 +582,27 @@ vardef etiquettesaxey@#(expr val)= %%% ensemble des étiquettes ordonnées
picture $,labmin,labmax;
numeric imin,imax;
$=image(%
- imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
- % définition première étiquette
+ imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
+ % définition première étiquette
if (imin<>0):
- labmin:= etiquettey.@#(arrondimil(imin*val)+yO)
- else: labmin:=nullpicture
- fi;
- % définition dernière étiquette
+ labmin:= etiquettey.@#(arrondimil(imin*val)+yO)
+ else: labmin:=nullpicture
+ fi;
+ % définition dernière étiquette
if (imax<>0):
- labmax:= etiquettey.@#(arrondimil(imax*val)+yO)
- else: labmax:=nullpicture
- fi;
- % tracé première étiquette
- if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): olddraw labmin fi;
- % tracé autres étiquettes
- for i=imin+1 upto imax-1:
- if (i<>0):
- olddraw etiquettey.@#(arrondimil(i*val)+yO)
- fi;
- endfor;
- % tracé dernière étiquette
- if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): olddraw labmax fi
+ labmax:= etiquettey.@#(arrondimil(imax*val)+yO)
+ else: labmax:=nullpicture
+ fi;
+ % tracé première étiquette
+ if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): olddraw labmin fi;
+ % tracé autres étiquettes
+ for i=imin+1 upto imax-1:
+ if (i<>0):
+ olddraw etiquettey.@#(arrondimil(i*val)+yO)
+ fi;
+ endfor;
+ % tracé dernière étiquette
+ if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): olddraw labmax fi
);
$
enddef;
@@ -597,35 +623,35 @@ vardef _axex_@#(expr grad,val,nn)=
if grad>0: olddraw graduationsaxex(grad) fi;
% étiquettes
if val>0:
- if nn=1:
- if str @#<>"":
- olddraw etiquettesaxex@#(val);
- _axorlab:=etiquettex@#(xO)
- else:
- olddraw etiquettesaxex.bot(val);
- _axorlab:=etiquettex.bot(xO)
- fi;
- poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
- if xO<>yO:
- olddraw _axorlab
- elseif _nbaxes=2:
- olddraw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
- fi
- elseif nn=2:
- if str @#<>"":
- olddraw etiquettesaxex@#(val);
- olddraw etiquettex@#(xO)
- else:
- olddraw etiquettesaxex.bot(val);
- olddraw etiquettex.bot(xO)
- fi
- else:
- if str @#<>"":
- olddraw etiquettesaxex@#(val)
- else:
- olddraw etiquettesaxex.bot(val)
- fi
- fi
+ if nn=1:
+ if str @#<>"":
+ olddraw etiquettesaxex@#(val);
+ _axorlab:=etiquettex@#(xO)
+ else:
+ olddraw etiquettesaxex.bot(val);
+ _axorlab:=etiquettex.bot(xO)
+ fi;
+ poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
+ if xO<>yO:
+ olddraw _axorlab
+ elseif _nbaxes=2:
+ olddraw _etiqx_(xO,0,xO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+ fi
+ elseif nn=2:
+ if str @#<>"":
+ olddraw etiquettesaxex@#(val);
+ olddraw etiquettex@#(xO)
+ else:
+ olddraw etiquettesaxex.bot(val);
+ olddraw etiquettex.bot(xO)
+ fi
+ else:
+ if str @#<>"":
+ olddraw etiquettesaxex@#(val)
+ else:
+ olddraw etiquettesaxex.bot(val)
+ fi
+ fi
fi
);
$
@@ -647,35 +673,35 @@ vardef _axey_@#(expr grad,val,nn)=
if grad>0: olddraw graduationsaxey(grad) fi;
% étiquettes
if val>0:
- if nn=1:
- if str @#<>"":
- olddraw etiquettesaxey@#(val);
- _axorlab:=etiquettey@#(yO)
- else:
- olddraw etiquettesaxey.lft(val);
- _axorlab:=etiquettey.lft(yO)
- fi;
- poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
- if xO<>yO:
- olddraw _axorlab
- elseif _nbaxes=2:
- olddraw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
- fi
- elseif nn=2:
- if str @#<>"":
- olddraw etiquettesaxey@#(val);
- olddraw etiquettey@#(yO)
- else:
- olddraw etiquettesaxey.lft(val);
- olddraw etiquettey.lft(yO)
- fi
- else:
- if str @#<>"":
- olddraw etiquettesaxey@#(val)
- else:
- olddraw etiquettesaxey.lft(val)
- fi
- fi
+ if nn=1:
+ if str @#<>"":
+ olddraw etiquettesaxey@#(val);
+ _axorlab:=etiquettey@#(yO)
+ else:
+ olddraw etiquettesaxey.lft(val);
+ _axorlab:=etiquettey.lft(yO)
+ fi;
+ poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
+ if xO<>yO:
+ olddraw _axorlab
+ elseif _nbaxes=2:
+ olddraw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+ fi
+ elseif nn=2:
+ if str @#<>"":
+ olddraw etiquettesaxey@#(val);
+ olddraw etiquettey@#(yO)
+ else:
+ olddraw etiquettesaxey.lft(val);
+ olddraw etiquettey.lft(yO)
+ fi
+ else:
+ if str @#<>"":
+ olddraw etiquettesaxey@#(val)
+ else:
+ olddraw etiquettesaxey.lft(val)
+ fi
+ fi
fi
);
$
@@ -759,15 +785,15 @@ vardef fracmulttext(expr n,d,tt)= %%%% construction de la fraction n*tt/d
else: fraction:=""
fi;
if dd=1:
- if nn=1:
- fr:=tt
- else: fr:=decimal nn & tt
- fi
+ if nn=1:
+ fr:=tt
+ else: fr:=decimal nn & tt
+ fi
else:
- if nn=1:
- fr:="\" & fraction & "frac{" & tt & "}{" & decimal dd & "}"
- else: fr:="\" & fraction & "frac{" & decimal nn & tt & "}{" & decimal dd & "}"
- fi
+ if nn=1:
+ fr:="\" & fraction & "frac{" & tt & "}{" & decimal dd & "}"
+ else: fr:="\" & fraction & "frac{" & decimal nn & tt & "}{" & decimal dd & "}"
+ fi
fi;
if n<0:
s:="-"
@@ -800,27 +826,27 @@ vardef etiquettesaxexpi@#(expr n,d)= %%% ensemble des étiquettes multiple
numeric imin,imax,val;
val:=n*pi/d;
$=image(%
- imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
- % définition première étiquette
+ imin:=ceiling((ValXmin-xO)/val);imax:=floor((ValXmax-xO)/val);
+ % définition première étiquette
if (imin<>0):
- labmin:= etiquettexpi.@#(imin*n,d)
- else: labmin:=nullpicture
- fi;
- % définition dernière étiquette
+ labmin:= etiquettexpi.@#(imin*n,d)
+ else: labmin:=nullpicture
+ fi;
+ % définition dernière étiquette
if (imax<>0):
- labmax:= etiquettexpi.@#(imax*n,d)
- else: labmax:=nullpicture
- fi;
- % tracé première étiquette
- if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: draw labmin fi;
- % tracé autres étiquettes
- for i=imin+1 upto imax-1:
- if (i<>0):
- draw etiquettexpi.@#(i*n,d)
- fi;
- endfor;
- % tracé dernière étiquette
- if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: draw labmax fi;
+ labmax:= etiquettexpi.@#(imax*n,d)
+ else: labmax:=nullpicture
+ fi;
+ % tracé première étiquette
+ if xpart ((ulcorner labmin) transformed inverse _T)>=Xmin: draw labmin fi;
+ % tracé autres étiquettes
+ for i=imin+1 upto imax-1:
+ if (i<>0):
+ draw etiquettexpi.@#(i*n,d)
+ fi;
+ endfor;
+ % tracé dernière étiquette
+ if xpart ((lrcorner labmax) transformed inverse _T)<=Xmax: draw labmax fi;
);
$
enddef;
@@ -831,27 +857,27 @@ vardef etiquettesaxeypi@#(expr n,d)= %%% ensemble des étiquettes multiple
numeric imin,imax,val;
val:=n*pi/d;
$=image(%
- imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
- % définition première étiquette
+ imin:=ceiling((ValYmin-yO)/val);imax:=floor((ValYmax-yO)/val);
+ % définition première étiquette
if (imin<>0):
- labmin:= etiquetteypi.@#(imin*n,d)
- else: labmin:=nullpicture
- fi;
- % définition dernière étiquette
+ labmin:= etiquetteypi.@#(imin*n,d)
+ else: labmin:=nullpicture
+ fi;
+ % définition dernière étiquette
if (imax<>0):
- labmax:= etiquetteypi.@#(imax*n,d)
- else: labmax:=nullpicture
- fi;
- % tracé première étiquette
- if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): draw labmin fi;
- % tracé autres étiquettes
- for i=imin+1 upto imax-1:
- if (i<>0):
- draw etiquetteypi.@#(i*n,d)
- fi;
- endfor;
- % tracé dernière étiquette
- if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): draw labmax fi
+ labmax:= etiquetteypi.@#(imax*n,d)
+ else: labmax:=nullpicture
+ fi;
+ % tracé première étiquette
+ if ypart (llcorner labmin) >=ypart _cart(Xmin,Ymin): draw labmin fi;
+ % tracé autres étiquettes
+ for i=imin+1 upto imax-1:
+ if (i<>0):
+ draw etiquetteypi.@#(i*n,d)
+ fi;
+ endfor;
+ % tracé dernière étiquette
+ if ypart (ulcorner labmax) <=ypart _cart(Xmax,Ymax): draw labmax fi
);
$
enddef;
@@ -875,31 +901,31 @@ vardef _axexpi_@#(expr num,den,nn)=
% étiquettes
if nn=1:
if str @#<>"":
- draw etiquettesaxexpi@#(num,den);
- _axorlab:=etiquettexpi@#(xO/pi,1)
+ draw etiquettesaxexpi@#(num,den);
+ _axorlab:=etiquettexpi@#(xO/pi,1)
else:
- draw etiquettesaxexpi.bot(num,den);
- _axorlab:=etiquettexpi.bot(xO/pi,1)
+ draw etiquettesaxexpi.bot(num,den);
+ _axorlab:=etiquettexpi.bot(xO/pi,1)
fi;
poslabO:=poslabO + unitvector(0,ypart _posgradx@#);
if xO<>yO:
- draw _axorlab
+ draw _axorlab
elseif _nbaxes=2:
- draw _etiqx_(xO,0,fracmultpi(xO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+ draw _etiqx_(xO,0,fracmultpi(xO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
fi
elseif nn=2:
if str @#<>"":
- draw etiquettesaxexpi@#(num,den);
- draw etiquettexpi@#(xO/pi,1)
+ draw etiquettesaxexpi@#(num,den);
+ draw etiquettexpi@#(xO/pi,1)
else:
- draw etiquettesaxexpi.bot(num,den);
- draw etiquettexpi.bot(xO/pi,1)
+ draw etiquettesaxexpi.bot(num,den);
+ draw etiquettexpi.bot(xO/pi,1)
fi
else:
if str @#<>"":
- draw etiquettesaxexpi@#(num,den)
+ draw etiquettesaxexpi@#(num,den)
else:
- draw etiquettesaxexpi.bot(num,den)
+ draw etiquettesaxexpi.bot(num,den)
fi
fi
);
@@ -925,32 +951,32 @@ vardef _axeypi_@#(expr num,den,nn)=
% étiquettes
if nn=1:
if str @#<>"":
- draw etiquettesaxeypi@#(num,den);
- _axorlab:=etiquetteypi@#(yO/pi,1)
+ draw etiquettesaxeypi@#(num,den);
+ _axorlab:=etiquetteypi@#(yO/pi,1)
else:
- draw etiquettesaxeypi.lft(num,den);
- _axorlab:=etiquetteypi.lft(yO/pi,1)
+ draw etiquettesaxeypi.lft(num,den);
+ _axorlab:=etiquetteypi.lft(yO/pi,1)
fi;
poslabO:=poslabO + unitvector(xpart _posgrady@#,0);
if xO<>yO:
- draw _axorlab
+ draw _axorlab
elseif _nbaxes=2:
- draw _etiqy_(yO,0,fracmultpi(yO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
-% draw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+ draw _etiqy_(yO,0,fracmultpi(yO/pi,1)) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
+% draw _etiqy_(yO,0,yO) shifted (0.7*abs(llcorner _axorlab - urcorner _axorlab)*poslabO)
fi
elseif nn=2:
if str @#<>"":
- draw etiquettesaxeypi@#(num,den);
- draw etiquetteypi@#(yO/pi,1)
+ draw etiquettesaxeypi@#(num,den);
+ draw etiquetteypi@#(yO/pi,1)
else:
- draw etiquettesaxeypi.lft(num,den);
- draw etiquetteypi.lft(yO/pi,1)
+ draw etiquettesaxeypi.lft(num,den);
+ draw etiquetteypi.lft(yO/pi,1)
fi
else:
if str @#<>"":
- draw etiquettesaxeypi@#(num,den)
+ draw etiquettesaxeypi@#(num,den)
else:
- draw etiquettesaxeypi.lft(num,den)
+ draw etiquettesaxeypi.lft(num,den)
fi
fi
);
@@ -1032,19 +1058,19 @@ vardef axexpart@#(text t)=
boolean var;
var:=false;
$=image(%
- for _i=t:
- if numeric _i:
- if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi;
- if gradxpart:
- olddraw graduationx(_i) withpen pencircle scaled 0.8bp
- fi;
- tmp:=_i;
- var:=true
- else:
- if str @#="": draw _etiqx_.bot(tmp,taillegrad,_i) else: draw _etiqx_@#(tmp,taillegrad,_i) fi;
- var:=false
- fi;
- endfor;
+ for _i=t:
+ if numeric _i:
+ if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi;
+ if gradxpart:
+ olddraw graduationx(_i) withpen pencircle scaled 0.8bp
+ fi;
+ tmp:=_i;
+ var:=true
+ else:
+ if str @#="": draw _etiqx_.bot(tmp,taillegrad,_i) else: draw _etiqx_@#(tmp,taillegrad,_i) fi;
+ var:=false
+ fi;
+ endfor;
if var: if str @#="": draw _etiqx_.bot(tmp,taillegrad,tmp) else: draw _etiqx_@#(tmp,taillegrad,tmp) fi fi);
$
enddef;
@@ -1056,20 +1082,20 @@ vardef axeypart@#(text t)=
boolean var;
var:=false;
$=image(%
- for _i=t:
- if numeric _i:
- if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi;
-% olddraw ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,_i) withpen pencircle scaled 0.8bp;
- if gradypart:
- olddraw graduationy(_i) withpen pencircle scaled 0.8bp
- fi;
- tmp:=_i;
- var:=true
- else:
- if str @#="": draw _etiqy_.lft(tmp,taillegrad,_i) else: draw _etiqy_@#(tmp,taillegrad,_i) fi;
- var:=false
- fi;
- endfor;
+ for _i=t:
+ if numeric _i:
+ if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi;
+% olddraw ((taillegrad,0)--(-taillegrad,0)) shifted _cart(xO,_i) withpen pencircle scaled 0.8bp;
+ if gradypart:
+ olddraw graduationy(_i) withpen pencircle scaled 0.8bp
+ fi;
+ tmp:=_i;
+ var:=true
+ else:
+ if str @#="": draw _etiqy_.lft(tmp,taillegrad,_i) else: draw _etiqy_@#(tmp,taillegrad,_i) fi;
+ var:=false
+ fi;
+ endfor;
if var: if str @#="": draw _etiqy_.lft(tmp,taillegrad,tmp) else: draw _etiqy_@#(tmp,taillegrad,tmp) fi fi);
$
enddef;
@@ -1187,7 +1213,6 @@ enddef;
def labelang = draw thelabelang enddef;
-
vardef nommepoint@#(text t)=
save $,ch,dess,latch;
pair $;
@@ -1200,13 +1225,18 @@ vardef nommepoint@#(text t)=
fi;
if long_texte(t)=1:
dess:=image(draw marquepointFig(t);
- ch:=_chaine(t);
- mylabel@#("$" & ch & "$",t) withcolor coullabel)
+ ch:="$" & _chaine(t) & "$";
+ if _ext_tr_<>"": ch:=aj_extr_trsf(t,ch) fi;
+ mylabel@#(ch,t) withcolor coullabel)
else:
dess:=image(%
for PP=t:
- if pair PP: marquepoint(PP); $:=PP
- else: if string PP: mylabel@#(PP,$) else: mylabel@#(PP scaled defaultscale,$) fi withcolor coullabel
+ if pair PP:
+ marquepoint(PP); $:=PP
+ elseif string PP:
+ mylabel@#(PP,$) withcolor coullabel;
+ else:
+ mylabel@#(PP scaled defaultscale,$) withcolor coullabel
fi;
endfor)
fi;
@@ -1262,8 +1292,9 @@ vardef nommepointrot@#(text t)(expr an)=
fi;
if long_texte(t)=1:
dess:=image(draw marquepointFig(t);
- ch:=_chaine(t);
- mylabel@#("$" & ch & "$",t,an) withcolor coullabel)
+ ch:="$" & _chaine(t) & "$";
+ if _ext_tr_<>"": ch:=aj_extr_trsf(t,ch) fi;
+ mylabel@#(ch,t,an) withcolor coullabel)
else:
dess:=image(%
for PP=t:
@@ -1301,10 +1332,12 @@ enddef;
vardef nommeFig@#(text t)=
save $;
picture $;
- if long_texte(t)=4: $:=nommeangle@#(t)
+ if long_texte(t)=4: $:=nommeangle@#(t,0)
+ elseif long_texte(t)=5: $:=nommeangle@#(t)
else:
for i=t:
- if pair i: $:=nommepoint@#(t)
+ if pair i:
+ $:=nommepoint@#(t)
elseif str @#="": $:=nommeautoobj(t)
else: $:=nommecourbe@#(t)
fi;
@@ -2068,9 +2101,9 @@ senstan.gauche=(1,0);senstan.droite=(0,1);senstan.double=(1,1);
c:= ypart direction t of p;
_v:=N2*unitvector(direction t of p);
$=image(%
- marquepoint(M);
- if (xpart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)-_v*(xpart senstan@#) fi;
- if (ypart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)+_v*(ypart senstan@#) fi;
+ marquepoint(M);
+ if (xpart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)-_v*(xpart senstan@#) fi;
+ if (ypart senstan@#) <> 0: olddrawarrow _cart(M)--_cart(M)+_v*(ypart senstan@#) fi;
);
% $=image(%
% drawdblarrow (M-)--(M+ )
@@ -2346,7 +2379,7 @@ numeric _suiterecdeb_, _suiterecfin_, _suiterecinit_;
vardef suiterec(suffix f)(expr deb,fin,init)= %escalier un+1=f(un), u_deb=init
vardef _suiterecfonc_(expr x)=f(x) enddef;
- _suiterecdeb_:=deb;_suiterecfin_:=fin;_suiterecinit_:=init; %stocke les valeurs pour réutilisation
+ _suiterecdeb_:=deb;_suiterecfin_:=fin;_suiterecinit_:=init; %stocke les valeurs pour réutilisation
save $,un;
path $;
numeric un;
@@ -2359,20 +2392,20 @@ vardef suiterec(suffix f)(expr deb,fin,init)= %escalier un+1=f(un), u_deb=init
$
enddef;
-vardef suiterecprojx@#(text t)= %projections et étiquettes sur axe x, utilise les valeurs de suiterec
+vardef suiterecprojx@#(text t)= %projections et étiquettes sur axe x, utilise les valeurs de suiterec
save $,deb,fin,nom,_qw_,un,lab;
picture $;
string nom,lab;
numeric deb,fin,_qw_,un,_prec;
deb:=_suiterecdeb_;fin:=_suiterecfin_;un:=_suiterecinit_;
_qw_:=1;
- for i=t: %récupère les éventuelles nouvelles valeurs pour deb et fin
+ for i=t: %récupère les éventuelles nouvelles valeurs pour deb et fin
if _qw_ =1: if string i: nom:=i else: nom:="_val";_prec:=i fi;
elseif _qw_=2:
- deb:=i;
- for j=_suiterecdeb_ upto i-1:
- un:=_suiterecfonc_(un);
- endfor
+ deb:=i;
+ for j=_suiterecdeb_ upto i-1:
+ un:=_suiterecfonc_(un);
+ endfor
elseif _qw_=3: fin:=i
fi;
_qw_:=_qw_+1;
@@ -2410,20 +2443,20 @@ vardef suiterecprojx@#(text t)= %projections et étiquettes sur axe x, utili
$
enddef;
-vardef suiterecprojy@#(text t)= %projections et étiquettes sur axe y, utilise les valeurs de suiterec
+vardef suiterecprojy@#(text t)= %projections et étiquettes sur axe y, utilise les valeurs de suiterec
save $,deb,fin,nom,_qw_,un,lab;
picture $;
string nom,lab;
numeric deb,fin,_qw_,un,_prec;
deb:=_suiterecdeb_;fin:=_suiterecfin_;un:=_suiterecinit_;
_qw_:=1;
- for i=t: %récupère les éventuelles nouvelles valeurs pour deb et fin
+ for i=t: %récupère les éventuelles nouvelles valeurs pour deb et fin
if _qw_ =1: if string i: nom:=i else: nom:="_val";_prec:=i fi;
elseif _qw_=2:
- deb:=i;
- for j=_suiterecdeb_ upto i-2:
- un:=_suiterecfonc_(un);
- endfor
+ deb:=i;
+ for j=_suiterecdeb_ upto i-2:
+ un:=_suiterecfonc_(un);
+ endfor
elseif _qw_=3: fin:=i
fi;
_qw_:=_qw_+1;
@@ -2970,10 +3003,11 @@ vardef marqueangle(text t)=
fi
enddef;
-vardef nommeangle@#(expr A,O,B,p)=
+vardef nommeangle@#(expr A,O,B,p,n)=
save P,a;pair P;path a;
save marque_p; string marque_p;
marque_p:="";
+ if n>0: draw marqueangle(A,O,B,n) fi;
a:=arc_marqueangle(A,O,B,taille_marque_a);
P:= point (arctime 0.5*arclength a of a) of a;
if str @# = "":
@@ -3139,20 +3173,29 @@ enddef;
% "\ang[round-mode=places,round-pad = false,drop-zero-decimal,round-precision=" & decimal(arr) & "]{" & decimal(nb) & "}"
%enddef;
+numeric _tmp_puiss_dix_;
vardef AffichageAngle(expr nb,arr)=
- "\ang{" & decimal(arrondi(10**(arr),nb)) & "}"
+ _tmp_puiss_dix_:=round(10**arr);
+ "\ang{" & decimal(arrondi(_tmp_puiss_dix_,nb)) & "}"
+% "\ang{" & decimal(arrondi(10**arr,nb)) & "}"
enddef;
%
%%%%%%%%%%%%%%%% Segments %%%%%%%%%%%%%%%
vardef Segment(suffix AA,BB)(text t)(text s)=
- save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
+ save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote,pA,pB;
numeric ll_seg,anghh,count_tmp;
string chAA,chBB,chcote;
+ pair pA,pB;
+ pA:=AA;pB:=BB;
count_tmp:=0;
if AffCotes:
- chcote:=decimal(abs(BB-AA));
+ if _tr_rapp_<>1:
+ chcote:=decimal(_tr_rapp_*abs(BB-AA))
+ else:
+ chcote:=decimal(abs(BB-AA))
+ fi;
if UnitCotes<>"":
chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
else:
@@ -3173,31 +3216,44 @@ vardef Segment(suffix AA,BB)(text t)(text s)=
elseif count_tmp=2: chBB:=i
fi;
endfor
+ % On modifie les noms si on est dans une transformation et on définit les points
+ if _ext_tr_<>"":
+ chAA:=aj_extr_trsf(AA,chAA);
+ chBB:=aj_extr_trsf(BB,chBB);
+ fi
+ % On modifie les points si on est dans une transformation
+ if _tr_bool_:
+ def _transform_fig_= enddef;
+ pA:=_transform_pt_(AA);
+ pB:=_transform_pt_(BB);
+ fi
for i=s:
chcote:=i;
endfor
- SegmentComplet(AA,BB)(chAA,chBB,chcote)
+ SegmentComplet(pA,pB)(chAA,chBB,chcote)
enddef;
-vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei) text t=
+vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei)=
%% Les extrémités étant données, trace le segment, le nom des points et la cote
%% La position du nom est calculée automatiquement
- save tmp,anghh,tmpana,tmpanb;
+ save tmp,anghh,tmpana,tmpanb,chA,chB;
picture tmp;
+ string chA,chB;
+ chA:=chAA;chB:=chBB;
numeric anghh,tmpana,tmpanb;
anghh:=angle(BB-AA);
tmpana=anghh+180 ;
tmpanb=anghh ;
tmp:=image(%
- draw AA--BB t;
- nomme[tmpana](AA,chAA) t withpen currentpen;
- nomme[tmpanb](BB,chBB) t withpen currentpen;
+ draw AA--BB;
+ nomme[tmpana](AA,chA) withpen currentpen;
+ nomme[tmpanb](BB,chB) withpen currentpen;
if xpart AA <= xpart BB:
- cote(AA,BB,cotei) t
+ cote(AA,BB,cotei)
else:
- cote(BB,AA,cotei) t
+ cote(BB,AA,cotei)
fi;
);
tmp
@@ -3357,25 +3413,38 @@ numeric rep_tri_la,rep_tri_lb,rep_tri_lc,
boolean rep_ad_A,rep_ad_B,rep_ad_C;
-def cotepolyplacee(suffix ptA,ptB)(expr chcote,sensdirect) text t=
+def cotepolyplacee(suffix ptA,ptB)(expr chcote,sensdirect)=
if xpart ptA<= xpart ptB:
if sensdirect:
- cote(ptA,ptB,chcote) t
+ cote(ptA,ptB,chcote)
else:
- cote.top(ptA,ptB,chcote) t
+ cote.top(ptA,ptB,chcote)
fi
else:
if sensdirect:
- cote.top(ptB,ptA,chcote) t
+ cote.top(ptB,ptA,chcote)
else:
- cote(ptB,ptA,chcote) t
+ cote(ptB,ptA,chcote)
fi
fi
enddef;
-vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) =
+def nommeangleaigu(expr B,A,C,chang,sensdirect)=
+ if sensdirect:
+ nomme(B,A,C,chang,1)
+ else:
+ nomme(C,A,B,chang,1)
+ fi
+enddef;
+
+
+vardef TriangleComplet(expr pAA,pBB,pCC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) =
%% Trace le triangle, les noms des points, les cotes et les angles
- save tmpang,tmpfig,tmpscale,sensdir;
+ save tmpang,tmpfig,tmpscale,sensdir,chA,chB,chC,AA,BB,CC;
+ pair AA,BB,CC;
+ AA:=pAA;BB:=pBB;CC:=pCC;
+ string chA,chB,chC;
+ chA:=chAA;chB:=chBB;chC:=chCC;
numeric tmpang,tmpscale;
boolean sensdir;
if angle(CC rotatedaround(AA,-angle(BB-AA)) - AA)>0:
@@ -3411,16 +3480,14 @@ vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA
if rep_ad_A and AutoAngleDroit:
draw marqueangledroit(BB,AA,CC) withpen currentpen
else:
- draw marqueangle(BB,AA,CC) withpen currentpen;
- nomme(BB,AA,CC,angAA);
+ nommeangleaigu(BB,AA,CC,angAA,sensdir);
fi;
fi;
if rep_type_triangle=2:
if rep_ad_B and AutoAngleDroit:
draw marqueangledroit(CC,BB,AA) withpen currentpen
else:
- draw marqueangle(CC,BB,AA) withpen currentpen;
- nomme(CC,BB,AA,angBB);
+ nommeangleaigu(CC,BB,AA,angBB,sensdir);
fi;
fi;
else:
@@ -3428,24 +3495,21 @@ vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA
if rep_ad_A and AutoAngleDroit:
draw marqueangledroit(BB,AA,CC) withpen currentpen
else:
- draw marqueangle(BB,AA,CC);
- nomme(BB,AA,CC,angAA);
+ nommeangleaigu(BB,AA,CC,angAA,sensdir);
fi;
fi
if (nang>=2):
if rep_ad_B and AutoAngleDroit:
draw marqueangledroit(CC,BB,AA) withpen currentpen
else:
- draw marqueangle(CC,BB,AA) withpen currentpen;
- nomme(CC,BB,AA,angBB);
+ nommeangleaigu(CC,BB,AA,angBB,sensdir);
fi;
fi
if (nang=3):
if rep_ad_C and AutoAngleDroit:
draw marqueangledroit(AA,CC,BB) withpen currentpen
else:
- draw marqueangle(AA,CC,BB) withpen currentpen;
- nomme(AA,CC,BB,angCC);
+ nommeangleaigu(AA,CC,BB,angCC,sensdir);
fi;
fi
fi
@@ -3730,9 +3794,9 @@ vardef defTriangle(text q)=
rep_tri_lc:=abs(rep_tri_BB-rep_tri_AA);
rep_tri_lb:=abs(rep_tri_CC-rep_tri_AA);
rep_tri_la:=abs(rep_tri_BB-rep_tri_CC);
- rep_tri_angA:=(angle(rep_tri_CC-rep_tri_AA) -angle(rep_tri_BB-rep_tri_AA) ) mod 360;
- rep_tri_angB:=(angle(rep_tri_AA-rep_tri_BB)-angle(rep_tri_CC-rep_tri_BB)) mod 360;
- rep_tri_angC:=180 - rep_tri_angB - rep_tri_angA;
+ rep_tri_angA:=abs(angle(rep_tri_CC-rep_tri_AA) -angle(rep_tri_BB-rep_tri_AA) );
+ rep_tri_angB:=abs(angle(rep_tri_AA-rep_tri_BB)-angle(rep_tri_CC-rep_tri_BB));
+ rep_tri_angC:=(180 - rep_tri_angB - rep_tri_angA);
% Angles droits ?
if arrondi(10**rep_int_arr,rep_tri_lc**2)=arrondi(10**rep_int_arr,(rep_tri_la)**2+(rep_tri_lb)**2):
rep_ad_C:=true
@@ -3797,26 +3861,21 @@ enddef;
-vardef ProcessAffTriangles(text q)(text p)(text c)(text a)=
+vardef ProcessAffTriangles(suffix A,B,C)(text p)(text c)(text a)=
%% Gestion de l'affichage
- save chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,count_tmp,ch,nang;
+ save chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,count_tmp,ch,nang,AA,BB,CC;
string chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,ch;
chAA=chBB=chCC=cha=chb=chc=changA=changB=changC="";
+ pair AA,BB,CC;
+ AA:=A;BB:=B;CC:=C;
numeric count_tmp,nang;
boolean tmpaffcotes,tmpaffangles;
tmpaffcotes:=AffCotes;tmpaffangles:=AffAngles;
if AffDonnees: AffCotes:=true;AffAngles:=true fi;
% Noms des points passés en argument
- count_tmp:=0;
- forsuffixes i=q:
- count_tmp:=count_tmp+1;
- ch:=_chaine(i);
- if count_tmp=1: chAA:=
- elseif count_tmp=2: chBB:=
- else: chCC:=
- fi
- "$" & ch & "$";
- endfor
+ chAA:="$" & _chaine(A) & "$";
+ chBB:="$" & _chaine(B) & "$";
+ chCC:="$" & _chaine(C) & "$";
% On modifie le nom des points si des valeurs sont passées dans p
count_tmp:=0;
for i=p:
@@ -3827,8 +3886,26 @@ vardef ProcessAffTriangles(text q)(text p)(text c)(text a)=
fi
i;
endfor
+ % On modifie les noms si on est dans une transformation et on définit les points
+ if _ext_tr_<>"":
+ chAA:=aj_extr_trsf(A,chAA);
+ chBB:=aj_extr_trsf(B,chBB);
+ chCC:=aj_extr_trsf(C,chCC);
+ fi
+ % On modifie les points si on est dans une transformation
+ if _tr_bool_:
+ def _transform_fig_= enddef;
+ AA:=_transform_pt_(A);
+ BB:=_transform_pt_(B);
+ CC:=_transform_pt_(C);
+ fi
% Cotes données par les longueurs
if AffCotes:
+ if _tr_rapp_<>1:
+ rep_tri_la:=rep_tri_la*_tr_rapp_;
+ rep_tri_lb:=rep_tri_lb*_tr_rapp_;
+ rep_tri_lc:=rep_tri_lc*_tr_rapp_;
+ fi;
if UnitCotes<>"":
cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
@@ -3866,11 +3943,193 @@ vardef ProcessAffTriangles(text q)(text p)(text c)(text a)=
if count_tmp>0: nang:= count_tmp elseif AffAngles: nang:=3 else: nang:=0 fi;
AffCotes:=tmpaffcotes;AffAngles:=tmpaffangles;
%
- TriangleComplet(q)(chAA,chBB,chCC,chc,cha,chb,changA,changB,changC)
+ TriangleComplet(AA,BB,CC)(chAA,chBB,chCC,chc,cha,chb,changA,changB,changC)
+enddef;
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%% TRANSFORMATIONS %%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+string extratransf; % Chaine à ajouter aux nom des points
+boolean _tr_bool_; % Indique qu'il faudra traiter la chaine précédente
+extratransf:="";
+ _tr_bool_:=false;
+
+numeric _tr_ang_rot_; % Angle à gérer pour l'affichage des points
+_tr_ang_rot_:=0;
+numeric _tr_rapp_; %Rapport d'agrandissement-réduction
+_tr_rapp_:=1;
+
+
+%% Translation
+
+vardef translationpoint(expr u)(expr A)=
+ A+u
+enddef;
+
+vardef translation(expr u)(text t)=
+ type_tr:=1;
+ if path t:
+ t shifted u
+ elseif pair t:
+ t+u
+ else:
+ def _transform_pt_= translationpoint(u) enddef;
+ def _transform_fig_= shifted u enddef;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ t
+ hide(_ext_tr_:=""; _tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;)
+ fi
+enddef;
+
+
+%% Rotation
+
+vardef rotationpoint(expr O,a)(expr A)=
+ A rotatedaround(O,a)
+enddef;
+
+vardef rotation(expr O,a)(text t)=
+ type_tr:=1;
+ if path t:
+ t rotatedaround(O,a)
+ elseif pair t:
+ t rotatedaround(O,a)
+ else:
+ def _transform_pt_= rotationpoint(O,a) enddef;
+ def _transform_fig_= rotatedaround(_cart(O),a) enddef;
+ _tr_ang_rot_:=a;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ t _transform_fig_
+ hide(_ext_tr_:="";_tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;
+ _tr_ang_rot_:=0;)
+ fi
+enddef;
+
+%% Symétrie centrale
+
+vardef symetriecentralepoint(expr O)(expr A)=
+ A rotatedaround(O,180)
+enddef;
+
+vardef symetriecentrale(expr O)(text t)=
+ type_tr:=1;
+ if path t:
+ t rotatedaround(O,180)
+ elseif pair t:
+ t rotatedaround(O,180)
+ else:
+ def _transform_pt_= symetriecentralepoint(O) enddef;
+ def _transform_fig_= rotatedaround(_cart(O),180) enddef;
+ _tr_ang_rot_:=180;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ t _transform_fig_
+ hide(_ext_tr_:="";_tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;
+ _tr_ang_rot_:=0;)
+ fi
+enddef;
+
+%% Symétrie axiale
+
+vardef symetrieaxialepoint(expr B,C)(expr A)=
+ A reflectedabout(B,C)
+enddef;
+
+vardef symetrieaxiale(expr B,C)(text t)=
+ type_tr:=1;
+ if path t:
+ t reflectedabout(B,C)
+ elseif pair t:
+ t reflectedabout(B,C)
+ else:
+ def _transform_pt_= symetrieaxialepoint(O) enddef;
+ def _transform_fig_= reflectedabout(_cart(B),_cart(C)) enddef;
+% _tr_ang_rot_:=180;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ t _transform_fig_
+ hide(_ext_tr_:="";_tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;
+ _tr_ang_rot_:=0;)
+ fi
enddef;
+%% Symétrie
+vardef symetrie(text r)(text t)=
+ if long_texte(r)=1:
+ symetriecentrale(r)(t)
+ else:
+ symetrieaxiale(r)(t)
+ fi
+enddef;
+
+
+
+%% Homothétie
+
+vardef homothetiepoint(expr O,k)(expr A)=
+ k[O,A]
+enddef;
+
+vardef homothetie(expr O,k)(text t)=
+ type_tr:=1;
+ if path t:
+ t shifted -O scaled k shifted O
+ elseif pair t:
+ k[O,t]
+ else:
+ def _transform_pt_= homothetiepoint(O,k) enddef;
+ def _transform_fig_= shifted -O scaled k shifted O enddef;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ _tr_rapp_:=abs(k);
+ t _transform_fig_
+ hide(_ext_tr_:=""; _tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;
+ _tr_rapp_:=1;)
+ fi
+enddef;
+
+%% Similitude
+
+vardef similitudepoint(expr O,k,a)(expr A)=
+ k[O,A] rotatedaround(O,a)
+enddef;
+vardef similitude(expr O,k,a)(text t)=
+ type_tr:=1;
+ if path t:
+ t rotatedaround(O,a) shifted -O scaled k shifted O
+ elseif pair t:
+ k[O,t] rotatedaround(O,a)
+ else:
+ def _transform_pt_= similitudepoint(O,k,a) enddef;
+ def _transform_fig_=rotatedaround(_cart(O),a) shifted -O scaled k shifted O enddef;
+ _ext_tr_:=extratransf;
+ _tr_bool_ := true;
+ _tr_rapp_:=abs(k);
+ t _transform_fig_
+ hide(_ext_tr_:=""; _tr_bool_:=false;
+ def _transform_pt_= enddef;
+ def _transform_fig_= enddef;
+ _tr_rapp_:=1;)
+ fi
+enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% FONCTIONS USUELLES %%%%%%%%%
@@ -4148,11 +4407,54 @@ vardef _chaine(suffix s)= %met les termes en indice si le 2e est un chiffre
c
enddef;
+string _ext_tr_; % Chaine à rajouter aux étiquette lors d'une transformation
+_ext_tr_:="";
+
+vardef ajout_extra_trsf(expr ch)= % ajoute _ext_tr_ en dernière ou avant dernière pos
+ save n;
+ numeric n;
+ n:=length(ch);
+ if n>1:
+ if substring (n-1,n) of ch = "$":
+ substring (0,n-1) of ch & _ext_tr_ & substring (n-1,n) of ch
+ else:
+ ch & _ext_tr_
+ fi
+ else:
+ ch
+ fi
+enddef;
+
+vardef aj_extr_trsf(expr A,ch)=
+ save tmpch,tmpchi,n;
+ numeric n;
+ string tmpch,tmpchi;
+ n:=length(ch);
+ if substring (n-1,n) of ch = "$":
+ tmpchi:=substring (1,n-1) of ch; % Sans les $
+ if (ASCII _ext_tr_ > 47) and (ASCII _ext_tr_ < 58):
+ tmpch:="$" & tmpchi & "_" & _ext_tr_ & "$";
+ tmpchi:= tmpchi & "[]";
+ scantokens("pair " & tmpchi & ";");
+ tmpchi:= substring(0,n-1) of tmpchi & _ext_tr_ & "]";
+ else:
+ tmpchi:= tmpchi & _ext_tr_;
+ tmpch:="$" & tmpchi & "$";
+ scantokens("pair " & tmpchi & ";");
+ fi
+ scantokens(tmpchi) := _transform_pt_(A);
+ else:
+ tmpch:=ch;
+ fi
+ tmpch
+enddef;
+
%%%%%%%%%%%%%%% MATHS %%%%%%%%%%%%%%%%%
vardef arrondi(expr p,x)= %arrondi de x au p-ième
- round((x-floor(x))*p)/p+floor(x)
+% round((x-floor(x))*p)/p+floor(x)
+ round(p*x)/p
enddef;
vardef arrondimil(expr x)=
@@ -4635,6 +4937,65 @@ vardef tablabels(expr s)(text t) text cc=
endfor
enddef;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%% PIXEL ART %%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+color pixart_coul[],pixart_grille_coul;
+numeric pixart_ep;
+pixart_ep:=0.3;
+pixart_grille_coul:=background;
+
+
+def pixcoul(text t)=
+ save cnt;
+ numeric cnt;
+ cnt:=0;
+ for i=t:
+ pixart_coul[cnt]:=i;
+ cnt := cnt +1;
+ endfor
+enddef;
+
+pixcoul(white,black,red,green,blue,cyan,magenta,jaune);
+
+vardef contour_case_pix(expr n,m)=
+ save tmpne,tmpse;
+ pair tmpne,tmpse;
+ tmpne:=0.5*(pixart_ep,pixart_ep) transformed inverse _T;
+ tmpse:=0.5*(pixart_ep,-pixart_ep) transformed inverse _T;
+ (((0,0)+tmpne)--((1,0)-tmpse)--((1,1)-tmpne)--((0,1)+tmpse)--cycle)
+ shifted (_tab(n,m)-(0.5,0.5))
+enddef;
+
+
+vardef pixart(text t)=
+ save _;
+ numeric _;
+ _:=-1;
+ grille_ep:=pixart_ep;
+ save cnt,lig,col;
+ numeric cnt,lig,col;
+ cnt:=0;
+ lig:=rep_tab_p;col:=1;
+ image(%
+ for i=t:
+ if numeric i:
+ if i>-1: filldraw contour_case_pix(col,lig) withcolor pixart_coul[i] fi
+ elseif color i:
+ filldraw contour_case_pix(col,lig) withcolor i
+ fi;
+ if col=rep_tab_n:
+ lig:=lig-1;col:=1;
+ else:
+ col:=col+1;
+ fi
+ endfor
+ )
+enddef;
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% DESSINS %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%