diff options
author | Karl Berry <karl@freefriends.org> | 2017-05-11 22:45:29 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-05-11 22:45:29 +0000 |
commit | 16105119b36b0cbd4ab457abfaf1b37cba8df4d6 (patch) | |
tree | ddb8585e56afdc3fba9c77d65577962e368563bc /Master | |
parent | b08a68c7f825771ab5765589131b681b98bb6547 (diff) |
repere (11may17)
git-svn-id: svn://tug.org/texlive/trunk@44298 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r-- | Master/texmf-dist/doc/metapost/repere/README.md | 4 | ||||
-rw-r--r-- | Master/texmf-dist/doc/metapost/repere/repere-doc.pdf | bin | 653733 -> 665712 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/metapost/repere/repere-doc.tex | 164 | ||||
-rw-r--r-- | Master/texmf-dist/metapost/repere/repere.mp | 311 |
4 files changed, 410 insertions, 69 deletions
diff --git a/Master/texmf-dist/doc/metapost/repere/README.md b/Master/texmf-dist/doc/metapost/repere/README.md index abb5bde1d9f..8eb44b1f8de 100644 --- a/Master/texmf-dist/doc/metapost/repere/README.md +++ b/Master/texmf-dist/doc/metapost/repere/README.md @@ -1,3 +1,5 @@ +Package repere - Version 17.05 - May 10, 2017 + This package provides MetaPost macros for drawing secondary school mathematics figures in a coordinate system : - axis, grids - points, vectors @@ -7,5 +9,5 @@ This package provides MetaPost macros for drawing secondary school mathema The doc is in french... -License LPPL +License LPPL 1.3 diff --git a/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf b/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf Binary files differindex 605edd4b4ff..66fa7f67149 100644 --- a/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf +++ b/Master/texmf-dist/doc/metapost/repere/repere-doc.pdf diff --git a/Master/texmf-dist/doc/metapost/repere/repere-doc.tex b/Master/texmf-dist/doc/metapost/repere/repere-doc.tex index b1a5ece4293..c4599fd5912 100644 --- a/Master/texmf-dist/doc/metapost/repere/repere-doc.tex +++ b/Master/texmf-dist/doc/metapost/repere/repere-doc.tex @@ -226,7 +226,7 @@ \title{Documentation de \texttt{repere.mp}} \date{\today} \author{Olivier \textsc{Péault}% -\footnote{E-mail : \href{mailto:o.peault@openmailbox.org}{\texttt{o.peault@openmailbox.org}}}} +\footnote{E-mail : \href{mailto:o.peault@posteo.net}{\texttt{o.peault@posteo.net}}}} \maketitle \setcounter{tocdepth}{2} @@ -608,8 +608,8 @@ marque_p:="croix";drawoptions(withcolor rouge); pointe(D,E,F); marque_p:="creux";drawoptions(withcolor orange); nomme.bot(pol(sqrt(2),-pi/4), - LaTeX("$\sqrt{2}e^{-i\frac{\pi}{4}}$")); -nomme.bot((-1.5,1),LaTeX("$(-1,5;1)$")); + "$\sqrt{2}e^{-i\frac{\pi}{4}}$"); +nomme.bot((-1.5,1),"$(-1,5;1)$"); marque_p:="plein";drawoptions(withcolor violet); for i=2 upto 4: C[i]=(-3+i/2,i);nomme.lft(C[i]); @@ -774,6 +774,46 @@ marquepointchemin(p,0,2,3,5); fin; \end{exemple} + +\subsection{Nommage automatique des courbes} +\begin{description} +\item[nomme(p,nom)] affiche \verb|nom| au niveau d'un point d'intersection de \verb|p| et du contour de la figure. Ce point est choisi en fonction de la chaine \verb|prefnomme| qui peut prendre les valeurs \verb|"right"| (valeur par défaut), \verb|"left"|, \verb|"top"| ou \verb|"bottom"|. +\end{description} + +\begin{exemple} +prefnomme:="left"; + +repere(-5,5,0.7cm,-5,5,0.7cm); +path d,C_f; +d=droite(-1,3); +vardef f(expr x)=0.5(x**2)-x -4 enddef; +C_f=courbefonc(f)(); +draw axes(1,1); +draw d epaisseur 1 couleur bleu; +draw C_f epaisseur 1 couleur bleu; +nomme(d,"$d_2$") couleur bleu; +nomme(C_f) couleur bleu; +draw cadre; +fin; +\end{exemple} + +\begin{exemple} +prefnomme:="bottom"; + +repere(-5,5,0.7cm,-5,5,0.7cm); +path d,C_f; +d=droite(-1,3); +vardef f(expr x)=0.5(x**2)-x -4 enddef; +C_f=courbefonc(f)(); +draw axes(1,1); +draw d epaisseur 1 couleur bleu; +draw C_f epaisseur 1 couleur bleu; +nomme(d,"$d_2$") couleur bleu; +nomme(C_f) couleur bleu; +draw cadre; +fin; +\end{exemple} + \subsection{Dérivée et tangentes} \begin{description} \item[der.p(x)] image de \verb+x+ par la dérivée de la fonction dont la courbe représentative est \verb+p+. @@ -799,9 +839,9 @@ q= courbefonc(der.p)(-1,4); draw axes(1,1); drawoptions(withpen pencircle scaled 1); draw p withcolor bleu; -nomme.rt(p,0.7,LaTeX("$y=f(x)$")); +nomme.rt(p,0.7,"$y=f(x)$"); draw q withcolor rouge; -nomme.lft(q,3.7,LaTeX("$y=f'(x)$")); +nomme.lft(q,3.7,"$y=f'(x)$"); drawoptions(withpen pencircle scaled 1 withcolor violet); draw tangente.double(p,0); @@ -995,10 +1035,9 @@ ptantecedents(A,2,Cf); draw axes(1,1); draw Cf withpen pencircle scaled 1 withcolor bleu; drawoptions(dashed evenly withcolor rouge); -draw projectionaxes((1.3,f(1.3)), - LaTeX("$x$"),LaTeX("$f(x)$")); -draw projectionx.urt(A1,LaTeX("$x_1$")); -draw projectionx.llft(A2,LaTeX("$x_2$"),-6); +draw projectionaxes((1.3,f(1.3)),"$x$","$f(x)$"); +draw projectionx.urt(A1,"$x_1$"); +draw projectionx.llft(A2,"$x_2$",-6); draw A1--A2; fin; \end{exemple} @@ -1024,7 +1063,7 @@ draw projectionaxes((4,f(4))); drawoptions(withcolor violet); draw intervallex.OF(1,4); draw intervalley.FF(0.75,3); -label(LaTeX("$f(]1;4])=[0,75;3]$"),(2.5,4)); +label("$f(]1;4])=[0,75;3]$",(2.5,4)); draw cadre; fin; \end{exemple} @@ -1082,7 +1121,7 @@ fin \begin{description} -\item[diagrammebarres((a1,h1),(a2,h2),...(an,hn))] Figure formée de \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. La largeur de ces barres est le nombre \verb|largbarres| qui vaut 20 par défaut. +\item[diagrammebarres((a1,h1),(a2,h2),...(an,hn))] Figure formée de \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. La largeur de ces barres est le nombre \verb|largbarres| qui vaut \verb|20bp| par défaut. \end{description} \begin{exemple}[0.6] @@ -1101,7 +1140,7 @@ fin \subsection{Probabilités} -Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on dépasse rapidement les capacités de \MP. Il est dans ce cas conseillé de compiler en utilisant la ligne de commande \verb|mpost -numbersystem="double" <fichier>.mp|. +Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on dépasse rapidement les capacités de \MP. Il est dans ce cas conseillé de compiler en utilisant la ligne de commande \verb|mpost -numbersystem="decimal" <fichier>.mp|. \begin{description} @@ -1109,6 +1148,9 @@ Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on \item[binom(n,k)] Entier égal à $\binom{n}{k}$. \item[binomiale(n,p,k)] $P(X=k)$ pour $X$ suivant la loi binomiale de paramètres $n$ et $p$. \item[diagrammebinomiale(n,p)] Diagramme en bâtons de la loi binomiale de paramètres $n$ et $p$. +\item[diagrammeuniforme(n,m)] Diagramme en bâtons de la loi uniforme discrète sur les entiers consécutifs de \verb|n| à \verb|m|. +\item[diagrammegeometrique(p)] Diagramme en bâtons de la loi géométrique de paramètre \verb|p|. +\item[diagrammepoisson(lambda)] Diagramme en bâtons de la loi de Poisson de moyenne \verb|lambda|. \end{description} @@ -1120,7 +1162,72 @@ draw axey(0.1,0.1); picture diag; diampointsbatons:=0; diag:=diagrammebinomiale(15,0.6); -draw diag withcolor blue epaisseur 4; +draw diag withcolor vertfonce epaisseur 4; +fin; +\end{exemple} + +\begin{codecache} +diampointsbatons:=5; +\end{codecache} + +\begin{exemple} +repere.larg(-2,10,8cm,-0.1,0.5,6cm); + setall(0,10,0,0.5); + draw axex(1,1); + draw axey(0.05,0.05); + draw diagrammegeometrique(0.4) + epaisseur 2 couleur bleu; +fin; +\end{exemple} + +\begin{exemple} +repere(-2,16,0.45cm,-0.1,0.25,15cm); +setall(0,16,0,0.25); +draw axex(1,1); +draw axey(0.1,0.1); +picture diag; +diampointsbatons:=0; +diag:=diagrammepoisson(6); +draw diag withcolor orange epaisseur 4; +fin; +\end{exemple} + +\begin{description} +\item[densitenormale(mu,sigma,a,b)] Courbe représentant la densité de la loi normale de moyenne \verb|mu| et d'écart type \verb|sigma| entre \verb|a| et \verb|b|. Si \verb|a| et \verb|b| sont omis, le tracé est fait sur l'intervalle définissant le repère. +\item[densiteexponentielle(lambda)] Courbe représentant la densité de la loi normale de paramètre \verb|lambda|. +\end{description} + +\begin{codecache} +prefnomme:="top"; +\end{codecache} + +\begin{exemple}[0.45] +repere(-4,32,0.23cm,-0.01,0.12,46cm); + draw axex(2,2); + draw axey(0.02,0.02); + path C,d; + C=densitenormale(16,4); + fill souscourbe(C,0,14) couleur gris; + draw souscourbe(C,0,14); + draw C epaisseur 2 couleur rouge; + d=droite(16); + draw d dashed evenly; + drawarrow (5,0.06)--(11,0.02); + label.top("$P(X\leq 14)$",(5,0.06)); + nomme(d,"$\mu$"); +fin; +\end{exemple} + +\begin{exemple} +repere.larg(-1,9,8cm,-0.05,0.6,6cm); + setall(0,9,0,0.6); + draw axex(1,1); + draw axey(0.1,0.1); + path C,D; + C=densiteexponentielle(0.5); + D=densiteexponentielle(0.3); + draw C epaisseur 2 couleur rouge; + draw D epaisseur 2 couleur violet; fin; \end{exemple} @@ -1236,7 +1343,7 @@ draw marqueangle(C,B,A,3); drawarrow marqueangle(A,C,B); fill marqueangle(B,A,C,1) withcolor vert; draw marqueangle(B,A,C,1); -nomme.rt(B,A,C,LaTeX("\ang{45}")); +nomme.rt(B,A,C,"\ang{45}"); fin; \end{exemple} @@ -1250,8 +1357,7 @@ repere(-1,10,0.5cm,-1,9,0.5cm); pair A,B,C,A',B',C',u; A=(3,1);B=(5,2);C=(1,5);u=(3,3); A'-A=B'-B=C'-C=u; -draw projectionaxes(A,LaTeX("$x_A$"), - LaTeX("$y_A$")) dashed evenly; +draw projectionaxes(A,"$x_A$","$y_A$") dashed evenly; draw axes(0,0); drawoptions(withcolor pourpre); draw triangle(A,B,C);draw triangle(A',B',C'); @@ -1289,9 +1395,25 @@ fin; \begin{exemple}[0.55] repere(-1,5,1cm,-1,4,1cm); draw axes(1,1); -label.ulft(LaTeX("Abscisses"),(5,0.1)); -label.lrt(LaTeX("Ordonnées"),(0.1,4)); -label(LaTeX("$f(x)=\pi^2\sqrt{x}$"),(2,2)); +label.ulft("Abscisses",(5,0.1)); +label.lrt("Ordonnées",(0.1,4)); +label("$f(x)=\pi^2\sqrt{x}$",(2,2)); +fin; +\end{exemple} + +\begin{description} +\item[legende.pos(fig,p)] Figure formée du chemin \verb|p| dessiné avec une flèche et de la figure ou de la chaine \verb|fig| située à la position \verb|pos| par rapport au premier point du chemin. +\end{description} + +\begin{exemple}[0.6] +repere(-0.5,5,1cm,-0.5,4,1cm); + draw axes(1,1); + pair A,B; + A=(2,1);B=(2,2); + nomme.rt(A) couleur rouge; + nomme.top(B) couleur rouge; + legende.top("Le point $A$",(1,3){down}..{down}A); + legende.bot("Le point $B$",(4,1)--B); fin; \end{exemple} @@ -1499,7 +1621,7 @@ Certains packages permettent d'écrire du code \MP{} directement dans un documen Il est aussi possible d'utiliser Lua\LaTeX{} avex le package \verb|luamplib|. Il faut alors charger les packages \verb|siunitx| et \verb|esvect| utilisés par \verb|repere|. \begin{center} -\begin{minipage}[t]{0.45\linewidth} +\begin{minipage}[t]{0.5\linewidth} {\centering \textbf{Utilisation de Lua\LaTeX}\par} @@ -1511,6 +1633,7 @@ Il est aussi possible d'utiliser Lua\LaTeX{} avex le package \verb|luamplib|. Il \usepackage{siunitx} \usepackage{esvect} \usepackage{luamplib} +\mplibnumbersystem{double} % Si nécessaire \begin{document} \everymplib{input repere;} \begin{mplibcode} @@ -1529,7 +1652,6 @@ fin; \begin{exemple} repere(-0.5,5,1cm,-0.5,5,1cm); -coulpoint:=blue;coullabel:=blue; pair A,B,C,D; A=(0.5,0.5);B=(4,1);C=(3,4); typetrace:="mainlevee"; 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; |