diff options
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r-- | Master/texmf-dist/metapost/repere/repere.mp | 748 |
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; |