diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex | 1412 |
1 files changed, 500 insertions, 912 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex b/macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex index d7878556d8..aed889bfcb 100644 --- a/macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex +++ b/macros/latex/contrib/profcollege/latex/PfCRepresenterFraction.tex @@ -1,968 +1,556 @@ %%% % Fractions %%% -\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1} - -\def\MPFractionTriangle#1#2#3#4#5{% - % #1 longueur du c\^ot\'e - % #2 partage sur le c\^ot\'e - % #3 num - % #4 d\'eno (attention : = #2^2) - % #5 couleur - \ifluatex - \mplibforcehmode - \begin{mplibcode} - nbtriangle=0; - - vardef Ligne(expr longueur)= - for k=0 upto 2*(longueur-1): - nbtriangle:=nbtriangle+1; - if (k mod 2)=0: - M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - else: - M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - fi; - endfor; - enddef; - - pair A,B,C; - A=u*(0.5,0.5); - B-A=(#1,0); - C=rotation(B,A,60); - - nbparts:=#2; - - path M[]; - - path Tria,Trir; - Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); - Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); - - for k=nbparts downto 1: - Ligne(k); - endfor; - - m:=#3 div #4; - - drawoptions(shifted(m*(#1+1cm,0))); - for l=1 upto (#3 mod #4): - fill M[l] withcolor #5; - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - endfor; - - for l=0 upto (m-1): - drawoptions(shifted(l*(#1+1cm,0))); - remplis polygone(A,B,C) withcolor #5; - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - endfor; - \end{mplibcode} - \else - \begin{mpost} - nbtriangle=0; - - vardef Ligne(expr longueur)= - for k=0 upto 2*(longueur-1): - nbtriangle:=nbtriangle+1; - if (k mod 2)=0: - M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - else: - M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - fi; - endfor; - enddef; - - pair A,B,C; - A=u*(0.5,0.5); - B-A=(#1,0); - C=rotation(B,A,60); - - nbparts:=#2; - - path M[]; - - path Tria,Trir; - Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); - Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); - - for k=nbparts downto 1: - Ligne(k); - endfor; - - m:=#3 div #4; - - drawoptions(shifted(m*(#1+1cm,0))); - for l=1 upto (#3 mod #4): - fill M[l] withcolor #5; - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - endfor; - - for l=0 upto (m-1): - drawoptions(shifted(l*(#1+1cm,0))); - remplis polygone(A,B,C) withcolor #5; - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - endfor; - \end{mpost} - \fi - } - - \def\MPFractionTriangleH#1#2#3#4#5#6{ - % #1 longueur du c\^ot\'e - % #2 partage sur le c\^ot\'e - % #3 num - % #4 d\'eno (attention : = #2^2) - % #5 couleur - % #6 \'epaisseur - \ifluatex - \mplibforcehmode - \begin{mplibcode} - nbtriangle=0; - - vardef Ligne(expr longueur)= - for k=0 upto 2*(longueur-1): - nbtriangle:=nbtriangle+1; - if (k mod 2)=0: - M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - else: - M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - fi; - endfor; - enddef; - - pair A,B,C; - A=u*(0.5,0.5); - B-A=(#1,0); - C=rotation(B,A,60); - - nbparts:=#2; - - path M[]; - - path Tria,Trir; - Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); - Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); - - for k=nbparts downto 1: - Ligne(k); - endfor; - - m:=#3 div #4; - - for l=1 upto (#3 mod #4): - drawoptions(withpen pencircle scaled #6); - trace hachurage(M[l] shifted(m*(#1+1cm,0)),90,0.2,0) withcolor #5;%M[l] withcolor #5; - for k=1 upto nbparts: - drawoptions(withpen pencircle scaled #6); - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(#1+1cm,0)); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(#1+1cm,0)); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(#1+1cm,0)); - endfor; - endfor; - - for l=0 upto (m-1): - drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6); - trace hachurage(polygone(A,B,C),90,0.2,0) withcolor #5;%polygone(A,B,C) withcolor #5; - drawoptions(shifted(l*(#1+1cm,0)) withpen pencircle scaled #6); - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - endfor; - \end{mplibcode} - \else - \begin{mpost} - nbtriangle=0; - - vardef Ligne(expr longueur)= - for k=0 upto 2*(longueur-1): - nbtriangle:=nbtriangle+1; - if (k mod 2)=0: - M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - else: - M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); - fi; - endfor; - enddef; - - pair A,B,C; - A=u*(0.5,0.5); - B-A=(#1,0); - C=rotation(B,A,60); - - nbparts:=#2; - - path M[]; - - path Tria,Trir; - Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); - Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); - - for k=nbparts downto 1: - Ligne(k); - endfor; - - diversite=floor(uniformdeviate(#2**2-#3-1)); - - for k=(1+diversite) upto (#3+diversite): - drawoptions(withpen pencircle scaled #6); - trace hachurage(M[k],90,0.2,0) withcolor #5; - endfor; - drawoptions(withpen pencircle scaled #6); - - for k=1 upto nbparts: - trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]); - trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]); - trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]); - endfor; - \end{mpost} - \fi - } - -\def\MPFractionRegulier#1#2#3#4#5{% - % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur - \ifluatex - \mplibforcehmode - \begin{mplibcode} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image( - remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5; - clip currentpicture to cd; - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5; - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; - \end{mplibcode} - \else - \begin{mpost} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image( - remplis O--arccercle(B[0],B[#3 mod #4],O)--cycle withcolor #5; - clip currentpicture to cd; - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cd shifted(l*(#1*2+0.5cm,0)) withcolor #5; - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; - \end{mpost} - \fi +\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Eprouvette=false,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1} + +\def\MPFractionEprouvetteCode{% + Hauteur=\useKV[ClesFraction]{Longueur}; + color ColEprou; + ColEprou=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + vardef eprouvette(expr deno,nume)= + picture PfCEprou,PfCEprouGrad; + path Cc; + Cc=cercles((0,0),1u) yscaled 0.2; + PfCEprouGrad=image( + trace Cc shifted((0,Hauteur)); + trace subpath(0,length Cc/2) of Cc dashed evenly; + trace subpath(length Cc/2,length Cc) of Cc; + trace segment(point(0) of Cc,point(0) of Cc shifted((0,Hauteur))); + trace segment(point(length Cc/2) of Cc,point(length Cc/2) of (Cc shifted((0,Hauteur)))); + for k=1 upto (deno-1): + trace (subpath(length Cc/2,length Cc*0.7) of Cc) shifted ((k/deno)*(0,Hauteur)); + endfor; + ); + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + PfCEprou=image(% + path Volume,VolumeComplet; + Volume=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(point(length Cc/2) of Cc shifted(((nume mod deno)/deno)*(0,Hauteur)))--(subpath(length Cc/2,length Cc) of Cc)--cycle; + VolumeComplet=(point(0) of Cc)--(subpath(0,length Cc/2) of Cc shifted((0,Hauteur)))--(point(length Cc/2) of Cc)--(subpath(length Cc/2,length Cc) of Cc)--cycle; + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(VolumeComplet shifted(l*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (VolumeComplet shifted(l*(3u,0))) withcolor ColEprou; + fi; + fi; + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(Volume shifted(m*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (Volume shifted(m*(3u,0))) withcolor ColEprou; + fi; + trace (Cc shifted(((nume mod deno)/deno)*(0,Hauteur))) shifted(m*(3u,0)); + fi; + else: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(VolumeComplet shifted(m*(3u,0)),60,0.2,0) withcolor ColEprou; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (VolumeComplet shifted(m*(3u,0))) withcolor ColEprou; + fi; + fi; + fi; + for k=0 upto m: + trace PfCEprouGrad shifted((3u*k,0)); + endfor; + ); + PfCEprou + enddef; } - -\def\MPFractionRegulierH#1#2#3#4#5#6{% - % #1 rayon, #2 nb c\^ot\'es, #3 num, #4 deno, #5 couleur, #6 épaisseur + +\def\MPFractionEprouvette#1#2{% + % #1 num + % #2 d\'eno \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image(% - drawoptions(withpen pencircle scaled #6); - trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5; - clip currentpicture to cd; - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled #6); - trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled #6); - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - drawoptions(withpen pencircle scaled #6); - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - drawoptions(withpen pencircle scaled #6); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; + \MPFractionEprouvetteCode + trace eprouvette(#2,#1); \end{mplibcode} \else -\begin{mpost} - pair O,A[],B[]; - O=u*(0,0); - path cc,cd; - cc=cercles(O,#1); - for k=0 upto #2: - A[k]=pointarc(cc,k*(360/#2)); - endfor; - cd=polygone(A0 for k=1 upto #2-1:,A[k] endfor); - for k=0 upto #4-1: - B[k]=point(k*(#2/#4)) of cd; - endfor; - picture fondcolore; - fondcolore=image(% - drawoptions(withpen pencircle scaled #6); - trace hachurage(O--arccercle(B[0],B[#3 mod #4],O)--cycle,1.5*360/#2,0.25,0) withcolor #5; - clip currentpicture to cd; - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw segment(O,B[k]) cutafter cd; - endfor; - trace cd; - ); - currentpicture:=nullpicture; - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled #6); - trace hachurage(cd shifted(l*(#1*2+0.5cm,0)),1.5*360/#2,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled #6); - trace cd shifted(l*(#1*2+0.5cm,0)); - if #4>1: - for k=0 upto #4-1: - drawoptions(withpen pencircle scaled #6); - draw (segment(O,B[k]) cutafter cd) shifted(l*(#1*2+0.5cm,0)); - endfor; - fi; - endfor; - fi; - draw fondcolore shifted(m*(#1*2+0.5cm,0)); - drawoptions(withpen pencircle scaled #6); - draw cd shifted(m*(#1*2+0.5cm,0)); - if #4>1: - drawoptions(withpen pencircle scaled #6); - for k=0 upto #4-1: - draw (segment(O,B[k]) cutafter cd) shifted(m*(#1*2+0.5cm,0)); - endfor; - fi; + \begin{mpost}[mpsettings={\MPFractionEprouvetteCode}] + trace eprouvette(#2,#1); \end{mpost} \fi } -\def\MPFractionRectangle#1#2#3#4#5#6{% - % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple +\def\MPFractionRegulierCode{% + Rayon=\useKV[ClesFraction]{Rayon}; + Cotes=\useKV[ClesFraction]{Cotes}; + color ColPolyReg; + ColPolyReg=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + pair O,A[],B[]; + O=u*(0,0); + path cc,cd; + cc=cercles(O,Rayon); + for k=0 upto Cotes: + A[k]=pointarc(cc,k*(360/Cotes)); + endfor; + cd=polygone(A0 for k=1 upto Cotes-1:,A[k] endfor); + vardef FractionPolyReg(expr nume,deno)= + for k=0 upto deno-1: + B[k]=point(k*(Cotes/deno)) of cd; + endfor; + picture fondcolore,FractionPoly; + fondcolore=image( + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(O--arccercle(B[0],B[nume mod deno],O)--cycle,1.5*360/Cotes,0.25,0) withcolor ColPolyReg; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis O--arccercle(B[0],B[nume mod deno],O)--cycle withcolor ColPolyReg; + fi; + clip currentpicture to cd; + for k=0 upto deno-1: + draw segment(O,B[k]) cutafter cd; + endfor; + trace cd; + ); + currentpicture:=nullpicture; + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + FractionPoly=image( + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(cd shifted(l*(Rayon*2+0.5cm,0)),1.5*360/Cotes,0.25,0) withcolor ColPolyReg; + drawoptions(withpen pencircle scaled Epaisseur); + else: + fill cd shifted(l*(Rayon*2+0.5cm,0)) withcolor ColPolyReg; + fi; + fi; + trace cd shifted(l*(Rayon*2+0.5cm,0)); + if deno>1: + for k=0 upto deno-1: + draw (segment(O,B[k]) cutafter cd) shifted(l*(Rayon*2+0.5cm,0)); + endfor; + fi; + endfor; + fi; + if Reponse: + draw fondcolore shifted(m*(Rayon*2+0.5cm,0)); + fi; + draw cd shifted(m*(Rayon*2+0.5cm,0)); + if deno>1: + for k=0 upto deno-1: + draw (segment(O,B[k]) cutafter cd) shifted(m*(Rayon*2+0.5cm,0)); + endfor; + fi; + ); + FractionPoly + enddef; +}% + +\def\MPFractionRegulier#1#2{% + % #1 num, #2 deno \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5; - remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5; - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5; - fi; - trace FondRectangle shifted(m*(#1+1cm,0)); + \MPFractionRegulierCode + trace FractionPolyReg(#1,#2); \end{mplibcode} \else -\begin{mpost} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - remplis polygone(A,M[#3 mod #4],N[#3 mod #4],D) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor #5; - remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - remplis (polygone(A,B,C,D) shifted(l*(#1+1cm,0))) withcolor #5; - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - remplis (polygone(A,B,C,D) shifted(m*(#1+1cm,0))) withcolor #5; - fi; - trace FondRectangle shifted(m*(#1+1cm,0)); + \begin{mpost}[mpsettings={\MPFractionRegulierCode}] + trace FractionPolyReg(#1,#2); \end{mpost} \fi -} - -\def\MPFractionRectangleH#1#2#3#4#5#6#7{% - % #1 longueur, #2 largeur, #3 num, #4 deno, #5 couleur, #6 multiple +}% + +\def\MPFractionTriangleCode{% + Longueur:=\useKV[ClesFraction]{Longueur}; + nbparts:=\useKV[ClesFraction]{Parts}; + color ColTriangle; + ColTriangle=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + nbtriangle=0; + % + vardef Ligne(expr longueur)= + for k=0 upto 2*(longueur-1): + nbtriangle:=nbtriangle+1; + if (k mod 2)=0: + M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); + else: + M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A))) shifted((nbparts-longueur)*(1/nbparts)*(C-A)); + fi; + endfor; + enddef; + % + pair A,B,C; + A=u*(0.5,0.5); + B-A=(Longueur,0); + C=rotation(B,A,60); + % + path Tria,Trir,M[]; + Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]); + Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]); + % + for k=nbparts downto 1: + Ligne(k); + endfor; + % + vardef FractionTriangle(expr nume,deno)= + m:=nume div deno; + picture RetourFraction; + RetourFraction=image( + for l=1 upto (nume mod deno): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(M[l] shifted(m*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + fill (M[l] shifted(m*(Longueur+1cm,0))) withcolor ColTriangle; + fi; + fi; + for k=1 upto nbparts: + trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(m*(Longueur+1cm,0)); + trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(m*(Longueur+1cm,0)); + trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(m*(Longueur+1cm,0)); + endfor; + endfor; + % + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,C) shifted(l*(Longueur+1cm,0)),90,0.2,0) withcolor ColTriangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,B,C) withcolor ColRectangle; + fi; + fi; + for k=1 upto nbparts: + trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]) shifted(l*(Longueur+1cm,0)); + trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]) shifted(l*(Longueur+1cm,0)); + trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]) shifted(l*(Longueur+1cm,0)); + endfor; + endfor; + ); + RetourFraction + enddef; +}% + +\def\MPFractionTriangle#1#2{% + % #1 num #2 d\'eno (attention : = partage^2) \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - picture FondRectangle; - FondRectangle=image(% - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - fi; - ); - picture FondRectangleColorie; - FondRectangleColorie=image(% - if #6=1: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,M[#3 mod #4],N[#3 mod #4],D),45,0.25,0) withcolor #5; - else: - DDiv=(#3 mod #4) div parts; - MMod=(#3 mod #4) mod parts; - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5; - fi; - ); - m=#3 div #4; - if (#3 mod #4)=0:m:=m-1; fi; - if m>0: - for l=0 upto m-1: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,C,D) shifted(l*(#1+1cm,0)),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - trace FondRectangle shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#3 mod #4)<>0: - drawoptions(withpen pencircle scaled#7); - trace FondRectangleColorie shifted(m*(#1+1cm,0)); - else: - drawoptions(withpen pencircle scaled#7); - trace hachurage(polygone(A,B,C,D) shifted(m*(#1+1cm,0)),45,0.25,0) withcolor #5; - fi; - drawoptions(withpen pencircle scaled#7); - trace FondRectangle shifted(m*(#1+1cm,0)); + \MPFractionTriangleCode + draw FractionTriangle(#1,#2); \end{mplibcode} \else -\begin{mpost} - pair A,B,C,D,M[],N[],R[],S[]; - A=(1,1); - B-A=(#1,0); - C-B=(0,#2); - D-C=A-B; - numeric parts; - parts=(#4 div #6); - for k=0 upto parts: - M[k]=(k/parts)[A,B]; - N[k]=(k/parts)[D,C]; - endfor; - if #6>1: - for k=0 upto #6: - R[k]=(k/#6)[A,D]; - S[k]=(k/#6)[B,C]; - endfor; - fi; - if #6=1: - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(A,M[#3],N[#3],D),45,0.25,0) withcolor #5; - else: - DDiv=#3 div parts; - MMod=#3 mod parts; - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor #5; - drawoptions(withpen pencircle scaled#7); - draw hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor #5; - fi; - drawoptions(withpen pencircle scaled#7); - draw polygone(A,B,C,D); - for k=1 upto (parts-1): - draw segment(M[k],N[k]); - endfor; - if #6>1: - for k=1 upto (#6-1): - draw segment(R[k],S[k]); - endfor; - drawoptions(); - fi; + \begin{mpost}[mpsettings={\MPFractionTriangleCode}] + draw FractionTriangle(#1,#2); \end{mpost} \fi -} - -\def\MPFractionDisque#1#2#3#4{% - \ifluatex - \mplibforcehmode +}% + +\def\MPFractionRectangleCode{% + Longueur=\useKV[ClesFraction]{Longueur}; + Largeur=\useKV[ClesFraction]{Largeur}; + color ColRectangle; + ColRectangle=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + Multiple=\useKV[ClesFraction]{Multiple}; + % + pair A,B,C,D,M[],N[],R[],S[]; + A=(1,1); + B-A=(Longueur,0); + C-B=(0,Largeur); + D-C=A-B; + vardef FractionRectangle(expr nume,deno)= + m=nume div deno; + if (nume mod deno)=0:m:=m-1; fi; + numeric parts; + parts=(deno div Multiple); + for k=0 upto parts: + M[k]=(k/parts)[A,B]; + N[k]=(k/parts)[D,C]; + endfor; + if Multiple>1: + for k=0 upto Multiple: + R[k]=(k/Multiple)[A,D]; + S[k]=(k/Multiple)[B,C]; + endfor; + fi; + picture FondRectangle; + FondRectangle=image(% + draw polygone(A,B,C,D); + for k=1 upto (parts-1): + draw segment(M[k],N[k]); + endfor; + if Multiple>1: + for k=1 upto (Multiple-1): + draw segment(R[k],S[k]); + endfor; + fi; + ); + picture FondRectangleColorie; + FondRectangleColorie=image(% + if Multiple=1: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,M[nume mod deno],N[nume mod deno],D),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,M[nume mod deno],N[nume mod deno],D) withcolor ColRectangle; + fi; + else: + DDiv=(nume mod deno) div parts; + MMod=(nume mod deno) mod parts; + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,S[DDiv],R[DDiv]),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis polygone(A,B,S[DDiv],R[DDiv]) withcolor ColRectangle; + remplis polygone(R[DDiv],(xpart(M[MMod]),ypart(R[DDiv])),(xpart(M[MMod]),ypart(R[DDiv+1])),R[DDiv+1]) withcolor ColRectangle; + fi; + fi; + ); + picture RetourRectangle; + RetourRectangle=image( + if m>0: + for l=0 upto m-1: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + trace hachurage(polygone(A,B,C,D) shifted(l*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle; + drawoptions(withpen pencircle scaled Epaisseur); + else: + remplis (polygone(A,B,C,D) shifted(l*(Longueur+1cm,0))) withcolor ColRectangle; + fi; + fi; + trace FondRectangle shifted(l*(Longueur+1cm,0)); + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + trace FondRectangleColorie shifted(m*(Longueur+1cm,0)); + fi; + else: + if Reponse: + if Hachures: + trace hachurage(polygone(A,B,C,D) shifted(m*(Longueur+1cm,0)),45,0.25,0) withcolor ColRectangle; + else: + remplis (polygone(A,B,C,D) shifted(m*(Longueur+1cm,0))) withcolor ColRectangle; + fi; + fi; + fi; + trace FondRectangle shifted(m*(Longueur+1cm,0)); + ); + RetourRectangle + enddef; +}% + +\def\MPFractionRectangle#1#2{% + % #1 num, #2 deno + \ifluatex% + \mplibforcehmode% \begin{mplibcode} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=(#2 div #3); - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cc shifted(l*(2*#1+1cm,0)) withcolor #4; - endfor; - fi; - fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4; - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \MPFractionRectangleCode + trace FractionRectangle(#1,#2); \end{mplibcode} - \else - \begin{mpost} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - fill cc shifted(l*(2*#1+1cm,0)) withcolor #4; - endfor; - fi; - fill ((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted (m*(2*#1+1cm,0))) withcolor #4; - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \else% + \begin{mpost}[mpsettings={\MPFractionRectangleCode}] + trace FractionRectangle(#1,#2); \end{mpost} - \fi -} - -\def\MPFractionDisqueH#1#2#3#4#5{% + \fi% +}% + +\def\MPFractionDisqueCode{% + Rayon=\useKV[ClesFraction]{Rayon}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + color ColDisque; + ColDisque=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Hachures=\useKV[ClesFraction]{Hachures}; + Reponse:=\useKV[ClesFraction]{Reponse}; + % + pair A,B[]; + A=(0,0); + path cc; + cc=cercles(A,Rayon); + vardef FractionDisque(expr nume,deno)= + for k=0 upto deno: + B[k]=pointarc(cc,(360/deno)*k); + endfor; + m=(nume div deno); + if (nume mod deno)=0:m:=m-1; fi; + picture RetourFraction; + RetourFraction=image(% + if Reponse: + if m>0: + for l=0 upto (m-1): + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(cc shifted(l*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque; + else: + fill cc shifted(l*(2*Rayon+1cm,0)) withcolor ColDisque; + fi; + endfor; + fi; + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted(m*(2*Rayon+1cm,0)),1.5*360/deno,0.25,0) withcolor ColDisque; + else: + fill ((A--B0--arccercle(B[0],B[nume mod deno],A)--cycle) shifted (m*(2*Rayon+1cm,0))) withcolor ColDisque; + fi; + fi; + for l=0 upto m: + draw cc shifted(l*(2*Rayon+1cm,0)); + for k=0 upto (deno-1): + draw segment(A,B[k]) shifted(l*(2*Rayon+1cm,0)); + endfor; + endfor; + ); + RetourFraction + enddef; +}% + +\NewDocumentCommand\MPFractionDisque{mm}{% \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - endfor; - fi; - drawoptions(withpen pencircle scaled#5); - draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \MPFractionDisqueCode + trace FractionDisque(#1,#2); \end{mplibcode} \else - \begin{mpost} - pair A,B[]; - A=(0,0); - path cc; - cc=cercles(A,#1); - for k=0 upto #3: - B[k]=pointarc(cc,(360/#3)*k); - endfor; - m=#2 div #3; - if (#2 mod #3)=0:m:=m-1; fi; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(cc shifted(l*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - endfor; - fi; - drawoptions(withpen pencircle scaled#5); - draw hachurage((A--B0--arccercle(B[0],B[#2 mod #3],A)--cycle) shifted(m*(2*#1+1cm,0)),1.5*360/#3,0.25,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - for l=0 upto m: - draw cc shifted(l*(2*#1+1cm,0)); - for k=0 upto (#3-1): - draw segment(A,B[k]) shifted(l*(2*#1+1cm,0)); - endfor; - endfor; + \begin{mpost}[mpsettings={\MPFractionDisqueCode}] + trace FractionDisque(#1,#2); \end{mpost} \fi } -\def\MPFractionSegment#1#2#3#4{ - \ifluatex - \mplibforcehmode - \begin{mplibcode} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - endfor; - fi; - if (#2 mod #3)<>0: - draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; - \end{mplibcode} - \else - \begin{mpost} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - draw (segment(B[0],B[#3]) shifted(l*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - endfor; - fi; - if (#2 mod #3)<>0: - draw (segment(B[0],B[#2 mod #3]) shifted(m*(#1+1cm,0))) withpen pencircle scaled 2 withcolor #4; - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; - \end{mpost} - \fi +\def\MPFractionSegmentCode{% + Longueur=\useKV[ClesFraction]{Longueur}; + color ColSegment; + ColSegment=\useKV[ClesFraction]{Couleur}; + boolean Hachures,Reponse; + Reponse=\useKV[ClesFraction]{Reponse}; + Hachures=\useKV[ClesFraction]{Hachures}; + Epaisseur=\useKV[ClesFraction]{Epaisseur}; + % + pair A,C,B[]; + A=(0,0); + C-A=(Longueur,0); + % + vardef FractionSegment(expr nume,deno)= + for k=0 upto deno: + B[k]=(k/deno)[A,C]; + endfor; + m=nume div deno; + picture RetourFraction; + RetourFraction=image( + if m>0: + for l=0 upto (m-1): + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(polygone(B[0]+u*(0,-0.15),B[deno]+u*(0,-0.15),B[deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment; + drawoptions(); + else: + draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment; + fi; + fi; + draw (segment(B[0],B[deno]) shifted(l*(Longueur+1cm,0))); + endfor; + fi; + if (nume mod deno)<>0: + if Reponse: + if Hachures: + drawoptions(withpen pencircle scaled Epaisseur); + draw hachurage(polygone(B[0]+u*(0,-0.15),B[nume mod deno]+u*(0,-0.15),B[nume mod deno]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(Longueur+1cm,0)),120,0.2,0) withcolor ColSegment; + drawoptions(); + else: + draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0))) withpen pencircle scaled 2 withcolor ColSegment; + draw segment(A,C) shifted(m*(Longueur+1cm,0)); + fi; + fi; + draw (segment(B[0],B[nume mod deno]) shifted(m*(Longueur+1cm,0))); + draw segment(A,C) shifted(m*(Longueur+1cm,0)); + fi; + marque_p:="tiretv"; + for l=0 upto m-1: + for k=0 upto deno: + pointe(B[k] shifted(l*(Longueur+1cm,0))); + endfor; + endfor; + if (nume mod deno)<>0: + for k=0 upto deno: + pointe(B[k] shifted(m*(Longueur+1cm,0))); + endfor; + fi; + ); + RetourFraction + enddef; } -\def\MPFractionSegmentH#1#2#3#4#5{% +\NewDocumentCommand\MPFractionSegment{mm}{% \ifluatex - \mplibforcehmode + \mplibforcehmode \begin{mplibcode} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#2 mod #3)<>0: - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; + \MPFractionSegmentCode + trace FractionSegment(#1,#2); \end{mplibcode} \else - \begin{mpost} - pair A,C,B[]; - A=(0,0); - C-A=(#1,0); - for k=0 upto #3: - B[k]=(k/#3)[A,C]; - endfor; - m=#2 div #3; - if m>0: - for l=0 upto (m-1): - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#3]+u*(0,-0.15),B[#3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(l*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(l*(#1+1cm,0)); - endfor; - fi; - if (#2 mod #3)<>0: - drawoptions(withpen pencircle scaled#5); - draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2 mod #3]+u*(0,-0.15),B[#2 mod #3]+u*(0,0.15),B[0]+u*(0,0.15)) shifted(m*(#1+1cm,0)),120,0.2,0) withcolor #4; - drawoptions(withpen pencircle scaled#5); - draw segment(A,C) shifted(m*(#1+1cm,0)); - fi; - marque_p:="tiretv"; - for l=0 upto m-1: - for k=0 upto #3: - pointe(B[k] shifted(l*(#1+1cm,0))); - endfor; - endfor; - if (#2 mod #3)<>0: - for k=0 upto #3: - pointe(B[k] shifted(m*(#1+1cm,0))); - endfor; - fi; + \begin{mpost}[mpsettings={\MPFractionSegmentCode}] + trace FractionSegment(#1,#2); \end{mpost} \fi } -\newcommand\Fraction[2][]{% +\NewDocumentCommand\Fraction{o m}{% \useKVdefault[ClesFraction]% \setKV[ClesFraction]{#1}% \setsepchar[*]{/}% \readlist*\ListeFraction{#2}% - \ifboolKV[ClesFraction]{Triangle}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionTriangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionTriangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Eprouvette}{% + \MPFractionEprouvette{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Regulier}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Triangle}{% + \MPFractionTriangle{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Segment}{% - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionSegmentH{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% - }% + \ifboolKV[ClesFraction]{Regulier}{% + \MPFractionRegulier{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \ifboolKV[ClesFraction]{Rectangle}{%rectangle - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}% - }{% - \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}% - }% - }{%disque - \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}% - \ifboolKV[ClesFraction]{Hachures}{% - \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% + \ifboolKV[ClesFraction]{Segment}{% + \MPFractionSegment{\ListeFraction[1]}{\ListeFraction[2]}% + }{% + \ifboolKV[ClesFraction]{Rectangle}{% + \MPFractionRectangle{\ListeFraction[1]}{\ListeFraction[2]}% }{% - \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}% + \MPFractionDisque{\ListeFraction[1]}{\ListeFraction[2]}% }% }% }% |