diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex | 335 |
1 files changed, 335 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex b/macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex new file mode 100644 index 0000000000..ec142b6a3f --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCSommeAngles.tex @@ -0,0 +1,335 @@ +%%% +% Somme des angles +%%% +\setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Rectangle=false,Figure=false,FigureSeule=false,Angle=0,Perso=false,Echelle=1cm}% + +\def\MPFigureSommeAngle#1#2#3#4#5{% + % #1 Premier sommet + % #2 Deuxi\`eme sommet + % #3 Troisi\`eme sommet + % #4 1er angle + % #5 2eme angle + \ifluatex + %\mplibcodeinherit{enable} + \mplibforcehmode + \begin{mplibcode} + pair A,B,C,O,I;% + u:=\useKV[ClesSommeAngle]{Echelle}; + Angle:=\useKV[ClesSommeAngle]{Angle}; + boolean Rectangle,Isocele; + Rectangle=\useKV[ClesSommeAngle]{Rectangle};% + Isocele=\useKV[ClesSommeAngle]{Isocele}; + A=u*(1,1); + B-A=u*(4,0); + if Rectangle: + C=3/5[B,rotation(A,B,-90)]; + else: + C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); + fi; + O=CentreCercleC(A,B,C); + % On tourne pour \'eventuellement moins de lassitude :) + A:=rotation(A,O,Angle); + B:=rotation(B,O,Angle); + C:=rotation(C,O,Angle); + % On d\'efinit le centre du cercle inscrit + I=CentreCercleI(A,B,C); + % on dessine \`a main lev\'ee :) + path triangle; + triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; + % pour marquer les angles + path cc; + cc=fullcircle scaled 1u; + picture MAngle; + path cd; pair M[]; + MAngle=image(% + if Isocele:% + if Rectangle: + trace codeperp(A,B,C,5); + cd=A--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted A); + trace 9/10[A,M1]--11/10[A,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + else: + cd=B--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted B); + trace 9/10[B,M1]--11/10[B,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + fi; + fi; + if Rectangle: + trace codeperp(A,B,C,5); + else: + draw (cc shifted B); + fi; + draw (cc shifted A); + draw (cc shifted C); + ); + draw MAngle; + clip currentpicture to triangle; + draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; + draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; + draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; + % on labelise + label(btex #1 etex,1.2[O,A]); + label(btex #2 etex,1.2[O,B]); + label(btex #3 etex,1.2[O,C]); + % Codage + if Isocele: + marque_s:=marque_s/2; + if Rectangle: + draw Codelongueur(A,B,B,C,2); + else: + draw Codelongueur(A,B,A,C,2); + fi; + marque_s:=marque_s*2; + fi; + % Affichage des angles: + if Isocele: + if Rectangle: + label(btex ? etex,A+0.95u*unitvector(I-A)); + else: + if #4>#5:%Cas où b est vide donc on affiche la mesure commune + label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A)); + label(btex ? etex,B+0.95u*unitvector(I-B)); + else: + label(btex $\ang{#5}$ etex,B+0.95u*unitvector(I-B)); + label(btex ? etex,A+0.95u*unitvector(I-A)); + fi; + fi; + else: + if Rectangle: + if #4>#5: + label(btex $\ang{#4}$ etex,C+0.95u*unitvector(I-C)); + else: + label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); + fi; + else: + label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); + label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); + fi; + label(btex ? etex,A+0.95u*unitvector(I-A)); + fi; + \end{mplibcode} + %\mplibcodeinherit{disable} + \else + \begin{mpost}[mpsettings={u:=\useKV[ClesSommeAngle]{Echelle};boolean Rectangle,Isocele; + Rectangle=\useKV[ClesSommeAngle]{Rectangle};Isocele=\useKV[ClesSommeAngle]{Isocele};Angle:=\useKV[ClesSommeAngle]{Angle};}] + pair A,B,C,O,I;% + A=u*(1,1); + B-A=u*(4,0); + if Rectangle: + C=3/5[B,rotation(A,B,-90)]; + else: + C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]); + fi; + O=CentreCercleC(A,B,C); + % On tourne pour \'eventuellement moins de lassitude :) + A:=rotation(A,O,Angle); + B:=rotation(B,O,Angle); + C:=rotation(C,O,Angle); + % On d\'efinit le centre du cercle inscrit + I=CentreCercleI(A,B,C); + % on dessine \`a main lev\'ee :) + path triangle; + triangle=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}--B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}--C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}--cycle; + % pour marquer les angles + path cc; + cc=fullcircle scaled 1u; + picture MAngle; + path cd; pair M[]; + MAngle=image(% + if Isocele:% + if Rectangle: + trace codeperp(A,B,C,5); + cd=A--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted A); + trace 9/10[A,M1]--11/10[A,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + else: + cd=B--(A+B+C)/3; + M1=cd intersectionpoint (cc shifted B); + trace 9/10[B,M1]--11/10[B,M1]; + cd:=C--(A+B+C)/3; + M1:=cd intersectionpoint (cc shifted C); + trace 9/10[C,M1]--11/10[C,M1]; + fi; + fi; + if Rectangle: + trace codeperp(A,B,C,5); + else: + draw (cc shifted B); + fi; + draw (cc shifted A); + draw (cc shifted C); + ); + draw MAngle; + clip currentpicture to triangle; + draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)}; + draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)}; + draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)}; + % on labelise + label(btex #1 etex,1.2[O,A]); + label(btex #2 etex,1.2[O,B]); + label(btex #3 etex,1.2[O,C]); + % Codage + if Isocele: + marque_s:=marque_s/2; + if Rectangle: + draw Codelongueur(A,B,B,C,2); + else: + draw Codelongueur(A,B,A,C,2); + fi; + marque_s:=marque_s*2; + fi; + % Affichage des angles: + if Isocele: + if Rectangle: + label(btex ? etex,A+0.95u*unitvector(I-A)); + else: + if #4>#5:%Cas où b est vide donc on affiche la mesure commune + label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A)); + label(btex ? etex,B+0.95u*unitvector(I-B)); + else: + label(btex $\ang{#5}$ etex,B+0.95u*unitvector(I-B)); + label(btex ? etex,A+0.95u*unitvector(I-A)); + fi; + fi; + else: + if Rectangle: + if #4>#5: + label(btex $\ang{#4}$ etex,C+0.95u*unitvector(I-C)); + else: + label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); + fi; + else: + label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B)); + label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C)); + fi; + label(btex ? etex,A+0.95u*unitvector(I-A)); + fi; + \end{mpost} + \fi +} + +\xdef\RedactionSomme{} + +\newcommand\RedactionSom[4][]{% + % #1 : nom du triangle pA pB pC + % #2 : mesure de l'angle pApBpC + % #3 : mesure de l'angle pBpCpA + \useKVdefault[ClesSommeAngle]% + \setKV[ClesSommeAngle]{#1}% + % On r\'ecup\`ere les noms des sommets. + \StrMid{#2}{1}{1}[\NomA]% + \StrMid{#2}{2}{2}[\NomB]% + \StrMid{#2}{3}{3}[\NomC]% + \xdef\NomTriangle{\NomA\NomB\NomC}% + \xdef\NomSommetB{\NomB}% + \xdef\NomSommetA{\NomA}% + \xdef\NomSommetC{\NomC}% + % On r\'edige + \ifboolKV[ClesSommeAngle]{Perso}{\RedactionSomme}{Dans le triangle $\NomA\NomB\NomC$, \ifboolKV[ClesSommeAngle]{Rectangle}{ rectangle \ifboolKV[ClesSommeAngle]{Isocele}{isocèle }{}en $\NomB$, }{\ifboolKV[ClesSommeAngle]{Isocele}{ isoc\`ele en $\NomA$, }}% + on a :}% + \ifboolKV[ClesSommeAngle]{Rectangle}{% + \ifboolKV[ClesSommeAngle]{Isocele}{% + \ifx\bla#3\bla% + \begin{align*} + 2\times\widehat{\NomB\NomA\NomC}&=\ang{90}\\% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\frac{\ang{90}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{45}}% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{45}}{}% + \end{align*} + \fi + }{% + \ifx\bla#3\bla% + \begin{align*} + \widehat{\NomB\NomA\NomC}+\widehat{\NomB\NomC\NomA}&=\ang{90}\\% + \widehat{\NomB\NomA\NomC}+\ang{#4}&=\ang{90}\\% + \xdef\totalangle{\fpeval{90-#4}}\ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{90}-\ang{#4}\\}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomB\NomA\NomC}&=\ang{\totalangle}}{}% + \end{align*} + \fi + }% + }{% + \ifboolKV[ClesSommeAngle]{Isocele}{% + \ifx\bla#4\bla% + \begin{align*}% + \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + 2\times\ang{#3}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + \xdef\sommeangle{\fpeval{2*#3}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}% + \end{align*}% + \xdef\ResultatAngle{\totalangle}% + \else% + \begin{align*}% + \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + 2\times\widehat{\NomA\NomB\NomC}+\ang{#4}&=\ang{180}\\% + \xdef\totalangle{\fpeval{180-#4}}% + \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{180}-\ang{#4}\\}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}% + \ifboolKV[ClesSommeAngle]{Detail}{2\times\widehat{\NomA\NomB\NomC}&=\ang{\totalangle}\\}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\frac{\ang{\totalangle}}{2}\\}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}}%\\ + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomA\NomB\NomC}&=\ang{\fpeval{0.5*(180-#4)}}\\}{}% + \end{align*}% + \xdef\ResultatAngle{\fpeval{0.5*(180-#4)}}% + \fi% + }{% + \begin{align*}% + \widehat{\NomA\NomB\NomC}+\widehat{\NomB\NomC\NomA}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + \ang{#3}+\ang{#4}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + \xdef\sommeangle{\fpeval{#3+#4}}\xdef\totalangle{\fpeval{180-\sommeangle}}\ang{\sommeangle}+\widehat{\NomC\NomA\NomB}&=\ang{180}\\% + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{180}-\ang{\sommeangle}\\}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}%\\ + \ifboolKV[ClesSommeAngle]{Detail}{\widehat{\NomC\NomA\NomB}&=\ang{\totalangle}}{}% + \end{align*}% + \xdef\ResultatAngle{\totalangle}% + }% + }% +}% + +\newcommand\SommeAngles[4][]{% Macro calculant la mesure de l'angle pCpApB + % #1 : nom du triangle pA pB pC + % #2 : mesure de l'angle pApBpC + % #3 : mesure de l'angle pBpCpA + \useKVdefault[ClesSommeAngle]%obligatoire car la macro n'est pas dans un groupe. + \setKV[ClesSommeAngle]{#1}%lit les arguments optionnels + % On r\'ecup\`ere les noms des sommets. + \StrMid{#2}{1}{1}[\NomA]% + \StrMid{#2}{2}{2}[\NomB]% + \StrMid{#2}{3}{3}[\NomC]% + % Figure ou pas ? + \ifboolKV[ClesSommeAngle]{FigureSeule}{% + \ifx\bla#3\bla% + \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}% + \else% + \ifx\bla#4\bla% + \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}% + \else% + \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}% + \fi% + \fi% + }{% + \ifboolKV[ClesSommeAngle]{Figure}{% + \begin{multicols}{2}% + {\em La figure est donn\'ee \`a titre indicatif.}% + \ifx\bla#3\bla% + \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{0}\]% + \else% + \ifx\bla#4\bla% + \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{0}{#3}\]% + \else% + \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}\]% + \fi% + \fi% + \par\columnbreak\par% + \RedactionSom[#1]{#2}{#3}{#4}% + \end{multicols}% + }{% on r\'edige + \RedactionSom[#1]{#2}{#3}{#4}% + }% + }% +}%
\ No newline at end of file |