summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-05-11 22:45:29 +0000
committerKarl Berry <karl@freefriends.org>2017-05-11 22:45:29 +0000
commit16105119b36b0cbd4ab457abfaf1b37cba8df4d6 (patch)
treeddb8585e56afdc3fba9c77d65577962e368563bc /Master/texmf-dist/metapost
parentb08a68c7f825771ab5765589131b681b98bb6547 (diff)
repere (11may17)
git-svn-id: svn://tug.org/texlive/trunk@44298 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r--Master/texmf-dist/metapost/repere/repere.mp311
1 files changed, 264 insertions, 47 deletions
diff --git a/Master/texmf-dist/metapost/repere/repere.mp b/Master/texmf-dist/metapost/repere/repere.mp
index 3027bdac026..a9094e3e10c 100644
--- a/Master/texmf-dist/metapost/repere/repere.mp
+++ b/Master/texmf-dist/metapost/repere/repere.mp
@@ -1,8 +1,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% repere.mp %%
%% Macros pour la construction de figures dans un repère %%
-%% o.peault@openmailbox.org %%
-%% Version 16.10 (Octobre 2016) %%
+%% o.peault@posteo.net %%
+%% Version 17.05 (Mai 2017) %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This work may be distributed and/or modified under the conditions of
@@ -102,6 +102,7 @@ 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;
for _i=t: _def[i]:=_i; i:=i+1; endfor;
Xmin:=_def1; Xmax:=_def2; Ymin:=_def4; Ymax:=_def5; theta:=_def7;
@@ -150,7 +151,8 @@ def init_traces =
vardef thelabel@#(expr s,z) = % Position s near z
save p; picture p;
if picture s: p=s
- else: p = s infont defaultfont scaled defaultscale
+% else: p = s infont defaultfont scaled defaultscale
+ else: p = LaTeX(s)
fi;
p shifted (_cart(z) + labeloffset*laboff@# -
(labxf@#*lrcorner p + labyf@#*ulcorner p
@@ -205,6 +207,12 @@ def _finarr text t =
filldraw arrowhead _apth t
enddef;
+def _findarr text t =
+ olddraw _apth t;
+ filldraw arrowhead _apth withpen currentpen t;
+ filldraw arrowhead reverse _apth withpen currentpen t
+enddef;
+
vardef arrowhead expr p = %redéfinition flèches
save q,e; path q; pair e;
e = point length p of p;
@@ -247,6 +255,8 @@ enddef;
def _defcadre=
cadre:=(Xmin,Ymin)--(Xmin,Ymax)--(Xmax,Ymax)--(Xmax,Ymin)--cycle;
+ XmiN:=Xmin-0.05(Xmax-Xmin);XmaX:=Xmax+0.05(Xmax-Xmin);
+ YmiN:=Ymin-0.05(Ymax-Ymin);YmaX:=Ymax+0.05(Ymax-Ymin);
_diag:=abs(llcorner cadre - urcorner cadre);
_diag_:=abs(llcorner _cart(cadre) - urcorner _cart(cadre));
_largcadre:=abs(llcorner cadre - lrcorner cadre);
@@ -881,8 +891,7 @@ vardef axesunit=
draw axes(0,0);
draw axexpart(1);
draw axeypart(1);
- label.llft(LaTeX("$0$"),_cart(0,0));
- % label.llft("0",_cart(0,0));
+ label.llft("$0$",_cart(0,0));
);
$
enddef;
@@ -965,7 +974,7 @@ vardef nommepoint@#(text t)=
if long_texte(t)=1:
dess:=image(draw MarquePointFig(t);
ch:=_chaine(t);
- label@#(LaTeX("$" & ch & "$"),t) withcolor coullabel)
+ label@#("$" & ch & "$",t) withcolor coullabel)
else:
dess:=image(%
for PP=t:
@@ -977,6 +986,7 @@ vardef nommepoint@#(text t)=
dess
enddef;
+
vardef nommecourbe@#(suffix p)(text t)=
save A,ch,dess;
pair A;
@@ -985,7 +995,7 @@ vardef nommecourbe@#(suffix p)(text t)=
if long_texte(t)=1:
dess:=image(ch:=_chaine(p);
A:=(t,fonccourbe.p(t));
- label@#(LaTeX("$" & ch & "$"),A) withcolor coullabelfonc)
+ label@#("$" & ch & "$",A) withcolor coullabelfonc)
else:
dess:=image(%
for _a=t:
@@ -999,6 +1009,9 @@ enddef;
+
+
+
vardef nommeobj@#(text t)=
save $;
picture $;
@@ -1006,6 +1019,7 @@ vardef nommeobj@#(text t)=
else:
for i=t:
if pair i: $:=nommepoint@#(t)
+ elseif str @#="": $:=nommeautoobj(t)
else: $:=nommecourbe@#(t)
fi;
exitif true;
@@ -1017,17 +1031,113 @@ enddef;
def nomme = draw nommeobj enddef;
+%
+% Notation automatique des chemins 02/17
+%
+string prefnomme;
+prefnomme:="right";
+
+% Permet de savoir si un point est mieux placé relativement à prefnomme
+tertiarydef A estmieuxplace B =
+ if prefnomme="right": xpart A > xpart B
+ elseif prefnomme="left": xpart A < xpart B
+ elseif prefnomme="top": ypart A > ypart B
+ elseif prefnomme="bottom": ypart A < ypart B
+ elseif hide(errmessage "string 'prefnomme' should be set to left, right, top or bottom")
+ fi
+enddef;
+
+% Cherche le "time" du meilleur point
+vardef pointnommetime(expr p)=
+ save Pt, nbint, P, T,pp;
+ pair Pt,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;
+ pp
+enddef;
+
+% Cherche la "meilleure" position du label du point pp de time tt du chemin courbe
+vardef position(expr pp,tt,courbe)=
+ save pos,tmpdir;
+ string pos;
+ numeric tmpdir;
+ tmpdir := angle(direction tt of courbe);
+ if arrondimil((Ymax-ypart pp)/(Ymax-Ymin))=0:
+ if tmpdir <0: pos:="llft"
+ else: pos:="lrt"
+ fi
+ elseif arrondimil((Ymin-ypart pp)/(Ymax-Ymin))=0:
+ if tmpdir <0: pos:="urt"
+ else: pos:="ulft"
+ fi
+ elseif arrondimil((Xmax-xpart pp)/(Xmax-Xmin))=0:
+ if tmpdir <0: pos:="llft"
+ else: pos:="ulft"
+ fi
+ elseif arrondimil((Xmin-xpart pp)/(Xmax-Xmin))=0:
+ if tmpdir <0: pos:="urt"
+ else: pos:="lrt"
+ fi
+ fi;
+ pos
+enddef;
+
+% Notation automatique des chemins
+
+% Avec label automatique
+vardef nommeautoobjsuf(suffix p)=
+ nommeautoobjtex(p,"$" & _chaine(p) & "$")
+enddef;
+
+% Avec label donné
+vardef nommeautoobjtex(expr p,leg)=
+ save ptA,pos,ttmp;
+ pair ptA;
+ numeric ttmp;
+ string pos;
+ ttmp:=pointnommetime(p);
+ ptA:= point ttmp of p;
+ pos:=position(ptA,ttmp,p);
+ if string leg:
+ scantokens("thelabel." & pos)(leg,ptA)
+ else:
+ scantokens("thelabel." & pos)(leg scaled defaultscale,ptA)
+ fi
+enddef;
+
+vardef nommeautoobj(text t)=
+ if long_texte(t)=1: nommeautoobjsuf(t)
+ else: nommeautoobjtex(t)
+ fi
+enddef;
+
+
+
vardef vecteur@#(expr A)(text t)=
save $,ch,m;
picture $;
pair m;
string ch;
$=image(%
- if long_texte(t)=1: drawarrow A--A+t;ch:=_chaine(t);label@#(LaTeX("$\vv{" & ijmath(ch) & "}$"),A+t/2)
+ if long_texte(t)=1: drawarrow A--A+t;ch:=_chaine(t);label@#("$\vv{" & ijmath(ch) & "}$",A+t/2)
else:
for u=t:
if pair u: drawarrow A--A+u; m:=A+u/2
- else: if string u: if u<>"": label@#(LaTeX("$\vv{" & u & "}$"),m) fi else: label@#(u,m) fi
+ else: if string u: if u<>"": label@#("$\vv{" & u & "}$",m) fi else: label@#(u,m) fi
fi;
endfor
fi);
@@ -1103,7 +1213,7 @@ vardef base(suffix a,b,c)=
$:=image(%
draw vecteur.bot(_O_,(1,0),ijmath(I)) withpen pencircle scaled 0.8 withcolor coulbase;
draw vecteur.lft(_O_,(0,1),ijmath(J)) withpen pencircle scaled 0.8 withcolor coulbase;
- nomme.llft(_O_,LaTeX("$" & O & "$")) withcolor coulbase
+ nomme.llft(_O_,"$" & O & "$") withcolor coulbase
);
$
enddef;
@@ -1115,9 +1225,9 @@ vardef basep(suffix a,b,c)=
picture $;
O:=_chaine(a); I:=_chaine(b); J:=_chaine(c);
$:=image(%
- nomme.llft(_O_,LaTeX("$" & O & "$")) withcolor coulbase;
- draw axexpart(1,LaTeX("$" & I & "$")) withcolor coulbase;
- draw axeypart(1,LaTeX("$" & J & "$")) withcolor coulbase;
+ nomme.llft(_O_,"$" & O & "$") withcolor coulbase;
+ draw axexpart(1,"$" & I & "$") withcolor coulbase;
+ draw axeypart(1,"$" & J & "$") withcolor coulbase;
);
$
enddef;
@@ -1269,7 +1379,22 @@ vardef intercourbes(suffix P)(expr p,q)= %renvoie les points d'intersections de
exitif xpart(pp intersectiontimes q)=-1;
P[i]:=point xpart(pp intersectiontimes q) of pp;
pp:=subpath(xpart(pp intersectiontimes q)+0.01,length pp) of pp;
- %0.01(?!) pour que le point trouvé ne soit pas dans le sous-chemin...
+ %0.01(?!) pour que le point trouvé ne soit pas dans le sous-chemin...
+ i:=i+1;
+ endfor;
+enddef;
+
+vardef intercourbestimes(suffix T)(expr p,q)= %renvoie le "time" de q des points d'intersections de p et q dans T[]
+ save i,pp;
+ numeric i;
+ path pp;
+ pp:=p;
+ i:=1;
+ forever:
+ exitif xpart(pp intersectiontimes q)=-1;
+ T[i]:=ypart(pp intersectiontimes q);
+ pp:=subpath(xpart(pp intersectiontimes q)+0.01,length pp) of pp;
+ %0.01(?!) pour que le point trouvé ne soit pas dans le sous-chemin...
i:=i+1;
endfor;
enddef;
@@ -1377,9 +1502,11 @@ vardef droiteeqred(expr a,b)=
save $;
path $;
if (-(Ymax-Ymin)/(Xmax-Xmin)<a) and ((Ymax-Ymin)/(Xmax-Xmin)>a):
- $:=(Xmin,a*Xmin+b)--(Xmax,a*Xmax+b);
+ $:=(XmiN,a*XmiN+b)--(XmaX,a*XmaX+b);
+ elseif a>0:
+ $:=(YmiN/a-b/a,YmiN)--(YmaX/a-b/a,YmaX);
else:
- $:=(Ymin/a-b/a,Ymin)--(Ymax/a-b/a,Ymax);
+ $:=(YmaX/a-b/a,YmaX)--(YmiN/a-b/a,YmiN);
fi;
$
enddef;
@@ -1548,9 +1675,9 @@ 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
- save $,deb,fin,nom,_qw_,un;
- picture $,lab;
- string nom;
+ 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;
@@ -1580,17 +1707,17 @@ vardef suiterecprojx@#(text t)= %projections et étiquettes sur axe x, utilis
deb:=deb+1;un:=_suiterecfonc_(un)
fi;
for i=deb upto fin:
- lab:=LaTeX("$\num{" & decimal(arrondi(10**_prec,un)) & "}$");
+ lab:="$\num{" & decimal(arrondi(10**_prec,un)) & "}$";
draw projectionx.@#((un,un),lab,-taillegrad);
un:=_suiterecfonc_(un);
endfor
else:
if deb=_suiterecdeb_:
- label.@#(LaTeX("$" & nom & "_{" & decimal(deb) & "}" & "$"),(un,yO));
+ label.@#("$" & nom & "_{" & decimal(deb) & "}" & "$",(un,yO));
deb:=deb+1;un:=_suiterecfonc_(un)
fi;
for i=deb upto fin:
- lab:=LaTeX("$" & nom & "_{" & decimal(i) & "}" & "$");
+ lab:="$" & nom & "_{" & decimal(i) & "}" & "$";
draw projectionx.@#((un,un),lab);
un:=_suiterecfonc_(un);
endfor
@@ -1599,9 +1726,9 @@ vardef suiterecprojx@#(text t)= %projections et étiquettes sur axe x, utilis
enddef;
vardef suiterecprojy@#(text t)= %projections et étiquettes sur axe y, utilise les valeurs de suiterec
- save $,deb,fin,nom,_qw_,un;
- picture $,lab;
- string nom;
+ 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;
@@ -1630,7 +1757,7 @@ vardef suiterecprojy@#(text t)= %projections et étiquettes sur axe y, utilis
deb:=deb+1;
fi;
for i=deb-1 upto fin-1:
- lab:=LaTeX("$\num{" & decimal(arrondi(10**_prec,un)) & "}$");
+ lab:="$\num{" & decimal(arrondi(10**_prec,un)) & "}$";
draw projectiony.@#((un,_suiterecfonc_(un)),lab,-taillegrad);
un:=_suiterecfonc_(un);
endfor
@@ -1639,7 +1766,7 @@ vardef suiterecprojy@#(text t)= %projections et étiquettes sur axe y, utilis
deb:=deb+1;
fi;
for i=deb-1 upto fin-1:
- lab:=LaTeX("$" & nom & "_{" & decimal(i+1) & "}" & "$");
+ lab:="$" & nom & "_{" & decimal(i+1) & "}" & "$";
draw projectiony.@#((un,_suiterecfonc_(un)),lab);
un:=_suiterecfonc_(un);
endfor
@@ -1726,26 +1853,27 @@ enddef;
vardef projboitemoustache@#(text t)=
save $,n,_lab_,_comp_,A,tmp;
pair A;
- picture $,_lab_[];
+ picture $;
+ string _lab_[];
numeric n_comp_,tmp;
n:=long_texte(t);
if n=0:
- _lab_[1]:=LaTeX("$X_{min}$");
- _lab_[2]:=LaTeX("$Q_1$");
- _lab_[3]:=LaTeX("$M_e$");
- _lab_[4]:=LaTeX("$Q_3$");
- _lab_[5]:=LaTeX("$X_{max}$");
+ _lab_[1]:="$X_{min}$";
+ _lab_[2]:="$Q_1$";
+ _lab_[3]:="$M_e$";
+ _lab_[4]:="$Q_3$";
+ _lab_[5]:="$X_{max}$";
elseif n=1:
if t=0: for i=1 upto 5: _lab_[i]:=nullpicture; endfor
else:
tmp:=floor(t);
for i=1 upto 5:
- _lab_[i]:=LaTeX("\num{" & decimal(arrondi(10**tmp,_valeursboitemoustache_[i])) & "}");
+ _lab_[i]:="\num{" & decimal(arrondi(10**tmp,_valeursboitemoustache_[i])) & "}";
endfor
fi
else: _comp_:=1; for i=t:
- if numeric i: _lab_[_comp_]:=LaTeX("\num{" & decimal(i) & "}")
- elseif string i: _lab_[_comp_]:=LaTeX(i)
+ if numeric i: _lab_[_comp_]:="\num{" & decimal(i) & "}"
+ elseif string i: _lab_[_comp_]:=i
else: _lab_[_comp_]:=i
fi;
_comp_:=_comp_+1;
@@ -1796,23 +1924,91 @@ def barrei(expr p)=
enddef;
vardef diagrammebarres(text t)=
- save $;
- path $;
- $:= for i=t: barrei(i)-- endfor cycle;
- $
+ save tmp;
+ path tmp;
+ tmp:= for i=t: barrei(i)-- endfor cycle;
+ tmp
enddef;
-
+%octobre 2016
+%diagramme en batons de la loi binomiale
vardef diagrammebinomiale(expr n,p)=
- save $,Abin;
- picture $;
- pair Abin[];
- $:=scantokens("diagrammebatons("&
+ save tmp;
+ picture tmp;
+ tmp:=scantokens("diagrammebatons("&
"(0," & decimal(binomiale(n,p,0)) & ")" &
- for i=0 upto n: ",(" & decimal(i) & "," & decimal(binomiale(n,p,i)) & ")" &
+ for i=1 upto n: ",(" & decimal(i) & "," & decimal(binomiale(n,p,i)) & ")" &
endfor
")");
- $
+ tmp
+enddef;
+
+%mai 2017
+%diagramme en batons de la loi uniforme discrète
+vardef diagrammeuniforme(expr n,m)=
+ save tmp;
+ picture tmp;
+ tmp:=scantokens("diagrammebatons("&
+ "(" & decimal(n) & "," & decimal(1/(m-n+1)) & ")" &
+ for i=n+1 upto m: ",(" & decimal(i) & "," & decimal(1/(m-n+1)) & ")" &
+ endfor
+ ")");
+ tmp
+enddef;
+
+%mai 2017
+%diagramme en batons de la loi géométrique
+vardef diagrammegeometrique(expr p)=
+ save tmp;
+ picture tmp;
+ tmp:=scantokens("diagrammebatons("&
+ "(1," & decimal(p) & ")" &
+ for i=2 upto Xmax: ",(" & decimal(i) & "," & decimal(((1-p)**(i-1))*p) & ")" &
+ endfor
+ ")");
+ tmp
+enddef;
+
+%mai 2017
+%diagramme en batons de la loi de Poisson
+vardef diagrammepoisson(expr lambda)=
+ save tmp;
+ picture tmp;
+ tmp:=scantokens("diagrammebatons("&
+ "(0," & decimal(poisson(lambda,0)) & ")" &
+ for i=1 upto Xmax: ",(" & decimal(i) & "," & decimal(poisson(lambda,i)) & ")" &
+ endfor
+ ")");
+ tmp
+enddef;
+
+
+% mai 2017
+% 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 tmpdens(expr x)=
+ (1/(sigma*sqrt(2*pi)))*exp(-0.5*(((x-mu)/sigma)**2))
+ enddef;
+ courbefonc(tmpdens)(a,b)
+enddef;
+
+
+% Mai 2017
+% courbe de la densité de la loi exponentielle
+vardef densiteexponentielle(expr lambda)=
+ vardef tmpdens(expr x)=
+ lambda*exp(-lambda*x)
+ enddef;
+ courbefonc(tmpdens)(0,Xmax)
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2150,6 +2346,18 @@ enddef;
% LaTeXsetup; textext(sc) scaled defaultscale
%enddef;
+
+% Mai 2017
+% Légende avec flèche
+vardef thelegende@#(expr lab,p) =
+ image(%
+ label@#(lab,point 0 of p);
+ drawarrow p)
+enddef;
+
+def legende = draw thelegende enddef;
+
+
%%%%%%%%%%%%%%%Figure intermédiaire%%%%%%%%%%%%%%%%%%%
def figureinter=
clip currentpicture to (cadre transformed _T);
@@ -2247,6 +2455,15 @@ vardef binomiale(expr n,p,k)=
$
enddef;
+% Mai 2017
+% P(X=k) pour X suivant la loi de Poisson de paramètre lambda
+vardef poisson(expr lambda,k)=
+ exp(-lambda)
+ for i=1 upto k:
+ *(lambda/i)
+ endfor
+enddef;
+
%%%%%%%%%%%%%%% COULEURS %%%%%%%%%%%%%%%%%%%
cmykcolor Rouge,Vert,Bleu,Marron,Lime,Orange,Rose,Pourpre,Violet,Cyan,Magenta,Jaune,Olive,Noir,Grisfonce,Gris,Grisclair,Blanc,Beige,Marine,Moutarde,Vertfonce;