diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf | bin | 945084 -> 1025814 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex | 676 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty | 5 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex | 308 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex | 488 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex | 188 |
8 files changed, 1397 insertions, 272 deletions
diff --git a/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf b/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf Binary files differindex f3ed1220900..a03368df859 100644 --- a/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf +++ b/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.pdf diff --git a/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex b/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex index 9301ef24f38..a7c22f749d6 100644 --- a/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex +++ b/Master/texmf-dist/doc/latex/proflycee/ProfLycee-doc.tex @@ -5,8 +5,9 @@ % arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)') \documentclass[a4paper,french,11pt]{article} -\def\PLversion{2.6.3} -\def\PLdate{9 mai 2023} +\def\PLversion{2.6.4} +\def\PLdate{19 mai 2023} +\usepackage{amsfonts} \usepackage{ProfLycee} \useproflyclib{piton,minted,pythontex} \usepackage[math-style=french]{fourier-otf} @@ -307,8 +308,9 @@ \medskip -{\small\noindent% +{\footnotesize\noindent% {\deblst} résoudre, de manière approchée, des équations\\ +{\deblst} calculer (et représenter) une valeur approchée d'une intégrale\\ {\deblst} tracer \textit{facilement} des repères/grilles/courbes\\ {\deblst} tracer des courbes \textit{lisses} avec gestion des extrema et des dérivées\\ {\deblst} présenter du code \textsf{python} ou \textsf{pseudocode}, une console d'exécution \textsf{Python} \\ @@ -326,11 +328,14 @@ {\deblst} générer des listes d'entiers aléatoires (avec ou sans répétitions)\\ {\deblst} déterminer la mesure principale d'un angle \\ {\deblst} calculer les lignes trigonométriques d'angles \og classiques \fg{} \\ +{\deblst} résoudre une équation diophantienne \og classique \fg{} \\ +{\deblst} travailler avec un peu de géométrie analytique \\ + {\deblst} \ldots} ~ -\hfill{}\textsl{Merci à Anne et quark67 pour ses retours et sa relecture !} +\hfill{}\textsl{Merci à Anne et quark67 pour leurs retours et relectures !} \hfill{}\textsl{Merci à Christophe et Denis pour leurs retours et éclairages !} @@ -394,7 +399,7 @@ Le {package} \ctex{ProfLycee} charge et utilise les {packages} : \begin{itemize} \item \ctex{xcolor} avec l' option \textsf{[table,svgnames]} ; - \item \ctex{tikz}, \ctex{pgf}, \ctex{pgffor}, \ctex{nicefrac} ; + \item \ctex{tikz}, \ctex{pgf}, \ctex{pgffor}, \ctex{nicefrac}, \ctex{nicematrix} ; \item \ctex{tcolorbox} avec l'option \textsf{[most]} ; \item \ctex{xparse}, \ctex{xstring}, \ctex{simplekv}, \ctex{xinttools} ; \item \ctex{listofitems}, \ctex{xintexpr} , \ctex{xintbinhex}, \ctex{xintgcd} ; @@ -595,9 +600,6 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent %Valeur approchée d'une intégrale \IntegraleApprochee[clés]{fonction}{a}{b} - -%Équation réduite d'une droite -\EquationReduite[option]{A/xa/ya,B/xb/yb} \end{PresCodeTexPL} \begin{PresCodeTexPL}{listing only} @@ -640,8 +642,6 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent \begin{PseudoCodeAlt}(*)[largeur]{commandes tcbox}...\end{PseudoCodeAlt} \end{PresCodeTexPL} -\pagebreak - \begin{PresCodeTexPL}{listing only} %terminal OS \begin{TerminalWin}[largeur]{clés}[options]...\end{TerminalWin} @@ -662,6 +662,42 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent \end{PresCodeTexPL} \begin{PresCodeTexPL}{listing only} +%Affichage des coordonnées d'un point (2 ou 3 coordonnées) +\AffPoint[options de formatage](liste des coordonnées) +%Affichage des coordonnées d'un vecteur (2 ou 3 coordonnées) +\AffVecteur[options de formatage]<options nicematrix>(liste des coordonnées) + +%Avec un vecteur normal et un point +\TrouveEqCartPlan[clés](vecteur normal)(point) +%Avec deux vecteurs directeurs et un point +\TrouveEqCartPlan[clés](vecteur dir1)(vecteur dir2)(point) +%Avec trois points +\TrouveEqCartPlan[clés](point1)(point2)(point3) + +%Avec un vecteur directeur et un point +\TrouveEqParamDroite[clés](vecteur directeur)(point) +%Avec deux points +\TrouveEqParamDroite[clés](point1)(point2) + +%Avec un vecteur normal (choix par défaut) et un point +\TrouveEqCartDroite[clés](vecteur normal)(point) +%Avec un vecteur directeur et un point +\TrouveEqCartDroite[clés,VectDirecteur](vecteur directeur)(point1) +%Avec deux points +\TrouveEqCartDroite[clés](point1)(point2) + +%Avec le point et le plan via vect normal + point +\TrouveDistancePtPlan(point)(vec normal du plan)(point du plan) +%Avec le point et le plan via vect normal + point +\TrouveDistancePtPlan(point)(équation cartésienne) +\end{PresCodeTexPL} + +\begin{PresCodeTexPL}{listing only} +%Équation réduite d'une droite +\EquationReduite[option]{A/xa/ya,B/xb/yb} +\end{PresCodeTexPL} + +\begin{PresCodeTexPL}{listing only} %paramètres d'une régression linéaire, nuage de points \CalculsRegLin[clés]{listeX}{listeY} \PointsRegLin[clés]{listeX}{listeY} @@ -756,6 +792,9 @@ Elles sont présentées de manière \textit{succincte}, mais elles sont présent %PGCD présenté \PresentationPGCD[options]{a}{b} + +%Équation diophantienne +\EquationDiophantienne[clés]{equation} \end{PresCodeTexPL} \begin{PresCodeTexPL}{listing only} @@ -1180,80 +1219,6 @@ $\displaystyle\IntegraleApprochee[NbSubDiv=100,AffFormule,Expr={80x\,\text{e}^{- \newpage -\section{Équation réduite d'une droite}\label{eqreduite} - -\subsection{Idée} - -\begin{tipblock} -\cmaj{2.6.3} L'idée est de proposer une commande pour déterminer l'équation réduite d'une droite passant par deux points : -\begin{itemize} - \item en traitant les cas particuliers \textit{horizontale}, \textit{verticale} ; - \item en affichant une méthode de résolution ; - \item en travaillant sous forme exacte fractionnaire (les racines carrées ou autres ne seront pas gérés). -\end{itemize} - -À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}. -\end{tipblock} - -\begin{warningblock} -La commande se charge de formater (normalement !) correctement les différentes étapes de calculs (il se peut quand même que cela puisse ne pas donner le résultat réellement escompté\ldots) : - -\begin{itemize} - \item en travaillant en fraction ; - \item en mettant les parenthèses nécessaires devant les éventuels nombres négatifs ; - \item en traitant les cas particuliers $m=\pm1$ et $b=0$. -\end{itemize} -\vspace*{-\baselineskip}\leavevmode -\end{warningblock} - -\begin{PresCodeTexPL}{listing only} -\EquationReduite[option]{A/xa/ya,B/xb/yb} -\end{PresCodeTexPL} - -\subsection{Clés et arguments} - -\begin{cautionblock} -Concernant le fonctionnement de la commande : - -\begin{itemize} - \item le premier argument, optionnel et entre \ctex{[...]} et valant \Cle{[d]} par défaut, permet de formater les fractions éventuelles en mode \ctex{\textbackslash displaystyle} ; - \item le second argument, obligatoire et entre \ctex{\{...\}}, permet de donner les coordonnées des points concernés. -\end{itemize} -\vspace*{-\baselineskip}\leavevmode -\end{cautionblock} - -\begin{PresCodePL}{} -\EquationReduite{C/2/0,D/-2/-8} -\end{PresCodePL} - -\subsection{Exemples} - -\begin{PresCodePL}{} -\EquationReduite{I/-4/5,J/-4/12} -\end{PresCodePL} - -\begin{PresCodePL}{} -\EquationReduite{U/-4/5,V/-4/5} -\end{PresCodePL} - -\begin{PresCodePL}{} -\EquationReduite{L/10/7,M/-2/7} -\end{PresCodePL} - -\begin{PresCodePL}{} -\EquationReduite{L/{1/3}/2.5,M/{-5/7}/{3/5}} -\end{PresCodePL} - -\begin{PresCodePL}{} -\EquationReduite{P/4/-4,Q/-2/2} -\end{PresCodePL} - -\begin{PresCodePL}{} -\EquationReduite{G/-4/5,H/10/4} -\end{PresCodePL} - -\newpage - \phantom{t}\par\vfill\par \begin{PART} \begin{center} @@ -3853,6 +3818,436 @@ Les valeurs \Cle{mainlevee=5mm et 0.6pt} donnent des résultats -- à mon sens - \hfill~ \end{PresCodeSortiePL} +\pagebreak + +\phantom{t}\par\vfill\par +\begin{PART} + \begin{center} + \Huge\MakeUppercase{Outils pour la géométrie analytique} + \end{center} +\end{PART} +\par\vfill\par\phantom{t} + +\newpage + +\part{Outils pour la géométrie analytique} + +\section{Affichage de coordonnées}\label{affcoord} + +\subsection{Idée} + +\begin{tipblock} +\cmaj{2.6.4} L'idée est de proposer des commandes pour simplifier la saisie de coordonnées de vecteurs ou de points (plan ou espace), en saisissant les coordonnées \textit{en ligne}. + +\smallskip + +À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}. +\end{tipblock} + +\begin{warningblock} +Logiquement les commandes (à insérer dans un environnement mathématique) doivent donner des résultats satisfaisants pour tout ce qui est \textit{rationnel}, mais cela ne sera pas pertinent dans le cas de coordonnées irrationnelles\ldots +\end{warningblock} + +\begin{PresCodeTexPL}{listing only} +%Affichage des coordonnées d'un point (2 ou 3 coordonnées) +\AffPoint[options de formatage](liste des coordonnées) + +%Affichage des coordonnées d'un vecteur (2 ou 3 coordonnées) +\AffVecteur[options de formatage]<options nicematrix>(liste des coordonnées) +\end{PresCodeTexPL} + +\begin{warningblock} +Dans cette partie liée à la géométrie analytique, j'ai choisi de saisir les arguments (coordonnées) via les délimiteurs \ctex{(...)} : + +\begin{itemize} + \item avec le séparateur \ctex{,} pour les points ; + \item avec le séparateur \ctex{;} pour les vecteurs. +\end{itemize} + +De ce fait, le code \textit{sait} s'il est face à un point ou à un vecteur, et adapte sa méthode de calcul en conséquence ! +\end{warningblock} + +\subsection{Options et arguments} + +\begin{cautionblock} +Concernant les arguments des commandes : + +\begin{itemize} + \item le premier argument, optionnel et entre \ctex{[...]} permet de spécifier la ou les caractéristiques de formatage des coordonnées, de manière globale ou individuelle, et de manière cohérente avec les options disponibles pour la commande de \textit{conversion en fraction} de \ctex{ProfLycee} : + \begin{itemize} + \item \Cle{d} : pour un formatage en \ctex{dfrac} si nécessaire ; + \item \Cle{t} : pour un formatage en \ctex{tfrac} si nécessaire ; + \item \Cle{n} : pour un formatage en \ctex{nicefrac} si nécessaire ; + \item \Cle{dec} : pour la forme décimale (brute) ; + \item \Cle{dec=k} : pour la forme décimale à $10^{-k}$. + \end{itemize} + Il est possible de spécifier des formatages différents en utilisant une \textit{liste} sous la forme \Cle{f1,f2} ou \Cle{f1,f2,f3} ; + \item l'argument \textit{optionnel} et entre \ctex{<...>} (uniquement pour les vecteurs !) permet de spécifier des options de type \textit{nicematrix} ; + \item l'argument obligatoire, et entre \ctex{\{...\}} est quant à lui la liste des coordonnées, en ligne et au format \textit{naturel xint}. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{noteblock} +Il est donc possible de mettre des \textit{calculs} dans l'argument des coordonnées. + +Il suffit \textit{juste} d'utiliser une syntaxe compréhensible par les commandes du package \ctex{xint}. +\end{noteblock} + +\begin{PresCodePL}{} +%Point, avec affichage classique en dfrac +$\AffPoint(1,2/3)$ \\ +%Point, avec affichage en décimal + dfrac + dfrac +$\AffPoint[dec,d,d](-0.5,1,2/3)$ \\ +%Vecteurs, avec affichages classiques +$\AffVecteur(1;2)$ et $\AffVecteur(1;2;3)$ \\ +%Vecteurs, avec option nicematrix et affichage en décimal + tfrac +$\AffVecteur[dec;t]<cell-space-limits=2pt>(0.5;2/3)$ \\ +%Vecteurs, avec option nicematrix et affichage en décimal +$\AffVecteur[dec]<cell-space-limits=2pt>(0.5;0.6;0.75)$ \\ +%Vecteurs, avec cacluls et affichage classique +$\AffVecteur((2-(-3));(5-6);(1-1))$ +\end{PresCodePL} + +\newpage + +\section{Équation cartésienne d'un plan de l'espace}\label{eqcartplan} + +\subsection{Idée et commande} + +\begin{tipblock} +\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer une équation cartésienne d'un plan dans l'un des cas suivants : + +\begin{itemize} + \item en donnant un vecteur normal et un point ; + \item en donnant deux vecteurs directeurs et un point ; + \item en donnant trois points. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresCodeTexPL}{listing only} +%Avec un vecteur normal et un point +\TrouveEqCartPlan[clés](vecteur normal)(point) +%Avec deux vecteurs directeurs et un point +\TrouveEqCartPlan[clés](vecteur dir1)(vecteur dir2)(point) +%Avec trois points +\TrouveEqCartPlan[clés](point1)(point2)(point3) +\end{PresCodeTexPL} + +\subsection{Clés et arguments} + +\begin{cautionblock} +Concernant les arguments des commandes : + +\begin{itemize} + \item le premier argument, optionnel et entre \ctex{[...]} contient les clés : + \begin{itemize} + \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d} + \item \Cle{SimplifCoeffs} pour forcer des coefficients simples (entiers et premiers entre eux) ; + + \hfill{}défaut : \Cle{false} + \item \Cle{Facteur} pour spécifier un facteur personnalisé aux simplifications. \hfill{}défaut : \Cle{1} + \end{itemize} + \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées (entre 2 et 3). +\end{itemize} + +À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur. +\end{cautionblock} + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur(1;2;3)$ et passant par le point A de coordonnées $\AffPoint(4,5,6)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1;2;3)(4,5,6)$ +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur[n](1/2;2/3;3/5)$ et passant par le point A de coordonnées $\AffPoint(4,5,6)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1/2;2/3;3/5)(4,5,6) \Leftrightarrow \TrouveEqCartPlan[SimplifCoeffs](1/2;2/3;3/5)(4,5,6)$ +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{P}$ de vecteur normal $\vec{n} \AffVecteur[n](1;2/3;0)$ et passant par le point A de coordonnées $\AffPoint[dec,dec,d](0.75,0.56,1/3)$ est $\mathcal{P}$ : $\TrouveEqCartPlan(1;2/3;0)(0.75,0.56,1/3) \Leftrightarrow \TrouveEqCartPlan[SimplifCoeffs](1;2/3;0)(0.75,0.56,1/3)$ +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{P}_3$ passant par les points $A\AffPoint(2,0,1)$, $B\AffPoint(3,1,1)$ et $C\AffPoint(1,-2,0)$ est +\[ \mathcal{P}_3 \text{ : } \TrouveEqCartPlan(2,0,1)(3,1,1)(1,-2,0)\] +\end{PresCodePL} + + + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{R}$ passant par le points $A\AffPoint(0,0,1)$, $B\AffPoint(4,2,3)$ et $C\AffPoint(-3,1,1)$ est +\[ \mathcal{R} \text{ : } \TrouveEqCartPlan[SimplifCoeffs](0,0,1)(4,2,3)(-3,1,1)\] +\[ \mathcal{R} \text{ : } \TrouveEqCartPlan[SimplifCoeffs,Facteur=-1](0,0,1)(4,2,3)(-3,1,1)\] +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne du plan $\mathcal{P}_0$ dirigé par les vecteurs $\AffVecteur(9;7;-8)$ et $\AffVecteur(-2;2;-1)$ et passant par le point $A\AffPoint(5,1,-1)$ est : +\[ \mathcal{P}_0 \text{ : } \TrouveEqCartPlan[SimplifCoeffs](9;7;-8)(-2;2;-1)(5,1,-1)\] +\end{PresCodePL} + +\newpage + +\section{Équation paramétrique d'une droite de l'espace}\label{eqparamdroite} + +\subsection{Idée et commande} + +\begin{tipblock} +\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer un système d'équations paramétriques d'une droite de l'espace dans l'un des cas suivants : + +\begin{itemize} + \item en donnant un vecteur directeur et un point ; + \item en donnant deux points. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresCodeTexPL}{listing only} +%Avec un vecteur directeur et un point +\TrouveEqParamDroite[clés](vecteur directeur)(point) +%Avec deux points +\TrouveEqParamDroite[clés](point1)(point2) +\end{PresCodeTexPL} + +\subsection{Clés et arguments} + +\begin{cautionblock} +Concernant les arguments des commandes : + +\begin{itemize} + \item le premier argument, optionnel et entre \ctex{[...]} contient les clés : + \begin{itemize} + \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d} + \item \Cle{Reel} pour coder le paramètre réel ; \hfill{}défaut : \Cle{k} + \item le booléen \Cle{Oppose} pour utiliser plutôt l'opposé du vecteur directeur ; \hfill{}défaut : \Cle{false} + \item le booléen \Cle{Rgras} pour utiliser le symbole \textbf{R} ou lieu de $\mathbb{R}$ (si \ctex{amsfonts} est chargé !). + + \hfill{}défaut : \Cle{false} + \end{itemize} + \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées. +\end{itemize} + +À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur. +\end{cautionblock} + +\begin{PresCodePL}{} +Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(2;5;-4)$ et passant par $A\AffPoint(-1,-1,-1)$ est +\[ \TrouveEqParamDroite(2;5;-4)(-1,-1,-1) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation paramétrique de la droite $(d)$ passant par $\AffPoint(2,5,-4)$ et $\AffPoint(-1,-1,-1)$ est +\[ \TrouveEqParamDroite[Oppose](2,5,-4)(-1,-1,-1) \text{ ou } \TrouveEqParamDroite(2,5,-4)(-1,-1,-1) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(0;-1;3)$ et passant par $O\AffPoint(0,0,0)$ est +\[ \TrouveEqParamDroite(0;-1;3)(0,0,0) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation paramétrique de la droite $(d)$ dirigée par le vecteur $\vec{u}\AffVecteur(-1;2;3)$ et passant par $A\AffPoint(2,0,-3)$ est +\[ \TrouveEqParamDroite[Reel=\ell,Rgras](-1;2;3)(2,0,-3) \] +\end{PresCodePL} + +\newpage + +\section{Équation cartésienne d'une droite du plan}\label{eqcartdroite} + +\subsection{Idée et commande} + +\begin{tipblock} +\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer une équation cartésienne d'une droite du plan dans l'un des cas suivants : + +\begin{itemize} + \item en donnant un vecteur directeur et un point ; + \item en donnant un vecteur normal et un point ; + \item en donnant deux points. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresCodeTexPL}{listing only} +%Avec un vecteur normal (choix par défaut) et un point +\TrouveEqCartDroite[clés](vecteur normal)(point) +%Avec un vecteur directeur et un point +\TrouveEqCartDroite[clés,VectDirecteur](vecteur directeur)(point1) +%Avec deux points +\TrouveEqCartDroite[clés](point1)(point2) +\end{PresCodeTexPL} + +\subsection{Clés et arguments} + +\begin{cautionblock} +Concernant les arguments des commandes : + +\begin{itemize} + \item le premier argument, optionnel et entre \ctex{[...]} contient les clés : + \begin{itemize} + \item \Cle{OptionCoeffs} pour spécifier un formatage \textit{global} des coefficients ; \hfill{}défaut : \Cle{d} + \item le booléen \Cle{SimplifCoeffs} pour forcer des coeffs simples (entiers et premiers entre eux) ; + + \hfill{}défaut : \Cle{false} + \item \Cle{Facteur} pour spécifier un facteur personnalisé aux simplifications ; \hfill{}défaut : \Cle{1} + \item le booléen \Cle{VectDirecteur} pour pour préciser que le vecteur utilisé est directeur.\hfill{}défaut : \Cle{false} + \end{itemize} + \item les arguments suivants, entre \ctex{(...)} correspondent aux données utilisées. +\end{itemize} + +À noter que les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur. +\end{cautionblock} + +\begin{PresCodePL}{} +Une équation cartésienne de la droite $\mathcal{D}$ de vecteur normal $\vec{n} \AffVecteur(1;2)$ et passant par le point A de coordonnées $\AffPoint(4,5)$ est $\mathcal{D}$ : $\TrouveEqCartDroite[VectNormal](1;2)(4,5)$ +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne de la droite $\mathcal{D}$ de vecteur directeur $\vec{u} \AffVecteur[n](1/2;2/3)$ et passant par le point A de coordonnées $\AffPoint(5,6)$ est $\mathcal{D}$ : $\TrouveEqCartDroite[VectDirecteur](1/2;2/3)(5,6) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs,VectDirecteur](1/2;2/3)(5,6) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs,VectDirecteur,Facteur=-1](1/2;2/3)(5,6)$ +\end{PresCodePL} + +\begin{PresCodePL}{} +Une équation cartésienne de la droite $\mathcal{D}$ passant par les points $\AffPoint(2,4)$ et $\AffPoint(-4,2)$ est \[\mathcal{D} \text{ : } \TrouveEqCartDroite(2,4)(-4,2) \Leftrightarrow \TrouveEqCartDroite[SimplifCoeffs](2,4)(-4,2)\] +\end{PresCodePL} + +\newpage + +\section{Distance d'un point à un plan}\label{distptplan} + +\subsection{Idée et commande} + +\begin{tipblock} +\cmaj{2.6.4} L'idée est de proposer une commande pour déterminer la distance d'un point à un plan : + +\begin{itemize} + \item en donnant le point puis le plan défini par vecteur normal \&{} point ; + \item en donnant le point puis le plan défini par une équation cartésienne. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{PresCodeTexPL}{listing only} +%Avec le point et le plan via vect normal + point +\TrouveDistancePtPlan(point)(vec normal du plan)(point du plan) +%Avec le point et le plan via vect normal + point +\TrouveDistancePtPlan(point)(équation cartésienne) +\end{PresCodeTexPL} + +\begin{noteblock} +Le résultat étant souvent écrit à l'aide d'une racine carrée, le code se charge de simplifier le résultat sous la forme $\frac{a\sqrt{n}}{b}$. + +Dans le cas où les coordonnées ne seraient pas rationnelles, le résultat risque de ne pas être conforme à celui attendu. +\end{noteblock} + +\subsection{Clés et arguments} + +\begin{cautionblock} +Concernant les arguments de cette commande : + +\begin{itemize} + \item si on travaille avec une équation cartésienne, elle est à donner sous la forme \ctex{ax+by+cz=0} ou \ctex{ax+by+cz} + \item les séparateurs \ctex{,} ou \ctex{;} permettent de spécifier point ou vecteur pour les arguments 1 et 3. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{PresCodePL}{} +La distance entre le point $\AffPoint(1,2,3)$ et le plan de vecteur normal $\AffVecteur(-1;-2;3)$ et passant par $\AffPoint(5,0,2)$ vaut +\[ d = \displaystyle\TrouveDistancePtPlan(1,2,3)(-1;-2;3)(5,0,2) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +La distance entre le point $\AffPoint(1,2,3)$ et le plan d'équation $x+2y+2z-7=0$ vaut +\[ d = \displaystyle\TrouveDistancePtPlan(1,2,3)(x+2y-2z+7) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +La distance entre le point $\AffPoint(-7,0,4)$ et le plan d'équation $0,5x+2y-z-1=0$ vaut +\[ d = \displaystyle\TrouveDistancePtPlan(-7,0,4)(0.5x+2y-z-1=0) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +La distance entre le point $H\AffPoint(0,4,8)$ et le plan d'équation $-x+y+z-4=0$ vaut +\[ d = \displaystyle\TrouveDistancePtPlan(0,4,8)(-x+y+z-4=0) \] +\end{PresCodePL} + +\begin{PresCodePL}{} +La distance entre le point $H\AffPoint(0,0,5)$ et le plan d'équation $z-1=0$ vaut +\[ d = \displaystyle\TrouveDistancePtPlan(0,0,5)(z-1=0) \] +\end{PresCodePL} + +\newpage + +\section{Équation réduite d'une droite du plan}\label{eqreduite} + +\subsection{Idée} + +\begin{tipblock} +\cmaj{2.6.3} L'idée est de proposer une commande pour déterminer l'équation réduite d'une droite passant par deux points : +\begin{itemize} + \item en traitant les cas particuliers \textit{horizontale}, \textit{verticale} ; + \item en affichant une méthode de résolution ; + \item en travaillant sous forme exacte fractionnaire (les racines carrées ou autres ne seront pas gérés). +\end{itemize} + +À noter que les calculs et résultats sont traités par la commande de \textit{conversion de fraction} de \ctex{ProfLycee}. +\end{tipblock} + +\begin{warningblock} +La commande se charge de formater (normalement !) correctement les différentes étapes de calculs (il se peut quand même que cela puisse ne pas donner le résultat réellement escompté\ldots) : + +\begin{itemize} + \item en travaillant en fraction ; + \item en mettant les parenthèses nécessaires devant les éventuels nombres négatifs ; + \item en traitant les cas particuliers $m=\pm1$ et $b=0$. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{warningblock} + +\begin{PresCodeTexPL}{listing only} +\EquationReduite[option]{A/xa/ya,B/xb/yb} +\end{PresCodeTexPL} + +\subsection{Clés et arguments} + +\begin{cautionblock} +Concernant le fonctionnement de la commande : + +\begin{itemize} + \item le premier argument, optionnel et entre \ctex{[...]} et valant \Cle{[d]} par défaut, permet de formater les fractions éventuelles en mode \ctex{\textbackslash displaystyle} ; + \item le second argument, obligatoire et entre \ctex{\{...\}}, permet de donner les coordonnées des points concernés. +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{cautionblock} + +\begin{PresCodePL}{} +\EquationReduite{C/2/0,D/-2/-8} +\end{PresCodePL} + +\subsection{Exemples} + +\begin{PresCodePL}{} +\EquationReduite{I/-4/5,J/-4/12} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationReduite{U/-4/5,V/-4/5} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationReduite{L/10/7,M/-2/7} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationReduite{L/{1/3}/2.5,M/{-5/7}/{3/5}} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationReduite{P/4/-4,Q/-2/2} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationReduite{G/-4/5,H/10/4} +\end{PresCodePL} + \newpage \phantom{t}\par\vfill\par @@ -4418,7 +4813,9 @@ Ces commande permet de tracer les graduations des axes, avec des \Cle{clés} ide \item \Cle{Epaisseur} qui est l'épaisseur des graduations ; \hfill~défaut \Cle{1pt} \item \Cle{Police} qui est le style des labels des graduations ; \hfill~défaut \Cle{\textbackslash{}normalsize\textbackslash{}normalfont} \item \Cle{PosGrad} qui est la position des graduations par rapport à l'axe ; \hfill~défaut \Cle{below} et \Cle{left} - \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ; \hfill~défaut \Cle{4pt} + \item \Cle{HautGrad} qui est la position des graduations (sous la forme \Cle{lgt} ou \Cle{lgta/lgtb}) ; + + \hfill~défaut \Cle{4pt} \item le booléen \Cle{AffGrad} pour afficher les valeurs (formatés avec \ctex{num} donc dépendant de \ctex{sisetup}) des graduations ; \hfill~défaut \Cle{true} \item le booléen \Cle{AffOrigine} pour afficher la graduation de l'origine ; \hfill~défaut \Cle{true} \item le booléen \Cle{Annee} qui permet de ne pas formater les valeurs des graduations (type \textsf{année}). \hfill~défaut \Cle{false} @@ -4494,7 +4891,9 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter \begin{itemize} \item \Cle{Taille} qui est la taille des points du nuage ; \hfill~défaut \Cle{2pt} \item \Cle{Style} parmi \Cle{o} (rond) ou \Cle{x} (croix) ou \Cle{+} (plus) ; \hfill~défaut \Cle{o} - \item \Cle{Couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds). \hfill~défaut \Cle{blue} + \item \Cle{Couleur} qui est la couleur (éventuellement \Cle{couleurA/couleurB} pour les ronds). + + \hfill~défaut \Cle{blue} \end{itemize} \vspace*{-\baselineskip}\leavevmode \end{cautionblock} @@ -4502,14 +4901,12 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter \begin{PresCodeTexPL}{listing only} \def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008, 2009,2010} \def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661, 1656,1649} +\end{PresCodeTexPL} +\begin{PresCodeTexPL}{listing only} \begin{tikzpicture}[...] \NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \end{tikzpicture} -~~ -\begin{tikzpicture}[...] - \NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY} -\end{tikzpicture} \end{PresCodeTexPL} \begin{PresCodeSortiePL}{text only} @@ -4523,6 +4920,18 @@ Cette commande, liée à la commande \ctex{CalculsRegLin} permet de représenter \AxeyTikz{1640,1650,...,1720} \NuagePointsTikz[Couleur=blue/red]{\LLX}{\LLY} \end{tikzpicture} +\end{PresCodeSortiePL} + +\begin{PresCodeTexPL}{listing only} +\begin{tikzpicture}[...] + \NuagePointsTikz[Couleur=ForestGreen,Style=x,Taille=6pt]{\LLX}{\LLY} +\end{tikzpicture} +\end{PresCodeTexPL} + +\begin{PresCodeSortiePL}{text only} +\def\LLX{1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010} +\def\LLY{1718,1710,1708,1700,1698,1697,1691,1688,1683,1679,1671,1670,1663,1661,1656,1649} +\CalculsRegLin{\LLX}{\LLY} \begin{tikzpicture}[x=0.35cm,y=0.07cm,Ox=1992,xmin=1992,xmax=2012,xgrille=2,xgrilles=1,Oy=1640,ymin=1640,ymax=1730,ygrille=10,ygrilles=5] \GrilleTikz \AxesTikz @@ -4711,7 +5120,9 @@ Quelques \Cle{clés} sont disponibles pour cette commande : \item le booléen \Cle{AffMoyenne} qui permet d'afficher ou non la moyenne (sous forme d'un point) ; \hfill~défaut \Cle{false} - \item le booléen \Cle{Pointilles} qui permet d'afficher des pointillés au niveau des paramètres ; \hfill~défaut \Cle{false} + \item le booléen \Cle{Pointilles} qui permet d'afficher des pointillés au niveau des paramètres ; + + \hfill~défaut \Cle{false} \item le booléen \Cle{Valeurs} qui permet d'afficher les valeurs des paramètres au niveau des abscisses. \hfill~défaut \Cle{false} @@ -5452,7 +5863,9 @@ Peu de paramétrage pour ces commandes qui permettent de calculer $A_n^p$ et $\b \begin{itemize} \item les versions étoilées ne formatent pas le résultat grâce à \ctex{\textbackslash num} de \ctex{sinuitx} ; \item le booléen \Cle{Notation} pour avoir la notation au début ; \hfill~défaut \Cle{false} - \item le booléen \Cle{NotationAncien} pour avoir la notation \og ancienne \fg{} des combinaisons au début ; \hfill~défaut \Cle{false} + \item le booléen \Cle{NotationAncien} pour avoir la notation \og ancienne \fg{} des combinaisons au début ; + + \hfill~défaut \Cle{false} \item le booléen \Cle{Formule} permet de présenter la formule avant le résultat ; \hfill~défaut \Cle{false} @@ -5857,8 +6270,6 @@ La présentation est dans un environnement \ctex{ensuremath} donc les \ctex{\$.. \PresentationPGCD[CouleurResultat]{150}{27} \end{PresCodePL} -\pagebreak - \begin{PresCodePL}{} \PresentationPGCD[CouleurResultat,Couleur=ForestGreen]{1250}{450}. @@ -5887,6 +6298,77 @@ $\left[ \PresentationPGCD[AfficheConclusion=false,AfficheDelimiteurs=false]{1234 \newpage +\section{Résolution d'une équation diophantienne}\label{eqdioph} + +\subsection{Idée} + +\begin{tipblock} +L'idée est de proposer une résolution d'équation diophantienne du type $ax+by=c$ avec $(a;b;c) \in \mathbb{Z}^3$. + +\smallskip + +Le \textit{code} se charge de tester les différentes conditions d'existence, et d'adapter la rédaction (fixée et non modifiable\ldots) aux différentes situations : + +\begin{itemize} + \item cas où $\text{PGCD}(a;b)=1$ ;\hfill~existence de solutions + \item cas où $\text{PGCD}(a;b) \neq 1$ et $\text{PGCD}(a;b) \mid c$;\hfill~existence de solutions + \item cas où $\text{PGCD}(a;b) \neq 1$ et $\text{PGCD}(a;b) \not\mid c$.\hfill~pas de solution +\end{itemize} +\vspace*{-\baselineskip}\leavevmode +\end{tipblock} + +\begin{warningblock} +Logiquement le \textit{code} se charge de \textit{parenthéser} de manière automatique pour les nombres négatifs, mais il se peut que certains cas particuliers puissent donner des résultats \og non esthétiques \fg{}\ldots +\end{warningblock} + +\begin{PresCodeTexPL}{listing only} +\EquationDiophantienne[Clés]{equation} +\end{PresCodeTexPL} + +\subsection{Options et clés} + +\begin{cautionblock} +Concernant les Clés disponibles pour cette commande, à donner entre \ctex{[...]} : + +\begin{itemize} + \item la clé \Cle{Lettre} pour spécifier le \textit{nom} de l'équation ; \hfill{}défaut \Cle{E} + \item la clé \Cle{Inconnues} qui paramètre les noms des inconnues, sous la forme \Cle{x/y} ; \hfill{}défaut \Cle{x/y} + \item la clé \Cle{Entier} qui gère le nom de l'entier dans la solution ; \hfill{}défaut \Cle{k} + \item le booléen \Cle{Cadres} pour mettre en valeur les solutions ;\hfill{}défaut \Cle{false} + \item le booléen \Cle{PresPGCD} présenter le calcul du PGCD de $|a|$ et de $|b|$.\hfill{}défaut \Cle{true} +\end{itemize} + +L'argument obligatoire, et entre \ctex{\{...\}} est quant à lui l'équation, en langage \og naturel \fg{} du type \ctex{ax+by=c} (le \textit{code} se charge d'extraire les coefficients, donc pas besoin des signes *). +\end{cautionblock} + +\begin{PresCodePL}{} +\EquationDiophantienne{48x+18y=3} +\end{PresCodePL} + +\begin{PresCodePL}{} +\EquationDiophantienne[PresPGCD=false]{48x+18y=-5} +\end{PresCodePL} + +\pagebreak + +\begin{PresCodePL}{} +\EquationDiophantienne{3x+4y=1} +\end{PresCodePL} + +\pagebreak + +\begin{PresCodePL}{} +\EquationDiophantienne[Cadres,Inconnues=u/v,Entier=l]{48u+18v=12} +\end{PresCodePL} + +\pagebreak + +\begin{PresCodePL}{} +\EquationDiophantienne{47x-18y=1} +\end{PresCodePL} + +\newpage + \phantom{t}\par\vfill\par \begin{PART} \begin{center} @@ -6567,6 +7049,12 @@ La grille, créée en \TikZ, est portée par le rectangle de \og coins \fg{} $(0 \part{Historique} +{\small \bverb|v 2.6.4|~:~~~~Résolution d'une équation diophantienne $ax+by=c$ (page \pageref{eqdioph}) + +{\small \bverb| |~:~~~~Correction de bugs mineurs + +{\small \bverb| |~:~~~~Ajout de commandes en géométrie analytique (pages \pageref{affcoord} et \pageref{eqcartplan} et \pageref{eqparamdroite} et \pageref{eqcartdroite} et \pageref{distptplan}) + {\small \bverb|v 2.6.3|~:~~~~Ajout d'une commande pour déterminer une équation réduite (page \pageref{eqreduite}) {\small \bverb|v 2.6.2|~:~~~~Ajout d'une clé [AffTraitsEq] pour les équations trigo (page \pageref{cercletrigo}) diff --git a/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty b/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty index 322e4ad25d6..89b82dd10cf 100644 --- a/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty +++ b/Master/texmf-dist/tex/latex/proflycee/ProfLycee.sty @@ -3,8 +3,9 @@ % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ProfLycee}[2023/05/09 2.6.3 Aide pour l'utilisation de LaTeX en lycee] -% 2.6.3 Ajout d'une commande pour l'équation affine d'une droite passant par deux points +\ProvidesPackage{ProfLycee}[2023/05/19 2.6.4 Aide pour l'utilisation de LaTeX en lycee] +% 2.6.4 Correction d'un dysfonctionnement avec les racines (oubli du \num) + Equation diophantienne ax+by=c + Eq cartésiennes (plan & droite) + Corrections de bugs mineurs +% 2.6.3 Ajout d'une commande pour rédiger l'obtention de l'équation affine d'une droite passant par deux points % 2.6.2 Correction de commandes pour la pseudo3d + nouvelle clé pour la trigo % 2.6.1 Ajout de commandes pour du calcul intégral (valeur approchée + tikz) % 2.6.0 Ajout d'une clé [Brut] pour les mesures principales + commande calcul ligne trigo diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex index 943a28d0fb5..c1d167f0589 100644 --- a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex +++ b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-aleatoire.tex @@ -25,7 +25,7 @@ \setKV[kvensemble]{#1}% \ifboolKV[kvensemble]{Mathpunct}% {\left\lbrace \PLensopt{} \mathpunct{} \StrSubstitute{#2}{/}{\mathpunct{}{\PLenssep}\mathpunct{}} \mathpunct{} \right\rbrace}% - {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace} + {\left\lbrace \PLensopt{} \StrSubstitute{#2}{/}{{\PLenssep}} \right\rbrace}% } %%------TRINOMEALEA diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex index 0e8906ee964..4057fe37dda 100644 --- a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex +++ b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-analyse.tex @@ -334,7 +334,7 @@ \ensuremath{\frac{% \xintifboolexpr{\RacNumSimpl == 1 && \RacRacSimpl == 1}% {1}% - { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\RacRacSimpl}} }% + { \xintifboolexpr{\RacNumSimpl == 1}{}{\RacNumSimpl} \xintifboolexpr{\RacRacSimpl == 1}{}{\sqrt{\num{\RacRacSimpl}}} }% }% { \RacDenomSimpl }}% }% diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex index 5b83b2a4d0e..42e9264e5dd 100644 --- a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex +++ b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-arithm.tex @@ -16,12 +16,12 @@ \NewDocumentCommand\ConversionDecBin{ s O{} m }{% \useKVdefault[CONVDECBIN] \setKV[CONVDECBIN]{#2}% on paramètres les nouvelles clés et on les simplifie - \def\resbrut{\xintDecToBin{#3}} - \StrLen{\resbrut}[\nbchiffres] - \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} - \IfBooleanTF{#1} - {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}} - {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}} + \def\resbrut{\xintDecToBin{#3}}% + \StrLen{\resbrut}[\nbchiffres]% + \def\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}}% + \IfBooleanTF{#1}% + {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}% + {\num{#3}\ifboolKV[CONVDECBIN]{AffBase}{_{10}}{}=\num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resbrut}\ifboolKV[CONVDECBIN]{AffBase}{_{2}}{}}% } \setKVdefault[CONVBINHEX]{% @@ -43,35 +43,35 @@ %la conversion complète \newcommand\ConversionBinHex[2][]{% - \useKVdefault[CONVBINHEX] + \useKVdefault[CONVBINHEX]% \setKV[CONVBINHEX]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\chbrut{#2} + \def\chbrut{#2}% \StrLen{\chbrut}[\nbchiffres] %nb de chiffres du binaire \xdef\nbgrp{\fpeval{4*ceil(\nbchiffres/4,0)}} %nb de chiffres avec blocs de 4 \xdef\nbblocs{\fpeval{\nbgrp/4}} %nb de blocs %on rajoute des zeros si besoin := OK - \xdef\resinter{\chbrut} - \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}= + \xdef\resinter{\chbrut}% + \num[digit-group-size=4]{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{2}}{}=% \ifboolKV[CONVBINHEX]{Details}{% - \ifnum\nbchiffres<\nbgrp - \xdef\nbz{\inteval{\nbgrp-\nbchiffres}} - \xdef\resinter{\PLstrzeros{\nbz}\chbrut} - \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}= - \fi + \ifnum\nbchiffres<\nbgrp% + \xdef\nbz{\inteval{\nbgrp-\nbchiffres}}% + \xdef\resinter{\PLstrzeros{\nbz}\chbrut}% + \num[digit-group-size=4,minimum-integer-digits=\nbgrp]{\resinter}=% + \fi% %découpage par blocs et conversion en hexa := OK - \newcount\cpt - \cpt0 - \loop\ifnum \cpt<\nbblocs + \newcount\cpt% + \cpt0% + \loop\ifnum \cpt<\nbblocs% \def\iinit{\fpeval{4*\cpt+1}}% \def\ifinal{\fpeval{4*(\cpt+1)}}% \StrMid{\resinter}{\iinit}{\ifinal}[\blocinter]% - {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,} - \advance\cpt by 1 - \repeat - \!= + {\underbracket{\blocinter}_{\xintBinToHex{\blocinter}}\,}% + \advance\cpt by 1% + \repeat% + \!=% }% - {} - \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{} + {}% + \xintBinToHex{\chbrut}\ifboolKV[CONVBINHEX]{AffBase}{_{16}}{}% } %hexa/bin->dec avec écriture polynomiale @@ -94,62 +94,62 @@ \newcommand\ConversionVersDec[2][]{% \useKVdefault[CONVTODEC] \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\nbdepart{#2} - \StrLen{\nbdepart}[\nbchiffres] - \StrChar{\nbdepart}{1}[\chiffre] + \def\nbdepart{#2}% + \StrLen{\nbdepart}[\nbchiffres]% + \StrChar{\nbdepart}{1}[\chiffre]% %si on est en base 16 \xintifboolexpr{\basedepart == 16}% {% - \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \nbdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\nbdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\nbdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - } - { - \ifnum\xintHexToDec{\chiffre} > 0 + }% + {% + \ifnum\xintHexToDec{\chiffre} > 0% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = - } - {} - \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{} + \fi% + }% + \advance\cpt by 1% + \repeat% + =% + }% + {}% + \num{\xintHexToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% }% - {} + {}% \xintifboolexpr{\basedepart == 2}% {% - \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \num[digit-group-size=4]{\nbdepart}\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \chiffre\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\nbdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\nbdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\chiffre\times\basedepart^{\puiss}% } { - \ifnum\chiffre > 0 + \ifnum\chiffre > 0% +\chiffre\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = - } - {} - \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{} + \fi% + }% + \advance\cpt by 1% + \repeat% + =% + }% + {}% + \num{\xintBinToDec{\nbdepart}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% }% {}% } @@ -157,30 +157,30 @@ \newcommand\ConversionBaseDix[3][]{%1=options,%2=nb,%3=basedep ?? \useKVdefault[CONVTODEC] \setKV[CONVTODEC]{#1}% on paramètres les nouvelles clés et on les simplifie - \def\NBdepart{#2} - \def\basedepart{#3} - \StrLen{\NBdepart}[\nbchiffres] - \StrChar{\NBdepart}{1}[\chiffre] - \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} = + \def\NBdepart{#2}% + \def\basedepart{#3}% + \StrLen{\NBdepart}[\nbchiffres]% + \StrChar{\NBdepart}{1}[\chiffre]% + \NBdepart\ifboolKV[CONVTODEC]{AffBase}{_{\basedepart}}{} =% \ifboolKV[CONVTODEC]{Details}{% \xintHexToDec{\chiffre}\times\basedepart^{\inteval{\nbchiffres-1}}% - \newcount\cpt - \cpt2 - \loop\ifnum \cpt<\inteval{\nbchiffres+1} - \def\puiss{\inteval{\nbchiffres-\cpt}} - \StrChar{\NBdepart}{\cpt}[\chiffre] + \newcount\cpt% + \cpt2% + \loop\ifnum \cpt<\inteval{\nbchiffres+1}% + \def\puiss{\inteval{\nbchiffres-\cpt}}% + \StrChar{\NBdepart}{\cpt}[\chiffre]% \ifboolKV[CONVTODEC]{Zeros}% {% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - } - { - \ifnum\xintHexToDec{\chiffre} > 0 + }% + {% + \ifnum\xintHexToDec{\chiffre} > 0% +\xintHexToDec{\chiffre}\times\basedepart^{\puiss}% - \fi - } - \advance\cpt by 1 - \repeat - = + \fi% + }% + \advance\cpt by 1% + \repeat% + =% }% {}% \num{\convertbasetobasedix{#2}{#3}}\ifboolKV[CONVTODEC]{AffBase}{_{10}}{}% @@ -231,7 +231,7 @@ } %dernière \xdef\ValQ{\fpeval{trunc(\ValTMP/#3,0)}}\xdef\ValR{\fpeval{\ValTMP-#3*\ValQ}}% - \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}} + \\ \num{\ValTMP}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}\PLnoeud{\PLConvNoeud2}{\num{\ValR}}% \end{array} \right| \Rightarrow \num{#2}_{10}=\ifboolKV[convfromten]{CouleurRes}{\mathcolor{\PLConvCouleur}{\convertbasedixtobase{#2}{#3}_{#3}}}{\convertbasedixtobase{#2}{#3}_{#3}}}% \ifboolKV[convfromten]{Rect}% {% @@ -263,6 +263,8 @@ AfficheDelimiteurs=true } +\RequirePackage{xintgcd} + \newcommand\PresentationPGCD[3][]{% \useKVdefault[prespgcd]% \setKV[prespgcd]{#1}% @@ -274,7 +276,7 @@ {}% \begin{array}{@{\,}r@{\;=\;}l@{\;+\;}r} %1ère division - \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}} + \xdef\ValQ{\fpeval{trunc(\ValA/\ValB,0)}}\xdef\ValR{\fpeval{\ValA-\ValB*\ValQ}}% \num{\ValA}\uppercase{&}\num{\ValB}\times\num{\ValQ}\uppercase{&}% \xintifboolexpr{\ValR == \respgcd}% {\PLnoeud{\PLPGCDNoeud1}{\num{\ValR}}}%noeud si c'est le pgcd @@ -308,4 +310,150 @@ }{}% } +%%===égalité de Bezout +\NewDocumentCommand\AffCoeffBezout{ m }{% + \xintifboolexpr{#1 < 0}% + {\left( \num{#1} \right)}% + {\num{#1}}% +} +\NewDocumentCommand\EgaliteBezout{ O{black} m m }{% + \xintAssign{\xintBezout{#2}{#3}}\to\TmpU\TmpV\TmpD% + \ensuremath{\num{#2} \times \mathcolor{#1}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{#3} \times \mathcolor{#1}{\AffCoeffBezout{\TmpV}} = \num{\TmpD}}% +} + +%%===Équations diophantiennes +\RequirePackage{cancel} +\NewDocumentCommand\AffCoeffDioph{ m }{% + \xintifboolexpr{#1 < 0}% + {\left( \num{#1} \right)}% + {\num{#1}}% +} +\NewDocumentCommand\AffCoeffDiophSign{ m }{% + \xintifboolexpr{#1 < 0}% + {\num{#1}}% + {+\num{#1}}% +} + +\defKV[eqdioph]{% + Lettre=\def\LettreSolEDioph{#1},% + Couleur=\def\CouleurSolEDioph{#1},% + Inconnues=\def\InconnuesSolEDioph{#1},% + Entier=\def\KKK{#1} +} + +\setKVdefault[eqdioph]{% + Lettre=E,% + Couleur=black,% + Inconnues=x/y,% + Entier=k,% + Cadres=false,% + PresPGCD=true +} + +\NewDocumentCommand\EquationDiophantienne{ O{} m }{%v2 avec équation en "dur" + \useKVdefault[eqdioph]% + \setKV[eqdioph]{#1}% + \setlength{\parindent}{0pt}% + %extractions des paramètres + \StrBefore[1]{\InconnuesSolEDioph}{/}[\XXX]% + \StrBehind[1]{\InconnuesSolEDioph}{/}[\YYY]% + \StrBefore{#2}{\XXX}[\AA]% + \StrBetween{#2}{\XXX}{\YYY}[\BB]% + \StrBehind{#2}{=}[\CC]% + \IfStrEq{\AA}{}% + {\def\AA{1}}{}% + \IfStrEq{\AA}{-}% + {\def\AA{-1}}{}% + \StrLen{\BB}[\lgtB]% + \xintifboolexpr{ \lgtB > 1 }%+b ou -b + {% + \StrDel{\BB}{+}[\BB]% + }% + {% + \IfStrEq{\BB}{-}% + {\def\BB{-1}}{}% + \IfStrEq{\BB}{+}% + {\def\BB{1}}{}% + }% + %Calcul du PGCD + \xdef\PGCDD{\xinteval{gcd(\AA,\BB)}}% + On cherche à résoudre l'équation diophantienne :\[ \num{\AA}\XXX + \AffCoeffDioph{\BB}\YYY=\num{\CC} \xintifboolexpr{ \PGCDD == 1 'or' \xintiiRem{\CC}{\PGCDD} != 0 }{\qquad (\LettreSolEDioph)}{} \]% + \ifboolKV[eqdioph]{PresPGCD}% + {D'après l'algorithme d'Euclide : \PresentationPGCD[Rectangle=false]{\xinteval{abs(\AA)}}{\xinteval{abs(\BB)}}.}% + {Le PGCD de \num{\AA} et de \num{\BB} vaut \num{\PGCDD}.}% + \par\smallskip + \xintifboolexpr{ \xintiiRem{\CC}{\PGCDD} == 0 }%solutions obligatoires + {% + \xintifboolexpr{ \PGCDD == 1}% + {% + Les entiers \num{\xinteval{abs(\AA)}} et \num{\xinteval{abs(\BB)}} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par + \xdef\AAA{\AA}\xdef\BBB{\BB}\xdef\CCC{\CC}% + }% + {% + Le PGCD de \num{\AA} et \num{\BB} divise \num{\CC}, donc on peut simplifier l'équation diophantienne par \num{\PGCDD}.% + \xdef\AAA{\xintiieval{\AA/\PGCDD}}\xdef\BBB{\xintiieval{\BB/\PGCDD}}\xdef\CCC{\xintiieval{\CC/\PGCDD}}% + % + \[ \num{\AA}\XXX+\AffCoeffDioph{\BB}\YYY=\num{\CC} \underset{\div\num{\PGCDD}}{\Longleftrightarrow} \num{\AAA}\XXX+\AffCoeffDioph{\BBB}\YYY=\num{\CCC} \qquad (\LettreSolEDioph) \]% + Les entiers \num{\AAA} et \num{\BBB} sont premiers entre eux, donc l'équation $(\LettreSolEDioph)$ admet une infinité de solutions.\par + }% + \xintAssign{\xintBezout{\AAA}{\BBB}}\to\TmpU\TmpV\TmpD + % + On détermine une solution particulière de $(E)$ : \[ \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpU}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffBezout{\TmpV}} = \num{\TmpD} + \xintifboolexpr{ \CCC != 1}% + {% + \underset{\times\AffCoeffDioph{\CCC}}{\implies} + \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} + \AffCoeffBezout{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} = \num{\CCC} + }% + {}% + \qquad ({\LettreSolEDioph}_0) + \]% + % + Par soustraction : + % + \[% + {\renewcommand\arraystretch{1.25}% + \begin{array}{ @{\,} c @{\,} c @{\;\times\;} c @{\;+\;} c @{\;\times\;} c @{\;=\;} c } + & \num{\AAA} & \XXX & \AffCoeffDioph{\BBB} & \YYY & \num{\CCC} \\ + -~~~~~ & \num{\AAA} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpU*\CCC}}} & \AffCoeffDioph{\BBB} & \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\TmpV*\CCC}}} & \num{\CCC} \\ \hline + & \num{\AAA} & \left( \XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}} \right)& \AffCoeffDioph{\BBB} & \left( \YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}} \right) & 0\\ + \end{array}} + \]% + \xdef\TmpPartieA{\XXX \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpU*\CCC}}}}% + \xdef\TmpPartieB{\YYY \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\TmpV*\CCC}}}}% + % + On en déduit que $\num{\AAA} \times \underbrace{\left( \TmpPartieA \right)}_{\text{entier}} = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$, et donc que $\num{\AAA} \mid \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right)$.\par\smallskip + Or \num{\xinteval{abs(\AAA)}} et \num{\xinteval{abs(\BBB)}} sont premiers entre eux, donc d'après le théorème de Gauss, on a $\num{\AAA} \mid \TmpPartieB$.\par + Il existe donc un entier $\KKK$ tel que $\TmpPartieB = \num{\AAA} \times \KKK$, ce qui donne + $\ifboolKV[eqdioph]{Cadres} + {\boxed{\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}} + {\YYY = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK} + $.\par + En remplaçant, on obtient : + % + \begin{align*} + \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \TmpPartieB \right) & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \big( \underbrace{\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}_{\mathclap{\YYY}} \mathcolor{\CouleurSolEDioph}{\AffCoeffDiophSign{\xinteval{-\CCC*\TmpV}}} \big) \\ + & \implies \num{\AAA} \times \left( \TmpPartieA \right) = \num{\xinteval{-\BBB}} \times \left( \num{\AAA}\KKK \right) \\ + & \implies \TmpPartieA = \num{\xinteval{-\BBB}}\KKK \\ + & \implies \ifboolKV[eqdioph]{Cadres} + {\boxed{\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}} + {\XXX = \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK} + \end{align*} + % + Ainsi, si $\XXX$ et $\YYY$ sont solutions de $(\LettreSolEDioph)$, alors il existe un entier $\KKK$ tel que ${\XXX=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK}$ et ${\YYY=\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK}$.\par\medskip + Réciproquement, soit $\KKK$ un entier quelconque : + % + \begin{align*} + \num{\AAA} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \right) + \AffCoeffDioph{\BBB} \times \left( \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right) & = \num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \cancel{\AffCoeffDioph{\AAA} \times \AffCoeffDioph{\xinteval{-\BBB}} \KKK} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}} + \cancel{\AffCoeffDioph{\BBB} \times \AffCoeffDioph{\AAA} \KKK} \\ + & = \underbrace{\num{\AAA} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpU}}} + \AffCoeffDioph{\BBB} \times \mathcolor{\CouleurSolEDioph}{\AffCoeffDioph{\xinteval{\CCC*\TmpV}}}}_{=\,\num{\CCC} \text{ d'après } ({\LettreSolEDioph}_0)} \\ + & = \num{\CCC} + \end{align*} + % + On en déduit que $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$ est solution de $(\LettreSolEDioph)$.\par\medskip + En conclusion, les solutions de $(E)$ sont donc les couples $\left(\mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpU}}} \AffCoeffDiophSign{\xinteval{-\BBB}}\KKK \mathpunct{}; \mathcolor{\CouleurSolEDioph}{\num{\xinteval{\CCC*\TmpV}}} \AffCoeffDiophSign{\AAA}\KKK \right)$, avec $\KKK$ un entier relatif. + }% + {% + Le PGCD de \num{\AA} et \num{\BB} ne divise pas \num{\CC}, donc l'équation $(\LettreSolEDioph)$ n'admet aucune solution. + }% +} + \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex index 93e0e091916..1758c015fdf 100644 --- a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex +++ b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-geom.tex @@ -135,5 +135,493 @@ mainlevee/.default={5mm et 0.6pt} } +%%Equations Cartésiennes + Affichages coordonnées +\RequirePackage{nicematrix} +\NewDocumentCommand\AffCoeffSgn{ s O{} m m D<>{} }{% + \IfStrEq{#5}{}%si argument vide, on convertit en fraction + {% + \xintifboolexpr{\xinteval{#3} == 0}% + {}%on n'affiche rien si le coeff est nul + {%sinon on teste >0 puis else + \xintifboolexpr{\xinteval{#3} > 0}% + {% + \IfBooleanTF{#1}{}{+}% + \xintifboolexpr{\xinteval{#3} == 1}% + {#4}% + {\ConversionFraction[#2]{#3}#4}% + }% + {% + \xintifboolexpr{\xinteval{#3} == -1}% + {-#4\relax}% + {\ConversionFraction[#2]{#3}#4}% + }% + }% + }% + %sinon on met en brut + {% + #3#4 + }% +} + +\NewDocumentCommand\AffCoeffSgnSimpl{ s O{} m D<>{} }{% + \IfStrEq{#4}{}%si argument vide, on convertit en fraction + {% + \xintifboolexpr{\xinteval{#3} == 0}% + {}%on n'affiche rien si le coeff est nul + {%sinon on teste >0 puis else + \xintifboolexpr{\xinteval{#3} > 0}% + {% + \IfBooleanTF{#1}{}{+}% + \xintifboolexpr{\xinteval{#3} == 1}% + {#3}% + {+\ConversionFraction[#2]{#3}}% + }% + {% + \xintifboolexpr{\xinteval{#3} == -1}% + {#3\relax}% + {\ConversionFraction[#2]{#3}}% + } % + }% + }% + %sinon on met en brut + {% + #3 + }% +} + +\defKV[eqcartplan]{% + OptionCoeffs=\def\eqcartplformat{#1},% + Facteur=\def\eqcartplfact{#1} +} + +\setKVdefault[eqcartplan]{% + OptionCoeffs={d},% + SimplifCoeffs=false,% + Facteur=1 +} + +\NewDocumentCommand\TrouveEqCartPlan{ O{} r() r() d() }{%test commande générique avec VP ou PPP ou PVV + \restoreKV[eqcartplan]% revenir au valeurs par défaut + \setKV[eqcartplan]{#1}% lit les arguments optionnels + \IfNoValueTF{#4}%c'est Vect+Point + {% + \setsepchar{;}\readlist*\CoordVecNorm{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVecNorm[1]\vecnx% + \itemtomacro\CoordVecNorm[2]\vecny% + \itemtomacro\CoordVecNorm[3]\vecnz% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + \itemtomacro\CoordPt[3]\zpta% + %calculs + \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny)+(\zpta)*(\vecnz))}% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\vecnz}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\vecnz)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\vecnz},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{(\vecnx)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{(\vecny)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{(\vecnz)*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\vecnx}{x} \AffCoeffSgn[\eqcartplformat]{\vecny}{y} \AffCoeffSgn[\eqcartplformat]{\vecnz}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }%sinon c'est Point+Point+Point ou vectdir+vectdir+point + {% + \IfSubStr{#2}{,}%c'est point+point+point + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \setsepchar{,}\readlist*\CoordPtC{#4}% + \itemtomacro\CoordPtA[1]\ptxa% + \itemtomacro\CoordPtA[2]\ptya% + \itemtomacro\CoordPtA[3]\ptza% + \itemtomacro\CoordPtB[1]\ptxb% + \itemtomacro\CoordPtB[2]\ptyb% + \itemtomacro\CoordPtB[3]\ptzb% + \itemtomacro\CoordPtC[1]\ptxc% + \itemtomacro\CoordPtC[2]\ptyc% + \itemtomacro\CoordPtC[3]\ptzc% + %calculs + \xdef\vecxab{(\ptxb-\ptxa)}% + \xdef\vecyab{(\ptyb-\ptya)}% + \xdef\veczab{(\ptzb-\ptza)}% + \xdef\vecxac{(\ptxc-\ptxa)}% + \xdef\vecyac{(\ptyc-\ptya)}% + \xdef\veczac{(\ptzc-\ptza)}% + %coeffs a/b/c + \xdef\coeffa{(\vecyab*\veczac-\veczab*\vecyac)}% + \xdef\coeffb{(\vecxac*\veczab-\vecxab*\veczac)}% + \xdef\coeffc{(\vecxab*\vecyac-\vecxac*\vecyab)}% + %coeffd + \xdef\coeffd{(-(\ptxa)*\vecyab*\veczac-(\ptza)*\vecxab*\vecyac-(\ptya)*\vecxac*\veczab+(\ptza)*\vecyab*\vecxac+(\ptxa)*\veczab*\vecyac+(\ptya)*\vecxab*\veczac)}% + %pour simplifier + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }% + {% + \setsepchar{;}\readlist*\CoordVecA{#2}% + \setsepchar{;}\readlist*\CoordVecB{#3}% + \setsepchar{,}\readlist*\CoordPtC{#4}% + \itemtomacro\CoordVecA[1]\vecxab% + \itemtomacro\CoordVecA[2]\vecyab% + \itemtomacro\CoordVecA[3]\veczab% + \itemtomacro\CoordVecB[1]\vecxac% + \itemtomacro\CoordVecB[2]\vecyac% + \itemtomacro\CoordVecB[3]\veczac% + \itemtomacro\CoordPtC[1]\ptxc% + \itemtomacro\CoordPtC[2]\ptyc% + \itemtomacro\CoordPtC[3]\ptzc% + %coeff a/b/c + \xdef\coeffa{((\vecyab)*(\veczac)-(\vecyac)*(\veczab))}% + \xdef\coeffb{((\veczab)*(\vecxac)-(\veczac)*(\vecxab))}% + \xdef\coeffc{((\vecxab)*(\vecyac)-(\vecxac)*(\vecyab))}% + %coeffd + \xdef\coeffd{-((\ptxc)*\coeffa+(\ptyc)*\coeffb+(\ptzc)*\coeffc)}% + %pour simplifier + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\coeffa}}},\xintDenominator{\xintIrr{\xinteval{\coeffb}}},\xintDenominator{\xintIrr{\xinteval{\coeffc}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\coeffa)}*\xinteval{isint(\coeffb)}*\xinteval{isint(\coeffc)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\coeffa},\xinteval{\coeffb},\xinteval{\coeffc},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartplan]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd*(\eqcartplfact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartplformat]{\coeffa}{x} \AffCoeffSgn[\eqcartplformat]{\coeffb}{y} \AffCoeffSgn[\eqcartplformat]{\coeffc}{z} \AffCoeffSgnSimpl*[\eqcartplformat]{\coeffd} = 0% + }% + }% + }% +} + +\defKV[eqcartdroite]{% + OptionCoeffs=\def\eqcartdteformat{#1},% + Facteur=\def\eqcartdtefact{#1} +} + +\setKVdefault[eqcartdroite]{% + OptionCoeffs={d},% + SimplifCoeffs=false,% + VectDirecteur=false,% + Facteur=1 +} + +\NewDocumentCommand\TrouveEqCartDroite{ O{} r() r() }{%vect/point ou point/point + \restoreKV[eqcartdroite]% revenir au valeurs par défaut + \setKV[eqcartdroite]{#1}% lit les arguments optionnels + %on teste si c'est point/point + \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point + {% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVec[1]\vecnx% + \itemtomacro\CoordVec[2]\vecny% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + %calculs + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}% + }% + {% + \xdef\coeffd{-((\xpta)*(\vecnx)+(\ypta)*(\vecny))}% + }% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartdroite]{SimplifCoeffs}% + {% + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + }% + {% + \ifboolKV[eqcartdroite]{VectDirecteur}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{\vecnx}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{\vecnx}{x} \AffCoeffSgn[\eqcartdteformat]{\vecny}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + }% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xpta% + \itemtomacro\CoordPtA[2]\ypta% + \itemtomacro\CoordPtB[1]\xptb% + \itemtomacro\CoordPtB[2]\yptb% + \xdef\vecnx{((\xptb)-(\xpta))}% + \xdef\vecny{((\yptb)-(\ypta))}% + %calculs + \xdef\coeffd{((\xpta)*(\vecny)-(\ypta)*(\vecnx))}% + \xdef\PPCMDenom{\xinteval{lcm([\xintDenominator{\xintIrr{\xinteval{\vecnx}}},\xintDenominator{\xintIrr{\xinteval{\vecny}}},\xintDenominator{\xintIrr{\xinteval{\coeffd}}}])}}% + \xdef\PGCDsiEntiers{1}% + \xintifboolexpr{\xinteval{isint(\vecnx)}*\xinteval{isint(\vecny)}*\xinteval{isint(\coeffd)} == 1}%tous les coeffs sont entiers + {% + \xdef\PGCDsiEntiers{\xinteval{gcd([\xinteval{\vecnx},\xinteval{\vecny},\xinteval{\coeffd}])}}% + }% + {}% + %affichages + \ifboolKV[eqcartdroite]{SimplifCoeffs}% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd*(\eqcartdtefact)*\PPCMDenom/\PGCDsiEntiers} = 0% + }% + {% + \AffCoeffSgn*[\eqcartdteformat]{-(\vecny)}{x} \AffCoeffSgn[\eqcartdteformat]{(\vecnx)}{y} \AffCoeffSgnSimpl*[\eqcartdteformat]{\coeffd} = 0% + }% + }% +} + +\NewDocumentCommand\AffVecteur{ O{d} D<>{} r() }{% + \setsepchar{;}\readlist*\CoordVec{#3}% + \xintifboolexpr{\CoordVeclen == 2}% + {% + \IfSubStr{#1}{;}%si l'option est globale... + {% + \setsepchar{;}\readlist*\OptVec{#1}% + \itemtomacro\OptVec[1]\optvecx% + \itemtomacro\OptVec[2]\optvecy% + }% + {% + \xdef\optvecx{#1}\xdef\optvecy{#1}% + }% + \itemtomacro\CoordVec[1]\vecx% + \itemtomacro\CoordVec[2]\vecy% + \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \end{pNiceMatrix}% + }% + {}% + \xintifboolexpr{\CoordVeclen == 3}% + {% + \IfSubStr{#1}{;}%si l'option est globale... + {% + \setsepchar{;}\readlist*\OptVec{#1}% + \itemtomacro\OptVec[1]\optvecx% + \itemtomacro\OptVec[2]\optvecy% + \itemtomacro\OptVec[3]\optvecz% + }% + {% + \xdef\optvecx{#1}\xdef\optvecy{#1}\xdef\optvecz{#1}% + }% + \itemtomacro\CoordVec[1]\vecx% + \itemtomacro\CoordVec[2]\vecy% + \itemtomacro\CoordVec[3]\vecz% + \begin{pNiceMatrix}[#2] \ConversionFraction[\optvecx]{\vecx} \\ \ConversionFraction[\optvecy]{\vecy} \\ \ConversionFraction[\optvecz]{\vecz} \end{pNiceMatrix}% + }% + {}% +} + +\NewDocumentCommand\AffPoint{ O{d} r() }{% + \setsepchar{,} + \readlist*\CoordPt{#2}% + \xintifboolexpr{\CoordPtlen == 2}% + {% + \IfSubStr{#1}{,}%si l'option est globale... + {% + \setsepchar{,}\readlist*\OptPt{#1}% + \itemtomacro\OptPt[1]\optptx% + \itemtomacro\OptPt[2]\optpty% + }% + {% + \xdef\optptx{#1}\xdef\optpty{#1}% + }% + \itemtomacro\CoordPt[1]\ptx% + \itemtomacro\CoordPt[2]\pty% + \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} \right)% + }% + {}% + \xintifboolexpr{\CoordPtlen == 3}% + {% + \IfSubStr{#1}{,}%si l'option est globale... + {% + \setsepchar{,}\readlist*\OptPt{#1}% + \itemtomacro\OptPt[1]\optptx% + \itemtomacro\OptPt[2]\optpty% + \itemtomacro\OptPt[3]\optptz% + }% + {% + \xdef\optptx{#1}\xdef\optpty{#1}\xdef\optptz{#1}% + }% + \itemtomacro\CoordPt[1]\ptx% + \itemtomacro\CoordPt[2]\pty% + \itemtomacro\CoordPt[3]\ptz% + \left( \ConversionFraction[\optptx]{\ptx} ; \ConversionFraction[\optpty]{\pty} ; \ConversionFraction[\optptz]{\ptz} \right)% + }% + {}% +} + +%%Équation paramétrique de droite +\defKV[eqparamdroite]{% + OptionCoeffs=\def\eqparamdteformat{#1},% + Reel=\def\eqparamdtereel{#1} +} + +\setKVdefault[eqparamdroite]{% + OptionCoeffs={d},% + Reel=k,% + Aligne=false,% + Oppose=false,% + Rgras=false +} + +\NewDocumentCommand\AffVarDteParam{ m m }{% + \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0}}{}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{\AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}% + \restmp% +} + +\NewDocumentCommand\AffVarDteParamAlign{ m m }{% + \xdef\restmp{\ConversionFraction[\eqparamdteformat]{#1} & \AffCoeffSgn[\eqcartdteformat]{#2}{\eqparamdtereel}}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} == 0}{\xdef\restmp{0 & }}{}% + \xintifboolexpr{\xinteval{#1} == 0 'and' \xinteval{#2} != 0}{\xdef\restmp{ & \AffCoeffSgn*[\eqcartdteformat]{#2}{\eqparamdtereel}}}{}% + \restmp% +} + +\NewDocumentCommand\TrouveEqParamDroite{ O{} r() r() }{%vect/point ou point/point + \restoreKV[eqparamdroite]% revenir au valeurs par défaut + \setKV[eqparamdroite]{#1}% lit les arguments optionnels + %on teste si c'est point/point + \IfSubStr{#2}{;}%c'est vecteur+point, sinon c'est point+point + {% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPt{#3}% + \itemtomacro\CoordVec[1]\vecdirx% + \itemtomacro\CoordVec[2]\vecdiry% + \itemtomacro\CoordVec[3]\vecdirz% + \itemtomacro\CoordPt[1]\xpta% + \itemtomacro\CoordPt[2]\ypta% + \itemtomacro\CoordPt[3]\zpta% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xpta% + \itemtomacro\CoordPtA[2]\ypta% + \itemtomacro\CoordPtA[2]\zpta% + \itemtomacro\CoordPtB[1]\xptb% + \itemtomacro\CoordPtB[2]\yptb% + \itemtomacro\CoordPtB[2]\zptb% + \ifboolKV[eqparamdroite]{Oppose}% + {% + \xdef\vecdirx{((\xpta)-(\xptb))}% + \xdef\vecdiry{((\ypta)-(\yptb))}% + \xdef\vecdirz{((\zpta)-(\zptb))}% + }% + {% + \xdef\vecdirx{((\xptb)-(\xpta))}% + \xdef\vecdiry{((\yptb)-(\ypta))}% + \xdef\vecdirz{((\zptb)-(\zpta))}% + }% + }% + \ifboolKV[eqparamdroite]{Aligne}% + {% + \left\lbrace\begin{array}{@{\,}l@{\;=\;}l@{\;}r} + x & \AffVarDteParamAlign{\xpta}{\vecdirx} \\ + y & \AffVarDteParamAlign{\ypta}{\vecdiry} \\ + z & \AffVarDteParamAlign{\zpta}{\vecdirz} \\ + \end{array}\right. + \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}% + }% + {% + \begin{dcases} + x = \AffVarDteParam{\xpta}{\vecdirx} \\ + y = \AffVarDteParam{\ypta}{\vecdiry} \\ + z = \AffVarDteParam{\zpta}{\vecdirz} \\ + \end{dcases} + \text{, } \eqparamdtereel \in \ifboolKV[eqparamdroite]{Rgras}{\textbf{R}}{\mathbb{R}}% + }% +} + +\NewDocumentCommand\TrouveDistancePtPlan{ r() r() d() }{%pt+vect+pt + \IfNoValueTF{#3}%c'est Point + Equation // sinon c'est point + vectnorm + point + {% + \StrDel{#2}{=0}[\tmpeq]% + %%\tmpeq \text{ et }% + \setsepchar{,}\readlist*\CoordPtA{#1}% + \itemtomacro\CoordPtA[1]\xa% + \itemtomacro\CoordPtA[2]\ya% + \itemtomacro\CoordPtA[3]\za%. + %calcul de d + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffd]% + \StrSubstitute{\tmpcoeffd}{y}{(0)}[\tmpcoeffd]% + \StrSubstitute{\tmpcoeffd}{z}{(0)}[\tmpcoeffd]% + \xdef\coeffd{\tmpcoeffd}% + %%d=\xinteval{\coeffd} \text{ et }% + %calcul de a + \StrSubstitute{\tmpeq}{x}{(1)}[\tmpcoeffa]% + \StrSubstitute{\tmpcoeffa}{y}{(0)}[\tmpcoeffa]% + \StrSubstitute{\tmpcoeffa}{z}{(0)}[\tmpcoeffa]% + \xdef\vectx{(\tmpcoeffa)-(\coeffd)}% + %%a=\xinteval{\vectx} \text{ et }% + %calcul de b + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffb]% + \StrSubstitute{\tmpcoeffb}{y}{(1)}[\tmpcoeffb]% + \StrSubstitute{\tmpcoeffb}{z}{(0)}[\tmpcoeffb]% + \xdef\vecty{(\tmpcoeffb)-(\coeffd)}% + %%b=\xinteval{\vecty} \text{ et }% + %calcul de c + \StrSubstitute{\tmpeq}{x}{(0)}[\tmpcoeffc]% + \StrSubstitute{\tmpcoeffc}{y}{(0)}[\tmpcoeffc]% + \StrSubstitute{\tmpcoeffc}{z}{(1)}[\tmpcoeffc]% + \xdef\vectz{(\tmpcoeffc)-(\coeffd)}% + %c=\xinteval{\vectz} \text{ et }% + %calcul du numérateur + \StrSubstitute{\tmpeq}{x}{(\xa)}[\resnum]% + \StrSubstitute{\resnum}{y}{(\ya)}[\resnum]% + \StrSubstitute{\resnum}{z}{(\za)}[\resnum]% + %%\text{num}=\xinteval{\resnum} \text{ et } + %le carré + \xdef\restmp{(\resnum)**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}% + %%\text{resultatcarré}=\xinteval{\restmp} \text{ et }% + }% + {% + \setsepchar{,}\readlist*\CoordPtA{#1}% + \setsepchar{;}\readlist*\CoordVec{#2}% + \setsepchar{,}\readlist*\CoordPtB{#3}% + \itemtomacro\CoordPtA[1]\xa% + \itemtomacro\CoordPtA[2]\ya% + \itemtomacro\CoordPtA[3]\za% + \itemtomacro\CoordVec[1]\vectx% + \itemtomacro\CoordVec[2]\vecty% + \itemtomacro\CoordVec[3]\vectz% + \itemtomacro\CoordPtB[1]\xb% + \itemtomacro\CoordPtB[2]\yb% + \itemtomacro\CoordPtB[3]\zb% + \def\restmp{((\vectx)*((\xb)-(\xa))+(\vecty)*((\yb)-(\ya))+(\vectz)*((\zb)-(\za)))**2/((\vectx)**2+(\vecty)**2+(\vectz)**2)}% + }% + \SimplificationRacine{\restmp}% +} \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex index 270e99e3cc4..2d7e0716e63 100644 --- a/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex +++ b/Master/texmf-dist/tex/latex/proflycee/proflycee-tools-probas.tex @@ -14,53 +14,53 @@ \xintFloatToDecimal{\xintfloateval{binomial(#1,#3)*#2^#3*(1-#2)^(#1-#3)}} } \newcommand\CalcBinomC[4]{%npab - \def\BorneInf{#3}\def\BorneSup{#4} + \def\BorneInf{#3}\def\BorneSup{#4}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneSup{#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(binomial(#1,i)*#2^i*(1-#2)^(#1-i), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcGeomP[2]{%pk - \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}} + \xintFloatToDecimal{\xintfloateval{(1-#1)^(#2-1)*(#1)}}% } \newcommand\CalcGeomC[3]{%pab - \def\BorneInf{#2}\def\BorneSup{#3} + \def\BorneInf{#2}\def\BorneSup{#3}% \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{1}} - {} + {\def\BorneInf{1}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}} - {} - \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{\fpeval{trunc(1/#1*10,0)}}}% + {}% + \xintFloatToDecimal{\xintfloateval{add((1-#1)^(i-1)*(#1), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcHypergeomP[4]{%Nnmk - \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}} + \xintFloatToDecimal{\xintfloateval{binomial(#3,#4)*binomial(#1-#3,#2-#4)/binomial(#1,#2)}}% } \newcommand\CalcHypergeomC[5]{%Nnmab - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(binomial(#3,i)*binomial(#1-#3,#2-i)/binomial(#1,#2), i=\BorneInf..\BorneSup)}}% } \newcommand\CalcPoissP[2]{%lk - \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}} + \xintFloatToDecimal{\xintfloateval{exp(-#1)*#1^#2/factorial(#2)}}% } \newcommand\CalcPoissC[3]{%lab - \def\BorneInf{#2}\def\BorneSup{#3} + \def\BorneInf{#2}\def\BorneSup{#3}% \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{10*#1}} - {} - \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}} + {\def\BorneSup{10*#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{add(exp(-#1)*#1^i/factorial(i), i=\BorneInf..\BorneSup)}}% } %utiles idée de https://tex.stackexchange.com/questions/355574/im-searching-for-a-table-with-cdf-of-standard-normal-distribution \xintdeffloatvar a_1,a_2,a_3,a_4,a_5,a_6 := @@ -72,170 +72,170 @@ \newcommand\CalcNormC[4]{%msab %def des bornes de l'intervalle suivant l'absence de a ou de b... - \def\BorneInf{#3}\def\BorneSup{#4} + \def\BorneInf{#3}\def\BorneSup{#4}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneInf{#4-10*#2}} - {} + {\def\BorneInf{#4-10*#2}}% + {}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneSup{#3+10*#2}} - {} - \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}} + {\def\BorneSup{#3+10*#2}}% + {}% + \xintFloatToDecimal{\xintfloateval{Phi((\BorneSup-#1)/#2)-Phi((\BorneInf-#1)/#2)}}% } %calculs "simples" fiabilite \newcommand\CalcExpoC[3]{%lab \def\BorneInf{#2}\def\BorneSup{#3} \ifthenelse{\equal{#2}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#3}{*}}% - {\def\BorneSup{100/#1}} - {} - \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}} + {\def\BorneSup{100/#1}}% + {}% + \xintFloatToDecimal{\xintfloateval{exp(-#1*\BorneInf)-exp(-#1*\BorneSup)}}% } %calculs formatés \NewDocumentCommand{\BinomP}{ s O{3} m m m }{%*=sci,2=prec,3=n,4=p,5=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#3,#5)*#4^#5*(1-#4)^(#3-#5),#2)}}}% + }% } \NewDocumentCommand{\BinomC}{ s O{3} m m m m }{%*=sci,2=prec,3=n,4=p,5=a,6=b - \def\BorneInf{#5}\def\BorneSup{#6} + \def\BorneInf{#5}\def\BorneSup{#6}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneSup{#3}} - {} + {\def\BorneSup{#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#3,i)*#4^i*(1-#4)^(#3-i), i=\BorneInf..\BorneSup),#2)}}}% + }% } \NewDocumentCommand{\GeomP}{ s O{3} m m }{%*=sci,2=prec,3=p,4=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round((1-#3)^(#4-1)*(#3),#2)}}}% + }% } \NewDocumentCommand{\GeomC}{ s O{3} m m m }{%*=sci,2=prec,3=p,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{1}} - {} + {\def\BorneInf{1}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}} - {} + {\def\BorneSup{\fpeval{trunc(1/#3*10,0)}}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}} + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add((1-#3)^(i-1)*(#3), i=\BorneInf..\BorneSup),#2)}}}% } } \NewDocumentCommand{\HypergeomP}{ s O{3} m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}} + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(binomial(#5,#6)*binomial(#3-#5,#4-#6)/binomial(#3,#4),#2)}}}% } } \NewDocumentCommand{\HypergeomC}{ s O{3} m m m m m }{%*=sci,2=prec,3=N,4=n,5=m,6=a,7=b - \def\BorneInf{#6}\def\BorneSup{#7} + \def\BorneInf{#6}\def\BorneSup{#7}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#7}{*}}% - {\def\BorneSup{#3}} - {} + {\def\BorneSup{#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}}% }% {% \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(binomial(#5,i)*binomial(#3-#5,#4-i)/binomial(#3,#4), i=\BorneInf..\BorneSup),#2)}}} - } + }% } \NewDocumentCommand{\PoissonP}{ s O{3} m m }{%*=sci,2=prec,3=lbda,4=k \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3)*#3^#4/factorial(#4),#2)}}}% + }% } \NewDocumentCommand{\PoissonC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{10*#3}} - {} + {\def\BorneSup{10*#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(add(exp(-#3)*#3^i/factorial(i), i=\BorneInf..\BorneSup),#2)}}}% + }% } \NewDocumentCommand{\NormaleC}{ s O{3} m m m m }{% %*=ing,2=prec,3=mu,4=sigma,5=a,6=b %def des bornes de l'intervalle suivant l'absence de a ou de b... - \def\BorneInf{#5}\def\BorneSup{#6} + \def\BorneInf{#5}\def\BorneSup{#6}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneInf{#6-10*#4}} - {} + {\def\BorneInf{#6-10*#4}}% + {}% \ifthenelse{\equal{#6}{*}}% - {\def\BorneSup{#5+10*#4}} - {} + {\def\BorneSup{#5+10*#4}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}% }% {% - \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}} - } + \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintfloateval{round(Phi((\BorneSup-#3)/#4)-Phi((\BorneInf-#3)/#4),#2)}}}% + }% } \NewDocumentCommand{\ExpoC}{ s O{3} m m m }{%*=ing,2=prec,3=lbda,4=a,5=b - \def\BorneInf{#4}\def\BorneSup{#5} + \def\BorneInf{#4}\def\BorneSup{#5}% \ifthenelse{\equal{#4}{*}}% - {\def\BorneInf{0}} - {} + {\def\BorneInf{0}}% + {}% \ifthenelse{\equal{#5}{*}}% - {\def\BorneSup{100/#3}} - {} + {\def\BorneSup{100/#3}}% + {}% \IfBooleanTF{#1}% {% - \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}} + \num[exponent-mode=scientific]{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}% }% {% \num[minimum-decimal-digits=#2]{\xintFloatToDecimal{\xintFloatToDecimal{\xintfloateval{round(exp(-#3*\BorneInf)-exp(-#3*\BorneSup),#2)}}}} - } + }% } %%------ARBRESPROBAS |