summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r--Master/texmf-dist/metapost/repere/repere.mp748
1 files changed, 538 insertions, 210 deletions
diff --git a/Master/texmf-dist/metapost/repere/repere.mp b/Master/texmf-dist/metapost/repere/repere.mp
index 32fa7f30a23..534d6f63b71 100644
--- a/Master/texmf-dist/metapost/repere/repere.mp
+++ b/Master/texmf-dist/metapost/repere/repere.mp
@@ -2,11 +2,11 @@
%% repere.mp %%
%% Macros pour la construction de figures dans un repère %%
%% o.peault@posteo.net %%
-%% Version 22.07 (Juillet 2022) %%
+%% Version 23.01 (Janvier 2023) %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This work may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.3 of this license
+% the LaTeX Project Public License, either version 1.3c of this license
% or (at your option) any later version. The latest version of this
% license is in http://www.latex-project.org/lppl.txt
%
@@ -19,7 +19,7 @@
% Juin 2022 : marquesegment plusieurs segments
% angle_cote
% segments, vecteurs, polygones complets
-% À faire : extratextx, extratexty
+% Octobre-Décembre 2022 : doc
input format;
if not known mplib: input latexmp fi;
@@ -31,7 +31,19 @@ warningcheck:=0;
%%%%%%%%%% REPERE %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numeric _nfig,_nbaxes,theta,taillegrad,taillepoint,taillecroix,facteurx,facteury;
-boolean flecheaxe,displayfrac,coupe,boolgradxpart,boolgradypart;
+boolean flecheaxe,displayfrac,coupe,gradxpart,gradypart;
+
+numeric Xmin,Xmax,Ux,Ymin,Ymax,Uy,theta,Uxy,Lx,Ly;
+Xmin:=-10;Xmax:=10;Ux:=1cm;
+Ymin:=-10;Ymax:=10;Uy:=1cm;
+Lx:=10cm;Ly:=10cm;
+theta:=90;
+Uxy:=-1;
+
+
+numeric xminf,xmaxf,nbf;
+% pour les tracés de fonctions
+
_nfig:=1;
path cadre;
numeric _diag,_largcadre,_hautcadre,_tfig;
@@ -112,8 +124,12 @@ vardef definitionrepere@#(text t) =
save i,_def;
if not rep_groupe: oldbeginfig(_nfig);bf:=true fi;
numeric _def[],i,unitex,unitey,unite;
- numeric Xmin,Xmax,Ymin,Ymax,XmiN,XmaX,YmiN,YmaX;
_def[7]:=90;i:=1;
+ _def1:=Xmin; _def2:=Xmax; _def3:=Ux;
+ _def4:=Ymin; _def5:=Ymax; _def6:=Uy;
+ _def7:=theta;
+ if Uxy>0: _def3:=Uxy;_def6:=Uxy fi;
+ if (str @#="larg") or (str @#="width"): _def3:=Lx;_def6:=Ly fi;
for _i=t: _def[i]:=_i; i:=i+1; endfor;
Xmin:=_def1; Xmax:=_def2; Ymin:=_def4; Ymax:=_def5; theta:=_def7;
if (str @#="larg") or (str @#="width"): _def3:=(_def3-_def6*cosd(theta)/sind(theta))/(Xmax-Xmin);_def6:=_def6/((Ymax-Ymin)*sind(theta))
@@ -126,14 +142,15 @@ vardef definitionrepere@#(text t) =
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:=1mm;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
- marque_p := "plein";displayfrac:=false;flecheaxe:=true;coupe:=true;
- boolgradxpart:=true;boolgradypart:=true;
- defaultscale:=1;
+ taillegrad:=0.8mm;taillepoint:=3;taillecroix:=5;_nbaxes:=0;_axorlab:=nullpicture;poslabO:=(0,0);
+ marque_p := "*";displayfrac:=false;flecheaxe:=true;coupe:=true;
+ gradxpart:=true;gradypart:=true;
+ defaultscale:=0.9;
unitex:=abs(_I);unitey:=abs(_J);unite:=unitex;
facteurx:=1;facteury:=1;
string extranumx,extranumy;
extranumx=extranumy="";
+ xminf:=Xmin;xmaxf:=Xmax;nbf:=50; % défaut tracés fonctions
init_traces;
enddef;
@@ -260,14 +277,15 @@ def setquad(expr a,b,c,d)=
QuadXmin:=a;QuadXmax:=b;QuadYmin:=c;QuadYmax:=d
enddef;
-def settout(expr a,b,c,d)=
+def setrepere(expr a,b,c,d)=
setaxes(a,b,c,d);
setgrad(a,b,c,d);
setval(a,b,c,d);
setquad(a,b,c,d);
enddef;
-let setall=settout;
+let setall=setrepere;
+let settout=setrepere;
def fin =
if _nbaxes=1: olddraw _axorlab fi;
@@ -871,7 +889,7 @@ vardef axexpart@#(text t)=
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 boolgradxpart:
+ if gradxpart:
olddraw graduationx(_i) withpen pencircle scaled 0.8bp
fi;
tmp:=_i;
@@ -895,7 +913,10 @@ vardef axeypart@#(text t)=
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;
+% 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:
@@ -962,33 +983,39 @@ color coulpoint,coullabel,coullabelfonc;
coulpoint:=black;coullabel:=black;coullabelfonc:=black;
-vardef MarquePointFig(expr pp)= % compatibilité geometriesyr15
+vardef marquepointFig(expr pp)= % compatibilité geometriesyr15
save $;
picture $;
- if marque_p = "plein":
+ if (marque_p = "plein") or (marque_p="*"):
$:=image(oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
- elseif marque_p = "creux":
+ elseif (marque_p = "creux") or (marque_p="o"):
$:=image(%
- oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor background;
+ %oldfill fullcircle scaled taillepoint shifted _cart(pp) withcolor background;
olddraw fullcircle scaled taillepoint shifted _cart(pp) withcolor coulpoint);
- elseif marque_p = "croix":
+ elseif (marque_p = "croix") or (marque_p = "+"):
+ $:=image(%
+ olddraw ((-taillecroix/2,0)--(taillecroix/2,0)) shifted _cart(pp) withcolor coulpoint;
+ olddraw ((0,-taillecroix/2)--(0,taillecroix/2)) shifted _cart(pp) withcolor coulpoint)
+ elseif (marque_p = "x"):
$:=image(%
- olddraw ((-taillecroix,0)--(taillecroix,0)) shifted _cart(pp) withcolor coulpoint;
- olddraw ((0,-taillecroix)--(0,taillecroix)) shifted _cart(pp) withcolor coulpoint)
+ olddraw ((-taillecroix/2,0)--(taillecroix/2,0)) rotated 45 shifted _cart(pp) withcolor coulpoint;
+ olddraw ((0,-taillecroix/2)--(0,taillecroix/2)) rotated 45 shifted _cart(pp) withcolor coulpoint)
else: $:=nullpicture
fi;
$
enddef;
-def MarquePoint(expr pp)= % compatibilité geometriesyr15
- draw MarquePointFig(pp)
+def marquepoint(expr pp)= % compatibilité geometriesyr15
+ draw marquepointFig(pp)
enddef;
-vardef pointe(text t) = %geometriesyr15
- for p_ = t: if pair p_: MarquePoint(p_); fi endfor;
+def marquepoints(text t) text q = %geometriesyr15
+ for p_ = t: show p_; if pair p_: marquepoint(p_) q; fi endfor;
enddef;
+let MarquePoint = marquepoint;
+
% Juin 2019 : placement fin des étiquettes (angle donné)
vardef thelabelang@#(expr s,z)=
save tmpang,tmpfig,tmppt,tmppath,tmpstr;
@@ -1025,13 +1052,13 @@ vardef nommepoint@#(text t)=
def mylabel = label enddef
fi;
if long_texte(t)=1:
- dess:=image(draw MarquePointFig(t);
+ dess:=image(draw marquepointFig(t);
ch:=_chaine(t);
mylabel@#("$" & ch & "$",t) withcolor coullabel)
else:
dess:=image(%
for PP=t:
- if pair PP: MarquePoint(PP); $:=PP
+ if pair PP: marquepoint(PP); $:=PP
else: if string PP: mylabel@#(PP,$) else: mylabel@#(PP scaled defaultscale,$) fi withcolor coullabel
fi;
endfor)
@@ -1040,6 +1067,16 @@ vardef nommepoint@#(text t)=
enddef;
+% Décembre 2022 définition et nom
+
+vardef nommedef@#(suffix suff_A)(expr ptA)=
+ pair suff_A;
+ suff_A:=ptA;
+ nomme@#(suff_A);
+enddef;
+
+
+
% Octobre 2021
vardef thelabelangrot@#(expr s,z,an)=
save tmpang,tmpfig,tmppt,tmppath,tmpstr;
@@ -1077,13 +1114,13 @@ vardef nommepointrot@#(text t)(expr an)=
def mylabel = labelrot enddef
fi;
if long_texte(t)=1:
- dess:=image(draw MarquePointFig(t);
+ dess:=image(draw marquepointFig(t);
ch:=_chaine(t);
mylabel@#("$" & ch & "$",t,an) withcolor coullabel)
else:
dess:=image(%
for PP=t:
- if pair PP: MarquePoint(PP); $:=PP
+ if pair PP: marquepoint(PP); $:=PP
else: if string PP: mylabel@#(PP,$,an) else: mylabel@#(PP scaled defaultscale,$,an) fi withcolor coullabel
fi;
endfor)
@@ -1100,12 +1137,12 @@ vardef nommecourbe@#(suffix p)(text t)=
picture dess;
if long_texte(t)=1:
dess:=image(ch:=_chaine(p);
- A:=(t,fonccourbe.p(t));
+ A:=(t,fonccourbe(p)(t));
label@#("$" & ch & "$",A) withcolor coullabelfonc)
else:
dess:=image(%
for _a=t:
- if numeric _a: A:=(_a,fonccourbe.p(_a))
+ if numeric _a: A:=(_a,fonccourbe(p)(_a))
else: if string _a: label@#(_a,A) else: label@#(_a scaled defaultscale,A) fi withcolor coullabelfonc
fi;
endfor)
@@ -1114,7 +1151,7 @@ vardef nommecourbe@#(suffix p)(text t)=
enddef;
-vardef nommeobj@#(text t)=
+vardef nommeFig@#(text t)=
save $;
picture $;
if long_texte(t)=4: $:=nommeangle@#(t)
@@ -1130,7 +1167,7 @@ vardef nommeobj@#(text t)=
$
enddef;
-def nomme = draw nommeobj enddef;
+def nomme = draw nommeFig enddef;
%
@@ -1156,19 +1193,18 @@ vardef pointnommetime(expr p)=
numeric nbint,pp,T[];
intercourbestimes(T)(cadre,p);
Pt:=_O;pp:=0;
- if known T[1]:
- Pt:= point T[1] of p;
- pp:=T[1];
- nbint:=1;
- forever:
- exitif not known T[nbint+1];
- nbint:=nbint+1;
- if (point T[nbint] of p) estmieuxplace Pt:
- Pt:=point T[nbint] of p;
- pp:=T[nbint];
- fi;
- endfor
- fi;
+ if unknown T[1]: T[1]:= 0; T[2] :=infinity fi;
+ Pt:= point T[1] of p;
+ pp:=T[1];
+ nbint:=1;
+ forever:
+ exitif not known T[nbint+1];
+ nbint:=nbint+1;
+ if (point T[nbint] of p) estmieuxplace Pt:
+ Pt:=point T[nbint] of p;
+ pp:=T[nbint];
+ fi;
+ endfor
pp
enddef;
@@ -1194,6 +1230,14 @@ vardef position(expr pp,tt,courbe)=
if tmpdir <0: pos:="urt"
else: pos:="lrt"
fi
+ elseif tt=0:
+ if tmpdir<0: pos:="urt"
+ else: pos := "lrt"
+ fi
+ else:
+ if tmpdir>0: pos :="ulft"
+ else: pos := "llft"
+ fi
fi;
pos
enddef;
@@ -1273,7 +1317,7 @@ vardef marquepointcourbefig(suffix p)(text t)=
picture $;
$=image(%
for i=t:
- MarquePoint((i,fonccourbe.p(i)));
+ marquepoint((i,fonccourbe(p)(i)));
endfor);
$
enddef;
@@ -1285,7 +1329,7 @@ vardef marquepointcheminfig(suffix p)(text t)=
picture $;
$=image(%
for i=t:
- MarquePoint(point i of p);
+ marquepoint(point i of p);
endfor);
$
enddef;
@@ -1360,9 +1404,9 @@ enddef;
%%%%%%%%%% QUADRILLAGE %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- numeric ep; color coul;
- ep:= .3bp; %%%%%%%% épaisseur du trait
- coul := .7white; %%%%%%%% couleur du trait
+ numeric q_ep; color q_coul;
+ q_ep:= .3bp; %%%%%%%% épaisseur du trait
+ q_coul := .7white; %%%%%%%% couleur du trait
def quadstyle= enddef;
vardef quadrillage(expr quadx,quady) =
@@ -1370,24 +1414,29 @@ enddef;
picture $;
$=image(if quadx>0:
for i=ceiling((QuadXmin-xO)/quadx) upto floor((QuadXmax-xO)/quadx):
- olddraw _cart(arrondimil(i*quadx)+xO,QuadYmin)--_cart(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled ep withcolor coul;
+ olddraw _cart(arrondimil(i*quadx)+xO,QuadYmin)--_cart(arrondimil(i*quadx)+xO,QuadYmax) quadstyle withpen pencircle scaled q_ep withcolor q_coul;
endfor;
fi;
if quady>0:
for i=ceiling((QuadYmin-yO)/quady) upto floor((QuadYmax-yO)/quady):
- olddraw _cart(QuadXmin,arrondimil(i*quady)+yO)--_cart(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled ep withcolor coul quadstyle;
+ olddraw _cart(QuadXmin,arrondimil(i*quady)+yO)--_cart(QuadXmax,arrondimil(i*quady)+yO) withpen pencircle scaled q_ep withcolor q_coul quadstyle;
endfor;
fi);
$
enddef;
+numeric pp_ep;
+color pp_coul;
+pp_ep:=2;
+pp_coul:=black;
+
vardef papierpointe(expr quadx,quady) =
save $;
picture $;
$=image(if (quadx>0) and (quady>0):
for i=ceiling(QuadXmin/quadx) upto floor(QuadXmax/quadx):
for j=ceiling(QuadYmin/quady) upto floor(QuadYmax/quady):
- olddraw (0,0) shifted _cart(i*quadx,j*quady) withpen pencircle scaled 2;
+ olddraw (0,0) shifted _cart(i*quadx,j*quady) withpen pencircle scaled pp_ep withcolor pp_coul;
endfor;
endfor;
fi);
@@ -1396,8 +1445,8 @@ enddef;
numeric pm_epa, pm_epb, pm_epc;
color pm_coula, pm_coulb, pm_coulc;
- pm_epa := .2bp; pm_epb := .3bp; pm_epc := .4bp; %%%%%%%%%% épaisseurs des traits
- pm_coula := .6*white; pm_coulb := .4*white; pm_coulc := black; %%%%%%%%%% couleurs des traits
+ pm_epa := .2bp; pm_epb := .4bp; pm_epc := .6bp; %%%%%%%%%% épaisseurs des traits
+ pm_coula := .6*white; pm_coulb := .2*white; pm_coulc := black; %%%%%%%%%% couleurs des traits
vardef papiermillimetre =
save $;
@@ -1454,15 +1503,15 @@ enddef;
vardef courbefonc(suffix f)(text t)=
- save cc;path cc;
- save k,Val;numeric k,Val[];
- Val[1]:=Xmin;Val[2]:=Xmax;Val[3]:=60;
- k:=1;
- for i=t:
- Val[k]:=i;
- k:=k+1;
- endfor
- courbef_(f,Val[1],Val[2],Val[3])
+ save cc;path cc;
+ save k,Val;numeric k,Val[];
+ Val[1]:=xminf;Val[2]:=xmaxf;Val[3]:=nbf;
+ k:=1;
+ for i=t:
+ Val[k]:=i;
+ k:=k+1;
+ endfor
+ courbef_(f,Val[1],Val[2],Val[3])
enddef;
@@ -1484,28 +1533,54 @@ enddef;
vardef courbepoints(suffix f)(expr xmin, xmax, n) = %Points non reliés
save $,x;
picture $;
- $=image(MarquePoint((xmin,f(xmin)));
+ $=image(marquepoint((xmin,f(xmin)));
for i=1 upto n-1:
- MarquePoint((xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
+ marquepoint((xmin+i*(xmax-xmin)/(n-1),f(xmin+i*(xmax-xmin)/(n-1))));
endfor );
$
enddef;
-vardef fonccourbe@#(expr x)= %Ordonnée du point de la courbe @# d'abscisse x (dans le repère utilisateur)
- ypart pointcourbe@#(x)
+%vardef fonccourbe@#(expr x)= %Ordonnée du point de la courbe @# d'abscisse x (dans %le repère utilisateur)
+% ypart pointcourbe@#(x)
+%enddef;
+
+vardef fonccourbe(expr p)(expr x)= %Ordonnée du point de la courbe @# d'abscisse x (dans le repère utilisateur)
+ ypart pointcourbe(p)(x)
enddef;
-vardef pointcourbe@#(expr x)= %Point de la courbe @# d'abscisse x dans le repère utilisateur
+%vardef pointcourbe@#(expr x)= %Point de la courbe @# d'abscisse x dans le repère %utilisateur
+%save _P_,t;
+% numeric t; pair _P_;
+% (t,whatever)=@# intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+% if t=-1: _P_:=(x,0)
+% else: _P_:=point t of @#
+% fi;
+% _P_
+%enddef;
+
+vardef pointcourbe(expr p)(expr x)= %Point de la courbe @# d'abscisse x dans le repère utilisateur
save _P_,t;
numeric t; pair _P_;
- (t,whatever)=@# intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+ (t,whatever)=p intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
if t=-1: _P_:=(x,0)
- else: _P_:=point t of @#
+ else: _P_:=point t of p
fi;
_P_
enddef;
-vardef der@#(expr x)= %Fonction dérivée
+vardef der(expr p)(expr x)= %Fonction dérivée
+ save pp,t,v,w,d;
+ path pp;
+ pair v,w;
+ pp:=p;
+ (t,whatever) = pp intersectiontimes ((x,2*Ymin-Ymax)--(x,2*Ymax-Ymin));
+ v:=direction t of pp;
+% w:=unitvector(v transformed inverse _T);
+ if xpart v = 0: d:=0 else: d:= (ypart v)/(xpart v) fi;
+ d
+enddef;
+
+vardef deri@#(expr x)= %Fonction dérivée
save pp,t,v,w,d;
path pp;
pair v,w;
@@ -1844,7 +1919,7 @@ 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);
+ 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;
);
@@ -1909,8 +1984,8 @@ vardef _segmrect_@#(suffix p)(expr a,pas)=
_sousp=subpath (xpart(p intersectiontimes droiteeqx(a)),xpart(p intersectiontimes droiteeqx(a+pas))) of p;
if _typerect@#=1: llcorner _sousp -- lrcorner _sousp
elseif _typerect@#=2: ulcorner _sousp -- urcorner _sousp
- elseif _typerect@#=3: (pointcourbe.p(a))--(pointcourbe.p(a) shifted (pas,0))
- elseif _typerect@#=4: (pointcourbe.p(a+pas) shifted (-pas,0))--(pointcourbe.p(a+pas))
+ elseif _typerect@#=3: (pointcourbe(p)(a))--(pointcourbe(p)(a) shifted (pas,0))
+ elseif _typerect@#=4: (pointcourbe(p)(a+pas) shifted (-pas,0))--(pointcourbe(p)(a+pas))
fi
enddef;
@@ -2044,7 +2119,7 @@ vardef projetey(expr A)=
(xO,ypart (A))
enddef;
-vardef projectionx@#(text t)=
+vardef Projectionx@#(text t)=
save $,_a,_fg,dec;
picture $,_fg;_fg:=nullpicture;
numeric dec;dec=0;
@@ -2057,7 +2132,9 @@ vardef projectionx@#(text t)=
$
enddef;
-vardef projectiony@#(text t)=
+def projectionx = Projectionx enddef; %% Compatibilité
+
+vardef Projectiony@#(text t)=
save $,_a,_fg,dec;
picture $,_fg;_fg:=nullpicture;
numeric dec;dec=0;
@@ -2070,8 +2147,9 @@ vardef projectiony@#(text t)=
$
enddef;
+def projectiony = Projectiony enddef; %% Compatibilité
-vardef projectionaxes(text t)=
+vardef Projectionaxes(text t)=
save $,_A,n;
picture $,_fg[];_fg1=_fg2=nullpicture;
pair _A;
@@ -2090,6 +2168,8 @@ vardef projectionaxes(text t)=
$
enddef;
+def projectionaxes = Projectionaxes enddef; %% Compatibilité
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%% SUITES %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2229,6 +2309,57 @@ vardef suiterecproj(text t)=
enddef;
+% Octobre 2022 - SuiteRec figure complète
+string suite_nom,suite_labx,suite_laby,suite_posx,suite_posy,suite_styleproj;
+boolean suite_affx,suite_affy;
+numeric suite_arrondi;
+suite_nom:="u";
+suite_arrondi:=1;
+suite_labx:="nom";
+suite_laby:="";
+suite_affx:=true;
+suite_affy:=true;
+suite_posx:="bot";
+suite_posy:="lft";
+suite_styleproj:="dashed evenly";
+
+vardef Suiterec(suffix f)(expr deb,fin,init) text t=
+ save tmpfig,tmpsr;
+ path tmpsr;
+ picture tmpfig;
+ tmpfig:=image(%
+ tmpsr:= suiterec(f,deb,fin,init);
+ if suite_labx="val":
+ numeric tmpsreclab;
+ tmpsreclab:=suite_arrondi
+ else:
+ string tmpsreclab;
+ if suite_labx="nom":
+ tmpsreclab:=suite_nom
+ else:
+ tmpsreclab:=""
+ fi
+ fi;
+ if suite_affx:
+ draw scantokens("suiterecprojx."& suite_posx)(tmpsreclab) t scantokens(suite_styleproj)
+ fi;
+ if suite_laby="val":
+ numeric tmpsreclab;
+ tmpsreclab:=suite_arrondi
+ else:
+ string tmpsreclab;
+ if suite_laby="nom":
+ tmpsreclab:=suite_nom
+ else:
+ tmpsreclab:=""
+ fi
+ fi;
+ if suite_affy: draw scantokens("suiterecprojy."& suite_posy)(tmpsreclab) t scantokens(suite_styleproj) fi;
+ draw tmpsr t;
+ );
+ tmpfig
+enddef;
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% INTERVALLES %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2243,13 +2374,16 @@ enddef;
pair sensborne.FF,sensborne.FO,sensborne.OF,sensborne.OO;
sensborne.FF=-sensborne.OO=(1,-1);sensborne.FO=-sensborne.OF=(1,1);
+numeric int_ep;
+int_ep:=2bp;
+
vardef intervallex@#(expr vmin,vmax)=
save $;
picture $;
$=image(%
- olddraw _cart(vmin,xO)--_cart(vmax,xO) withpen pencircle scaled 2pt;
- olddraw bornex[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
- olddraw bornex[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+ olddraw _cart(vmin,xO)--_cart(vmax,xO) withpen pencircle scaled int_ep;
+ olddraw bornex[xpart sensborne@#](vmin) withpen pencircle scaled int_ep;
+ olddraw bornex[ypart sensborne@#](vmax) withpen pencircle scaled int_ep);
$
enddef;
@@ -2257,9 +2391,9 @@ vardef intervalley@#(expr vmin,vmax)=
save $;
picture $;
$=image(%
- olddraw _cart(yO,vmin)--_cart(yO,vmax) withpen pencircle scaled 2pt;
- olddraw borney[xpart sensborne@#](vmin) withpen pencircle scaled 2pt;
- olddraw borney[ypart sensborne@#](vmax) withpen pencircle scaled 2pt);
+ olddraw _cart(yO,vmin)--_cart(yO,vmax) withpen pencircle scaled int_ep;
+ olddraw borney[xpart sensborne@#](vmin) withpen pencircle scaled int_ep;
+ olddraw borney[ypart sensborne@#](vmax) withpen pencircle scaled int_ep);
$
enddef;
@@ -2267,6 +2401,12 @@ enddef;
%%%%%%%%%%%%% STATISTIQUES %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%Obsolète 2022
+%
+% Deb
+%
+
numeric _decboitemoustache_,_largboitemoustache_;
@@ -2334,9 +2474,95 @@ vardef projboitemoustache@#(text t)=
$
enddef;
+%
+% Fin
+%
+% Obsolète 2022
+%
+
+% Novembre 2022 - Nouvelle version diagramme en boite
+numeric boite_dec,boite_larg;
+string boite_lab,boite_lab_[],boite_pos,boite_styleproj;
+boolean boite_points,boite_proj;
+boite_dec:=1.5;
+boite_larg:=1;
+boite_points:=true;
+boite_pos:="bot";
+boite_styleproj:="dashed evenly";
+boite_proj:=true;
+boite_lab:="nom";
+
+
+def def_boite_lab(text t)=
+ save k;
+ numeric k;
+ k:=0;
+ for i=t:
+ k := k+1;
+ if string i: boite_lab_[k]:=i
+ elseif numeric i: boite_lab_[k]:="\num{" & decimal(i) & "}"
+ fi;
+ endfor
+enddef;
+
+def_boite_lab("$X_{\text{min}}$","$Q_1$","$M$","$Q_3$","$X_{\text{max}}$");
+
+numeric _valeursboitemoustache_[];
+def def_boite_val(text t)=
+ save n;
+ numeric n;
+ n:=0;
+ for i=t:
+ n:=n+1;
+ _valeursboitemoustache_[n]:=i;
+ endfor;
+enddef;
+
+vardef diagrammeboite(text t)=
+ save tmp;
+ path tmp;
+ def_boite_val(t);
+ tmp := ((_valeursboitemoustache_[1],yO)--(_valeursboitemoustache_[2],yO)--
+ (_valeursboitemoustache_[2],yO-0.5boite_larg)--(_valeursboitemoustache_[3],yO-0.5boite_larg)--
+ (_valeursboitemoustache_[3],yO+0.5boite_larg)--(_valeursboitemoustache_[3],yO-0.5boite_larg)--
+ (_valeursboitemoustache_[4],yO-0.5boite_larg)--(_valeursboitemoustache_[4],yO)--
+ (_valeursboitemoustache_[5],yO)--(_valeursboitemoustache_[4],yO)--
+ (_valeursboitemoustache_[4],yO+0.5boite_larg)--(_valeursboitemoustache_[2],yO+0.5boite_larg)--
+ (_valeursboitemoustache_[2],yO)--cycle) shifted (0,boite_dec);
+ tmp
+enddef;
+
+
+
+vardef Diagrammeboite(text s) text t=
+ save figtmp;
+ picture figtmp;
+ def_boite_val(s);
+ if boite_lab="":
+ def_boite_lab("","","","","")
+ elseif boite_lab="val":
+ def_boite_lab(_valeursboitemoustache_[1],_valeursboitemoustache_[2],_valeursboitemoustache_[3],_valeursboitemoustache_[4],_valeursboitemoustache_[5])
+ fi;
+ figtmp:=image(%
+ draw diagrammeboite() t;
+ if boite_points: marquepoint((_valeursboitemoustache_[1],yO+boite_dec)) t;
+ marquepoint((_valeursboitemoustache_[5],yO+boite_dec)) t
+ fi;
+ if boite_proj:
+ for i=1,5:
+ draw scantokens("Projectionx." & boite_pos)((_valeursboitemoustache_[i],yO+boite_dec),boite_lab_[i]) t scantokens(boite_styleproj);
+ endfor
+ for i=2,3,4:
+ draw scantokens("Projectionx." & boite_pos)((_valeursboitemoustache_[i],yO+boite_dec-0.5boite_larg),boite_lab_[i]) t scantokens(boite_styleproj);
+ endfor
+ fi
+ );
+ figtmp
+enddef;
+
-numeric diampointsbatons;
-diampointsbatons:=5;
+numeric batons_diampoints;
+batons_diampoints:=5;
vardef diagrammebatons(text t) =
save $;
@@ -2348,10 +2574,10 @@ vardef diagrammebatons(text t) =
$=image(%
interim linecap:=butt;
marque_p:="plein";
- taillepoint:=diampointsbatons*0.5;
+ taillepoint:=batons_diampoints*0.5;
for i=t:
draw i--projetex(i);
- MarquePoint(i);
+ marquepoint(i);
endfor
);
taillepoint:=tmp_taillepoint;
@@ -2360,11 +2586,11 @@ vardef diagrammebatons(text t) =
enddef;
-numeric largbarres;
-largbarres := 20;
+numeric barres_larg;
+barres_larg := 20;
-def barrei(expr p)=
- (projetex(_cart(p)-0.5(largbarres,0))--(_cart(p)-0.5(largbarres,0))--(_cart(p)+0.5(largbarres,0))--projetex(_cart(p)+0.5(largbarres,0))) transformed inverse _T
+vardef barrei(expr p)=
+ (projetex(_cart(p)-0.5(barres_larg,0))--(_cart(p)-0.5(barres_larg,0))--(_cart(p)+0.5(barres_larg,0))--projetex(_cart(p)+0.5(barres_larg,0))) transformed inverse _T
enddef;
vardef diagrammebarres(text t)=
@@ -2427,32 +2653,30 @@ vardef diagrammepoisson(expr lambda)=
enddef;
-% mai 2017
+% mai 2017 - modifiée novembre 2022
% courbe de la densité de la loi normale
-vardef densitenormale(text t)=
- if long_texte(t)=2: %les bornes ne sont pas précisées donc on prend Xmin et Xmax
- densitenormalebornes(t,Xmin,Xmax)
- else: % les bornes sont précisées
- densitenormalebornes(t)
- fi
-enddef;
-
-%courbe de la densité de la loi normale entre a et b
-vardef densitenormalebornes(expr mu,sigma,a,b)=
+vardef densitenormale(expr mu,sigma)(text t)=
vardef tmpdens(expr x)=
(1/(sigma*sqrt(2*pi)))*exp(-0.5*(((x-mu)/sigma)**2))
enddef;
- courbefonc(tmpdens)(a,b)
+ courbefonc(tmpdens)(t)
enddef;
-
% Mai 2017
% courbe de la densité de la loi exponentielle
-vardef densiteexponentielle(expr lambda)=
+vardef densiteexponentielle(expr lambda)(text t)=
vardef tmpdens(expr x)=
lambda*exp(-lambda*x)
enddef;
- courbefonc(tmpdens)(0,Xmax)
+ save k,Val;numeric k,Val[];
+ Val[1]:=0;Val[2]:=xmaxf;Val[3]:=nbf;
+ k:=1;
+ for i=t:
+ Val[k]:=i;
+ k:=k+1;
+ endfor
+ if Val[1]<0: Val[1]:=0 fi;
+ courbef_(tmpdens,Val[1],Val[2],Val[3])
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2527,7 +2751,8 @@ vardef cerclecr(expr O,r)=
enddef;
vardef cerclecp(expr O,A)=
- fullcircle scaled (2*abs(_cart(A)-_cart(O))) shifted _cart(O) transformed inverse _T
+% fullcircle scaled (2*abs(_cart(A)-_cart(O))) shifted _cart(O) transformed inverse _T
+ fullcircle scaled (2*abs(_cart(A)-_cart(O))) rotated angle(_cart(A)-_cart(O)) shifted _cart(O) transformed inverse _T
enddef;
vardef cerclecir(expr A,B,C)=
@@ -2600,44 +2825,77 @@ vardef nommeangle@#(expr A,O,B,p)=
enddef;
+echelle_marque_ad:=1;
taille_marque_ad:=0.3cm;
vardef marqueangledroit(expr A,O,B)=
- parallelogramme((_cart(O)+taille_marque_ad*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+taille_marque_ad*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
+ parallelogramme((_cart(O)+taille_marque_ad*echelle_marque_ad*unitvector(_cart(A)-_cart(O))) transformed inverse _T,O,(_cart(O)+taille_marque_ad*echelle_marque_ad*unitvector(_cart(B)-_cart(O))) transformed inverse _T)
enddef;
+echelle_marque_s:=1;
taille_marque_s:=0.3cm;
angle_marque_s:=60;
sep_marque_s:=2;
+string forme_marque_s;
+forme_marque_s:="/";
vardef milieu(expr A,B)=
0.5[A,B]
enddef;
-vardef marqueunique_s(expr A,B)=
- ((-taille_marque_s*unitvector(_cart(A)-_cart(B))/2)--(taille_marque_s*unitvector(_cart(A)-_cart(B))/2)) rotated angle_marque_s
+vardef marqueuniquesegment_s(expr A,B)=
+ ((-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2)--(taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2)) rotated angle_marque_s
enddef;
+vardef marqueuniquecroix_s(expr A,B)=
+ ((-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated 45 -- (taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated 45 -- (0,0) -- (-taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated -45 -- (taille_marque_s*echelle_marque_s*unitvector(_cart(A)-_cart(B))/2) rotated -45)
+enddef;
+
+vardef marqueuniquevague_s(expr A,B)=
+ ((-taille_marque_s*echelle_marque_s/2,0){1,-1}..(0,0){1,1}..{1,-1}(taille_marque_s*echelle_marque_s/2,0)) rotated (angle(_cart(A)-_cart(B))+angle_marque_s)
+enddef;
-vardef marqueseg(expr A,B,n)=
+vardef marqueuniquerond_s(expr A,B)=
+ fullcircle scaled (0.5taille_marque_s*echelle_marque_s)
+enddef;
+
+vardef marqueunique_s(expr A,B,f)=
+ if f="o":
+ marqueuniquerond_s(A,B)
+ elseif f="s":
+ marqueuniquevague_s(A,B)
+ elseif f="x":
+ marqueuniquecroix_s(A,B)
+ else:
+ marqueuniquesegment_s(A,B)
+ fi
+enddef;
+
+
+vardef marqueseg(expr A,B,n,f)=
save $;
picture $;
$=image(
for i=1 upto n:
- draw marqueunique_s(A,B) shifted ((i-1-(n-1)/2)*sep_marque_s*unitvector(_cart(B)-_cart(A))) transformed inverse _T;
+ draw marqueunique_s(A,B,f) shifted ((i-1-(n-1)/2)*sep_marque_s*unitvector(_cart(B)-_cart(A))) transformed inverse _T;
endfor
);
$ shifted milieu(_cart(A),_cart(B))
enddef;
vardef marquesegment(text t)=
- save n,N,Pti,Ptii,tmpfig;
+ save n,N,Pti,Ptii,tmpfig,tmpforme;
numeric n,N;
picture tmpfig;
+ string tmpforme;
pair Pti,Ptii;
+ tmpforme:=substring (0,1) of forme_marque_s;
N:=0;
+ n:=1;
for i=t:
- if numeric i: n:=i fi;
+ if numeric i: n:=i
+ elseif string i: tmpforme:=substring (0,1) of i;n:=length i
+ fi;
endfor
tmpfig:=image(%
for i=t:
@@ -2646,22 +2904,20 @@ vardef marquesegment(text t)=
Pti := i;
elseif pair i:
Ptii := i;
- draw marqueseg(Pti,Ptii,n);
+ draw marqueseg(Pti,Ptii,n,tmpforme);
fi;
endfor
);
tmpfig
enddef;
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%% FIGURES GÉOMÉTRIQUES COMPLÈTES %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
boolean AffPoints, AffCotes, AffAngles, AffVect, AffDonnees;
AffPoints:=true; %
-AffCotes:=true;
+AffCotes:=false;
AffAngles:=false;
AffVect:=true;
AffDonnees:=false;
@@ -2700,6 +2956,39 @@ enddef;
%
%%%%%%%%%%%%%%%% Segments %%%%%%%%%%%%%%%
+vardef Segment(suffix AA,BB)(text t)(text s)=
+ save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
+ numeric ll_seg,anghh,count_tmp;
+ string chAA,chBB,chcote;
+ count_tmp:=0;
+ if AffCotes:
+ chcote:=decimal(abs(BB-AA));
+ if UnitCotes<>"":
+ chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
+ else:
+ chcote:="\num[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}";
+ fi
+ else:
+ chcote:=""
+ fi;
+ if AffPoints:
+ chAA:="$" & _chaine(AA) & "$";
+ chBB:="$" & _chaine(BB) & "$";
+ else:
+ chAA:="";chBB:="";
+ fi;
+ for i=t:
+ count_tmp:=count_tmp+1;
+ if count_tmp = 1: chAA:=i
+ elseif count_tmp=2: chBB:=i
+ fi;
+ endfor
+ for i=s:
+ chcote:=i;
+ endfor
+ SegmentComplet(AA,BB)(chAA,chBB,chcote)
+enddef;
+
vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei) text t=
@@ -2715,14 +3004,18 @@ vardef SegmentComplet(expr AA,BB)(expr chAA,chBB,cotei) text t=
draw AA--BB t;
nomme[tmpana](AA,chAA) t withpen currentpen;
nomme[tmpanb](BB,chBB) t withpen currentpen;
- cote(AA,BB,cotei) t;
+ if xpart AA <= xpart BB:
+ cote(AA,BB,cotei) t
+ else:
+ cote(BB,AA,cotei) t
+ fi;
);
tmp
enddef;
numeric ll_seg;
-vardef defSegment(suffix AA,BB)(text s)=
+vardef defSegmentL(suffix AA,BB)(text s)=
%% Définit les points AA et BB en fonction de la longueur, le point de départ et l'angle
save count_tmp,anghh,posAA;
numeric count_tmp,anghh;
@@ -2740,54 +3033,28 @@ vardef defSegment(suffix AA,BB)(text s)=
fi;
endfor
% Point A
- if unknown AA: AA:=posAA fi;
+ if unknown AA: pair AA;AA:=posAA fi;
% Point B
if unknown BB:
+ pair BB;
BB:=(ll_seg,0) rotated anghh shifted AA;
else: %du coup, on change la valeur de l et angh
ll_seg:=abs(BB-AA);anghh:=angle(BB-AA);
fi;
enddef;
-vardef Segment(suffix AA,BB)(text s)(text t)=
+vardef SegmentL(suffix AA,BB)(text s)(text t)(text q)=
%% Macro utilisateur, definit les points A et B et trace la figure complète en fonctions des données
- save ll_seg,posAA,anghh,count_tmp,chAA,chBB,chcote;
- numeric ll_seg,anghh,count_tmp;
- string chAA,chBB,chcote;
- defSegment(AA,BB)(s);
- count_tmp:=0;
- if AffCotes:
- if ll_seg=0:
- chcote:=decimal(abs(BB-AA))
- else:
- chcote:=decimal(ll_seg)
- fi;
- if UnitCotes<>"":
- chcote:="\SI[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}{" & UnitCotes & "}"
- else:
- chcote:="\num[round-pad = false,round-mode=places,round-precision=" & decimal(ArrondiCotes) & "]{" & chcote & "}";
- fi
- else:
- chcote:=""
- fi;
- if AffPoints:
- chAA:="$" & _chaine(AA) & "$";
- chBB:="$" & _chaine(BB) & "$";
- else:
- chAA:="";chBB:="";
- fi;
- for i=t:
- count_tmp:=count_tmp+1;
- if count_tmp = 1: chcote:=i
- elseif count_tmp=2: chAA:=i
- else: chBB:=i
- fi;
- endfor
- SegmentComplet(AA,BB)(chAA,chBB,chcote)
+ defSegmentL(AA,BB)(s);
+ Segment(AA,BB)(t)(q)
enddef;
-
+vardef segmentL(suffix AA,BB)(text s)=
+%% Macro utilisateur, definit les points A et B et renvoie A--B
+ defSegmentL(AA,BB)(s);
+ AA--BB
+enddef;
%%%%%%%%%%%%%%%% Vecteurs %%%%%%%%%%%%%%%
@@ -2814,11 +3081,13 @@ vardef VecteurComplet(expr AA,uu)(expr chAA,chBB,cotei) text t=
tmp
enddef;
+%vardef Vecteur(suffix
+
pair AA_vect,uu_vect;
-vardef defVecteur(text t)(text s)=
+vardef defVecteurL(text t)(text s)=
%% t peut être (u), (u,A) ou (u,A,B)
-%% Définit le vecteur u et, éventuellement, les points AA et BB en fonction de la longueur, le point de départ et l'angle
+%% Définit le vecteur u et, éventuellement, les points A et B en fonction de la longueur, le point de départ et l'angle
save anghh,count_tmp,ufixe,ll,posAA,anghh;
numeric anghh,count_tmp,ll;
pair posAA;
@@ -2857,14 +3126,14 @@ vardef defVecteur(text t)(text s)=
enddef;
-vardef Vecteur(text q)(text s)(text t) text r=
+vardef VecteurL(text q)(text s)(text t) text r=
%% Macro utilisateur, definit le vecteur u et éventuellement les points A et B et trace la figure complète en fonctions des données
save tmp,posAA,count_tmp,chAA,chBB,chvect,AA_vect,uu_vect,ch;
numeric count_tmp;
pair posAA,AA_vect,uu_vect;
string chAA,chBB,chvect,ch;
picture tmp;
- defVecteur(q)(s);
+ defVecteurL(q)(s);
chAA:="";chBB:="";chvect:="";
count_tmp:=0;
forsuffixes i=q:
@@ -2898,10 +3167,32 @@ 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=
+ if xpart ptA<= xpart ptB:
+ if sensdirect:
+ cote(ptA,ptB,chcote) t
+ else:
+ cote.top(ptA,ptB,chcote) t
+ fi
+ else:
+ if sensdirect:
+ cote.top(ptB,ptA,chcote) t
+ else:
+ cote(ptB,ptA,chcote) t
+ fi
+ fi
+enddef;
+
vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA,angAA,angBB,angCC) text t =
-%% Trace le triangle, les noms des points, les cotes et le sangles
- save tmpang,tmpfig,tmpscale;
+%% Trace le triangle, les noms des points, les cotes et les angles
+ save tmpang,tmpfig,tmpscale,sensdir;
numeric tmpang,tmpscale;
+ boolean sensdir;
+ if angle(CC rotatedaround(AA,-angle(BB-AA)) - AA)>0:
+ sensdir:=true
+ else:
+ sensdir:=false
+ fi;
tmpscale:=defaultscale;
picture tmpfig;
tmpfig:=image(%
@@ -2918,10 +3209,11 @@ vardef TriangleComplet(suffix AA,BB,CC)(expr chAA,chBB,chCC,coteAB,coteBC,coteCA
cote(AA,BB,coteAB) t;
if rep_type_triangle=0: cote(BB,CC,coteBC) t fi;
if rep_type_triangle<=1: cote(CC,AA,coteCA) t fi;
- elseif AffCotes:
- cote(AA,BB,coteAB) t;
- cote(BB,CC,coteBC) t;
- cote(CC,AA,coteCA) t;
+% elseif AffCotes:
+ else:
+ cotepolyplacee(AA,BB)(coteAB,sensdir) t;
+ cotepolyplacee(BB,CC)(coteBC,sensdir) t;
+ cotepolyplacee(CC,AA)(coteCA,sensdir) t;
fi
defaultscale:=EchelleAngles;
if AffDonnees and (rep_type_triangle<3):
@@ -2984,11 +3276,11 @@ vardef defTriangleLLA(text t)(text s)=
forsuffixes i=t:
nbsommet:=nbsommet+1;
if nbsommet=1:
- if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+ if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
elseif nbsommet=2:
- if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+ if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
else:
- if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+ if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
fi;
endfor
count_tmp:=0;
@@ -3074,11 +3366,11 @@ vardef defTriangleLAA(text t)(text s)=
forsuffixes i=t:
nbsommet:=nbsommet+1;
if nbsommet=1:
- if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+ if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
elseif nbsommet=2:
- if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+ if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
else:
- if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+ if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
fi;
endfor
count_tmp:=0;
@@ -3155,11 +3447,11 @@ vardef defTriangleLLL(text t)(text s)=
forsuffixes i=t:
nbsommet:=nbsommet+1;
if nbsommet=1:
- if known i: sommetdefiniA:=true; rep_tri_AA:=i fi
+ if known i: sommetdefiniA:=true; rep_tri_AA:=i else: pair i fi
elseif nbsommet=2:
- if known i: sommetdefiniB:=true; rep_tri_BB:=i fi
+ if known i: sommetdefiniB:=true; rep_tri_BB:=i else: pair i fi
else:
- if known i: sommetdefiniC:=true; rep_tri_CC:=i fi
+ if known i: sommetdefiniC:=true; rep_tri_CC:=i else: pair i fi
fi;
endfor
count_tmp:=0;
@@ -3259,6 +3551,9 @@ vardef defTriangle(text q)=
elseif arrondi(10**rep_int_arr,rep_tri_la**2)=arrondi(10**rep_int_arr,(rep_tri_lc)**2+(rep_tri_lb)**2):
rep_ad_A:=true
fi;
+ rep_tri_lc:=arrondi(10**ArrondiCotes,rep_tri_lc);
+ rep_tri_lb:=arrondi(10**ArrondiCotes,rep_tri_lb);
+ rep_tri_la:=arrondi(10**ArrondiCotes,rep_tri_la);
enddef;
vardef TriangleLLA(text q)(text s)(text p)(text c)(text a) text r=
@@ -3268,6 +3563,13 @@ vardef TriangleLLA(text q)(text s)(text p)(text c)(text a) text r=
ProcessAffTriangles(q)(p)(c)(a) r
enddef;
+vardef triangleLLA(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+ defTriangleLLA(AA,BB,CC)(s);
+ rep_type_triangle:=0;
+ triangle(AA,BB,CC)
+enddef;
+
vardef TriangleLAA(text q)(text s)(text p)(text c)(text a) text r=
%% Macro utilisateur, definit le triangle et appelle la macro de tracé
defTriangleLAA(q)(s);
@@ -3275,6 +3577,13 @@ vardef TriangleLAA(text q)(text s)(text p)(text c)(text a) text r=
ProcessAffTriangles(q)(p)(c)(a) r
enddef;
+vardef triangleLAA(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+ defTriangleLAA(AA,BB,CC)(s);
+ rep_type_triangle:=0;
+ triangle(AA,BB,CC)
+enddef;
+
vardef TriangleLLL(text q)(text s)(text p)(text c)(text a) text r=
%% Macro utilisateur, definit le triangle et appelle la macro de tracé
defTriangleLLL(q)(s);
@@ -3282,6 +3591,14 @@ vardef TriangleLLL(text q)(text s)(text p)(text c)(text a) text r=
ProcessAffTriangles(q)(p)(c)(a) r
enddef;
+vardef triangleLLL(suffix AA,BB,CC)(text s)=
+%% Macro utilisateur, definit le triangle et renvoie la ligne
+ defTriangleLLL(AA,BB,CC)(s);
+ rep_type_triangle:=0;
+ triangle(AA,BB,CC)
+enddef;
+
+
vardef Triangle(text q)(text p)(text c)(text a) text r=
defTriangle(q);
rep_type_triangle:=3;
@@ -3296,6 +3613,9 @@ vardef ProcessAffTriangles(text q)(text p)(text c)(text a) text r=
string chAA,chBB,chCC,cha,chb,chc,changA,changB,changC,ch;
chAA=chBB=chCC=cha=chb=chc=changA=changB=changC="";
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:
@@ -3311,29 +3631,31 @@ vardef ProcessAffTriangles(text q)(text p)(text c)(text a) text r=
count_tmp:=0;
for i=p:
count_tmp:=count_tmp+1;
- if count_tmp=1: chAA:=
- elseif count_tmp=2: chBB:=
- else: chCC:=
+ if (count_tmp=1) and (i<>"~"): chAA:=
+ elseif (count_tmp=2) and (i<>"~"): chBB:=
+ elseif (count_tmp=3) and (i<>"~"): chCC:=
fi
i;
endfor
% Cotes données par les longueurs
- if UnitCotes<>"":
- cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
- chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
- chc:=AffichageCoteAvecUnite(rep_tri_lc,ArrondiCotes,UnitCotes);
- else:
- cha:=AffichageCoteSansUnite(rep_tri_la,ArrondiCotes);
- chb:=AffichageCoteSansUnite(rep_tri_lb,ArrondiCotes);
- chc:=AffichageCoteSansUnite(rep_tri_lc,ArrondiCotes);
- fi
+ if AffCotes:
+ if UnitCotes<>"":
+ cha:=AffichageCoteAvecUnite(rep_tri_la,ArrondiCotes,UnitCotes);
+ chb:=AffichageCoteAvecUnite(rep_tri_lb,ArrondiCotes,UnitCotes);
+ chc:=AffichageCoteAvecUnite(rep_tri_lc,ArrondiCotes,UnitCotes);
+ else:
+ cha:=AffichageCoteSansUnite(rep_tri_la,ArrondiCotes);
+ chb:=AffichageCoteSansUnite(rep_tri_lb,ArrondiCotes);
+ chc:=AffichageCoteSansUnite(rep_tri_lc,ArrondiCotes);
+ fi
+ fi
% On modifie les cotes si des valeurs sont passées dans c
count_tmp:=0;
for i=c:
count_tmp:=count_tmp+1;
- if count_tmp=1: cha:=
- elseif count_tmp=2: chb:=
- else: chc:=
+ if (count_tmp=1) and (i<>"~"): cha:=
+ elseif (count_tmp=2) and (i<>"~"): chb:=
+ elseif (count_tmp=3) and (i<>"~"): chc:=
fi
i;
endfor
@@ -3345,13 +3667,14 @@ vardef ProcessAffTriangles(text q)(text p)(text c)(text a) text r=
count_tmp:=0;
for i=a:
count_tmp:=count_tmp+1;
- if count_tmp=1: changA:=
- elseif count_tmp=2: changB:=
- else: changC:=
+ if (count_tmp=1) and (i<>"~"): changA:=
+ elseif (count_tmp=2) and (i<>"~"): changB:=
+ elseif (count_tmp=3) and (i<>"~"): changC:=
fi
i;
endfor
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) r
enddef;
@@ -3775,8 +4098,8 @@ vertfonce:=conversion_cmyn_rvb(Vertfonce);
boolean rep_tab;
rep_tab:=false;
-color coultableau[],coullignes;
-numeric eplignes;
+color table_coul[],grille_coul;
+numeric grille_ep;
@@ -3789,12 +4112,12 @@ def tableau(text t)=
vv[ind]:=i;
endfor
vv[4]:=vv[ind];
- coullignes:=black;
- eplignes:=0.7;
+ grille_coul:=black;
+ grille_ep:=0.7;
tab_init;
deftableau(vv[1],vv[2],vv[3],vv[4]);
- coultableau[1]:=0.45white;
- coultableau[2]:=0.9white;
+ table_coul[1]:=0.45white;
+ table_coul[2]:=0.9white;
enddef;
@@ -3806,19 +4129,23 @@ enddef;
vardef grille(expr dx,dy)=
- save coul;color coul;
- coul:=coullignes;
- ep := eplignes;
+ save coultmp,eptmp;
+ color coultmp; numeric eptmp;
+ coultmp:=q_coul;eptmp:=q_ep;
+ q_coul:=grille_coul;
+ q_ep := grille_ep;
save QuadXmin,QuadXmax,QuadYmin,QuadYmax;
numeric QuadXmin,QuadXmax,QuadYmin,QuadYmax;
QuadXmin:=0;QuadXmax:=rep_tab_n;QuadYmin:=0;QuadYmax:=rep_tab_p;
- quadrillage(dx,dy) shifted _cart(0.5,0.5)
+ quadrillage(dx,dy) shifted _cart(0.5,0.5) hide(q_coul:=coultmp;q_ep:=eptmp)
enddef;
vardef damier(expr dx,dy) text t=
- save coul;color coul;
- coul:=coullignes;
- ep := eplignes;
+ save coultmp,eptmp;
+ color coultmp; numeric eptmp;
+ coultmp:=q_coul;eptmp:=q_ep;
+ q_coul:=grille_coul;
+ q_ep := grille_ep;
save count_tmp,pn;
numeric count_tmp,pn;
save QuadXmin,QuadXmax,QuadYmin,QuadYmax;
@@ -3829,11 +4156,12 @@ vardef damier(expr dx,dy) text t=
for j=1 step dy until rep_tab_p:
for i=1 step dx until rep_tab_n:
count_tmp:=3-count_tmp;
- fill ((i,j) -- (i+dx,j) -- (i+dx,j+dy) -- (i,j+dy) -- cycle) shifted (-0.5,-0.5) withcolor coultableau[count_tmp];
+ fill ((i,j) -- (i+dx,j) -- (i+dx,j+dy) -- (i,j+dy) -- cycle) shifted (-0.5,-0.5) withcolor table_coul[count_tmp];
endfor
if pn=0: count_tmp:=3-count_tmp fi;
endfor
- draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t
+ draw quadrillage(dx,dy) shifted _cart(0.5,0.5) t;
+ q_coul:=coultmp;q_ep:=eptmp
)
enddef;
@@ -4064,7 +4392,7 @@ enddef;
vardef case(expr n,m) text t=
image(%
fill contour_case(n,m) t;
- draw (contour_case(n,m)) withpen pencircle scaled eplignes withcolor coullignes
+ draw (contour_case(n,m)) withpen pencircle scaled grille_ep withcolor grille_coul
)
enddef;