%%% % Somme des angles %%% \def\filedateSommeAngles{2024/08/04}% \def\fileversionSommeAngles{0.1}% \message{-- \filedateSommeAngles\space v\fileversionSommeAngles}% % \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}% }% }% }%