diff options
Diffstat (limited to 'Master/texmf-dist/doc/latex/tkz-base/latex/TKZdoc-base-tools.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/tkz-base/latex/TKZdoc-base-tools.tex | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/tkz-base/latex/TKZdoc-base-tools.tex b/Master/texmf-dist/doc/latex/tkz-base/latex/TKZdoc-base-tools.tex new file mode 100644 index 00000000000..6a92b89bf2b --- /dev/null +++ b/Master/texmf-dist/doc/latex/tkz-base/latex/TKZdoc-base-tools.tex @@ -0,0 +1,393 @@ +\section{Outils divers} + +\subsection{Dupliquer un segment} + +Il s'agit de construire un segment sur une demi-droite donnée de même longueur qu'un segment donné. + +\begin{NewMacroBox}{tkzDuplicateSegment}{\parg{pt1,pt2}\parg{pt3,pt4}\marg{pt5}} +Il s'agit de créer un segment sur une demi-droite donnée de même longueur qu'un segment donné . Il s'agit en fait de la définition d'un point. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(pt1,pt2)(pt3,pt4)\{pt5\}} {\tkzcname{tkzDuplicateLen}(A,B)(E,F)\{C\}}{AC=EF et $C \in [AB)$} \\ +\bottomrule +\end{tabular} + +\medskip +La macro \tkzcname{tkzDuplicateLength} est identique à celle-ci. +\end{NewMacroBox} + +\begin{tkzexample}[latex=6cm,small] + \begin{tikzpicture} + \tkzDefPoint(0,0){A} + \tkzDefPoint(2,-3){B} + \tkzDefPoint(2,5){C} + \tkzDrawSegments[red](A,B A,C) + \tkzDuplicateSegment(A,B)(A,C) \tkzGetPoint{D} + \tkzDrawSegment[green](A,D) + \tkzDrawPoints[color=red](A,B,C,D) + \tkzLabelPoints[above right=3pt](A,B,C,D) + \end{tikzpicture} +\end{tkzexample} + +\subsubsection{Proportion d'or avec \tkzcname{tkzDuplicateSegment}} + + \begin{tkzexample}[latex=7cm,small] +\begin{tikzpicture}[rotate=-90,scale=.75] + \tkzInit[xmax=10,ymax=10] + \tkzClip[space=1] + \tkzDefPoint(0,0){A} + \tkzDefPoint(10,0){B} + \tkzDefMidPoint(A,B) \tkzGetPoint{I} + \tkzDefPointWith[orthogonal,K=-.75](B,A) + \tkzGetPoint{C} + \tkzInterLC(B,C)(B,I) \tkzGetSecondPoint{D} + \tkzDuplicateSegment(B,D)(D,A) \tkzGetPoint{E} + \tkzInterLC(A,B)(A,E) \tkzGetPoints{N}{M} + \tkzDrawArc[delta=10](D,E)(B) + \tkzDrawArc[delta=10](A,M)(E) + \tkzDrawLines(A,B B,C A,D) + \tkzDrawArc[delta=10](B,D)(I) + \tkzDrawPoints(A,B,D,C,M,I,N) + \tkzLabelPoints(A,B,D,C,M,I,N) +\end{tikzpicture} + \end{tkzexample} +% <--------------------------------------------------------------------> + % About Angles +% <--------------------------------------------------------------------> + \subsection{Déterminer une pente} +Il s'agit de déterminer si elle existe, la pente d'une droite définie par deux points. Aucune vérification de l'existence n'est faite. + +\begin{NewMacroBox}{tkzFindSlope}{\parg{pt1,pt2}\marg{name of macro}} +Le résultat est stocké dans une macro. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(pt1,pt2){pt3}} {\tkzcname{tkzFindSlope}(A,B)\{slope\}}{\tkzcname{slope} donnera le résultat de $\frac{y_B-y_A}{x_B-x_A}$} \\ +\bottomrule +\end{tabular} + +\medskip +\tkzHandBomb\ Attention à ne pas avoir $x_B=x_A$ +\end{NewMacroBox} + + +\begin{tkzexample}[latex=7cm,small] +\begin{tikzpicture}[scale=1.5] + \tkzInit[xmax=4,ymax=5]\tkzGrid[sub] + \tkzDefPoint(1,2){A} \tkzDefPoint(3,4){B} + \tkzDefPoint(3,2){C} \tkzDefPoint(3,1){D} + \tkzDrawSegments(A,B A,C A,D) + \tkzDrawPoints[color=red](A,B,C,D) + \tkzLabelPoints(A,B,C,D) + \tkzFindSlope(A,B){SAB} \tkzFindSlope(A,C){SAC} + \tkzFindSlope(A,D){SAD} + \pgfkeys{/pgf/number format/.cd,fixed,precision=2} + \tkzText[fill=Gold!50,draw=brown](1,4)% + {La pente de (AB) est : $\pgfmathprintnumber{\SAB}$} + \tkzText[fill=Gold!50,draw=brown](1,3.5)% + {La pente de (AC) est : $\pgfmathprintnumber{\SAC}$} + \tkzText[fill=Gold!50,draw=brown](1,3)% + {La pente de (AD) est : $\pgfmathprintnumber{\SAD}$} +\end{tikzpicture} +\end{tkzexample} + +\subsection{Angle formé par une droite avec l'axe horizontal} +Beaucoup plus intéressante que la précédente. Le résultat est compris entre -180 degrés et +180 degrés. + +\begin{NewMacroBox}{tkzFindSlopeAngle}{\parg{pt1,pt2}} +Le résultat est stocké dans une macro \tkzcname{tkzAngleResult}. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(pt1,pt2)} {\tkzcname{tkzFindSlopeAngle}(A,B)}{\tkzcname{tkzGetAngle} peut récupèrer le résultat} +\bottomrule +\end{tabular} + +\medskip +{Si la récupération n'est pas nécessaire, il est possible d'utiliser \tkzcname{tkzAngleResult}} +\end{NewMacroBox} + + +\subsubsection{Exemple d'utilisation de \tkzcname{tkzFindSlopeAngle}} +Voici une autre version de la construction d'une médiatrice + +\begin{tkzexample}[latex=6cm,small] +\begin{tikzpicture} + \tkzInit + \tkzDefPoint(0,0){A} \tkzDefPoint(3,2){B} + \tkzDefLine[mediator](A,B) \tkzGetPoints{I}{J} + \tkzCalcLength[cm](A,B) \tkzGetLength{dAB} + \tkzFindSlopeAngle(A,B) \tkzGetAngle{tkzangle} + \begin{scope}[rotate=\tkzangle] + \tikzset{arc/.style={color=gray,delta=10}} + \tkzDrawArc[R,arc](B,3/4*\dAB)(120,240) + \tkzDrawArc[R,arc](A,3/4*\dAB)(-45,60) + \tkzDrawLine(I,J) \tkzDrawSegment(A,B) + \end{scope} + \tkzDrawPoints(A,B,I,J) \tkzLabelPoints(A,B) + \tkzLabelPoints[right](I,J) +\end{tikzpicture} +\end{tkzexample} + +\subsection{Récupérer un angle} +Dans l'exemple précédent, j'ai utilisé la macro \tkzcname{tkzGetAngle} qui permet de récupérer un angle. + +\begin{NewMacroBox}{tkzGetAngle}{\marg{name of macro}} +Cette macro récupère \tkzcname{tkzAngleResult} et stocke le résultat dans une nouvelle macro. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{name of macro} {\tkzcname{tkzGetAngle}\{ang\}}{\tkzcname{ang} contient la valeur de l'angle.} +\end{tabular} +\end{NewMacroBox} + +\subsection{Exemple d'utilisation de \tkzcname{tkzGetAngle}} + + Il s'agit ici que $(AB)$ soit la bissectrice de $\widehat{CAD}$, tel que la pente $AD$ soit nulle. On récupère la pente de $(AB)$ puis on effectue deux rotations. + + +\begin{tkzexample}[vbox,small] +\begin{tikzpicture} + \tkzInit + \tkzDefPoint(1,5){A} \tkzDefPoint(5,2){B} + \tkzDrawSegment(A,B) + \tkzFindSlopeAngle(A,B)\tkzGetAngle{tkzang} + \tkzDefPointBy[rotation= center A angle \tkzang ](B) + \tkzGetPoint{C} + \tkzDefPointBy[rotation= center A angle -\tkzang ](B) + \tkzGetPoint{D} + \tkzCompass[length=1,dashed,color=red](A,C) + \tkzCompass[delta=10,brown](B,C) + \tkzDrawPoints(A,B,C,D) + \tkzLabelPoints(B,C,D) + \tkzLabelPoints[above left](A) + \tkzDrawSegments[style=dashed,color=orange!30](A,C A,D) +\end{tikzpicture} +\end{tkzexample} + +\subsection{Angle formé par trois points} + + +\begin{NewMacroBox}{tkzFindAngle}{\parg{pt1,pt2,pt3}} +Le résultat est stocké dans une macro \tkzcname{tkzAngleResult}. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(pt1,pt2,pt3)} {\tkzcname{tkzFindAngle}(A,B,C)}{\tkzcname{tkzAngleResult} donne l'angle ($\overrightarrow{BA},\overrightarrow{BC}$)} +\bottomrule +\end{tabular} + +\medskip +Le résultat est compris entre -180 degrés et +180 degrés. pt2 est le sommet et \tkzcname{tkzGetAngle} peut récupérer l'angle. +\end{NewMacroBox} + +\subsection{Exemple d'utilisation de \tkzcname{tkzFindAngle} } + +\begin{tkzexample}[vbox,small] +\begin{tikzpicture} + \tkzInit[xmin=-1,ymin=-1,xmax=7,ymax=7] + \tkzClip + \tkzDefPoint (0,0){O} \tkzDefPoint (6,0){A} + \tkzDefPoint (5,5){B} \tkzDefPoint (3,4){M} + \tkzFindAngle (A,O,M) \tkzGetAngle{an} + \tkzDefPointBy[rotation=center O angle \an](A) + \tkzGetPoint{C} + \tkzDrawSector[fill = blue!50,opacity=.5](O,A)(C) + \tkzFindAngle(M,B,A) \tkzGetAngle{am} + \tkzDefPointBy[rotation = center O angle \am](A) + \tkzGetPoint{D} + \tkzDrawSector[fill = red!50,opacity = .5](O,A)(D) + \tkzDrawPoints(O,A,B,M,C,D) + \tkzLabelPoints(O,A,B,M,C,D) + \edef\an{\fpeval{round(\an,2)}}\edef\am{\fpeval{round(\am,2)}} + \tkzDrawSegments(M,B B,A) + \tkzText(4,2){$\widehat{AOC}=\widehat{AOM}=\an^{\circ}$} + \tkzText(1,4){$\widehat{AOD}=\widehat{MBA}=\am^{\circ}$} +\end{tikzpicture} +\end{tkzexample} + +\subsection{Longueur d'un segment \tkzcname{tkzCalcLength}} +Il existe dans \TIKZ\ une option \tkzname{veclen}. Cette option + permet de calculer AB si A et B sont deux points. + +Le seul problème pour moi est que la version de \TIKZ\ n'est pas assez précise dans certains cas particuliers. Ma version utilise le package \tkzNamePack{xfp} et est plus lente, mais plus précise + +\begin{NewMacroBox}{tkzCalcLength}{\oarg{local options}\parg{pt1,pt2}\marg{name of macro}} +Le résultat est stocké dans une macro. + +\medskip +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(pt1,pt2)\{name of macro\}} {\tkzcname{tkzCalcLength}(A,B)\{dAB\}}{\tkzcname{dAB} donne $AB$ en pt} +\bottomrule +\end{tabular} + +\medskip + +Une seule option + +\begin{tabular}{lll} + +\toprule + options & défaut & exemple \\ +\midrule +\TOline{cm} {false}{\tkzcname{tkzCalcLength}[cm](A,B)\{dAB\} \tkzcname{dAB} donne AB en cm} +\end{tabular} +\end{NewMacroBox} + +\subsubsection{Construction d'un carré au compas} + +\begin{tkzexample}[latex=7cm,small] +\begin{tikzpicture}[scale=1] + \tkzDefPoint(0,0){A} \tkzDefPoint(4,0){B} + \tkzDrawLine[add= .6 and .2](A,B) + \tkzCalcLength[cm](A,B)\tkzGetLength{dAB} + \tkzDefLine[perpendicular=through A](A,B) + \tkzDrawLine(A,tkzPointResult) \tkzGetPoint{D} + \tkzShowLine[orthogonal=through A,gap=2](A,B) + \tkzMarkRightAngle(B,A,D) + \tkzVecKOrth[-1](B,A)\tkzGetPoint{C} + \tkzCompasss(A,D D,C) + \tkzDrawArc[R](B,\dAB)(80,110) + \tkzDrawPoints(A,B,C,D) + \tkzDrawSegments[color=gray,style=dashed](B,C C,D) + \tkzLabelPoints(A,B,C,D) +\end{tikzpicture} +\end{tkzexample} + +\subsection{Transformation de pt en cm ou de cm en pt} +Pas sûr que cela soit nécessaire et il ne s'agit que d'une division par 28,45274 et d'un multiplication par ce même nombre. Les macros sont : + +\begin{NewMacroBox}{tkzpttocm}{\parg{nombre}\marg{name of macro}} +Le résultat est stocké dans une macro. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(nombre){name of macro}} {\tkzcname{tkzpttocm}(120)\{len\}}{\tkzcname{len} donne un nombre de tkzname{cm}} +\bottomrule +\end{tabular} + +\medskip +Il faudra utiliser \tkzcname{len} accompagné de \tkzname{cm} +\end{NewMacroBox} + +\subsection{changement d'unité} +\begin{NewMacroBox}{tkzcmtopt}{\parg{nombre}\marg{name of macro}} +Le résultat est stocké dans une macro. + +\medskip + +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(nombre)\{name of macro\}}{\tkzcname{tkzcmtopt}(5)\{len\}}{\tkzcname{len} longueur en \tkzname{pts}} +\bottomrule +\end{tabular} + +\medskip +\noindent{Le résultat s'utilise avec \tkzcname{len}\tkzname{pt}} +\end{NewMacroBox} + +\subsubsection{Exemple} +La macro \tkzcname{tkzDefCircle[radius](A,B)} définit le rayon que l'on récupère avec \tkzcname{tkzGetLength}, mais ce résultat est en \tkzname{pt}. + +\begin{tkzexample}[latex=6cm,small] +\begin{tikzpicture}[scale=.5] + \tkzDefPoint(0,0){A} + \tkzDefPoint(3,-4){B} + \tkzDefCircle[through](A,B) + \tkzGetLength{rABpt} + \tkzpttocm(\rABpt){rABcm} + \tkzDrawCircle(A,B) + \tkzDrawPoints(A,B) + \tkzLabelPoints(A,B) + \tkzDrawSegment[dashed](A,B) + \tkzLabelSegment(A,B){% + $\pgfmathprintnumber{\rABcm}$} +\end{tikzpicture} +\end{tkzexample} + +%<--------------------------------------------------------------------------–> +% Coordonnées d'un point +% result in #2x et #2y #1 est le point et on récupère ses coordonnées +% usage soit A un point \tkzGetPointCoord(A){V} alors \Vx = xA et \Vy = yA +% en cm +% tkzGetPointCoord avec [#1] cm ou bien pt ?? todo +%<--------------------------------------------------------------------------–> +\begin{NewMacroBox}{tkzGetPointCoord}{\parg{$A$}\marg{name of macro}} +Stocke dans deux macros les coordonnées d'un point + +\medskip +\begin{tabular}{lll} +\toprule +arguments & exemple & explication \\ +\midrule +\TAline{(point)\{name of macro\}} {\tkzcname{tkzGetPointCoord}(A)\{A\}}{\tkzcname{Ax} et \tkzcname{Ay} donnent les coordonnées de $A$} + +\end{tabular} + +\medskip +Si le nom de la macro est \tkzname{p}, alors \tkzcname{px} et \tkzcname{py} donnent les coordonnées du point choisi avec le cm comme. +\end{NewMacroBox} + +\subsubsection{Transfert de coordonnées avec \tkzcname{tkzGetPointCoord}} + +\begin{tkzexample}[width=8cm,small] +\begin{tikzpicture} + \tkzInit[xmax=5,ymax=3] + \tkzGrid[sub,orange] + \tkzAxeXY + \tkzDefPoint(1,0){A} + \tkzDefPoint(4,2){B} + \tkzGetPointCoord(A){a} + \tkzGetPointCoord(B){b} + \tkzDefPoint(\ax,\ay){C} + \tkzDefPoint(\bx,\by){D} + \tkzDrawPoints[color=red](C,D) +\end{tikzpicture} +\end{tkzexample} + +\subsubsection{Somme de vecteurs avec \tkzcname{tkzGetPointCoord}} +\begin{tkzexample}[width=6cm,small] +\begin{tikzpicture}[>=latex] + \tkzDefPoint(1,4){a} + \tkzDefPoint(3,2){b} + \tkzDefPoint(1,1){c} + \tkzDrawSegment[->,red](a,b) + \tkzGetPointCoord(c){c} + \draw[color=blue,->](a) -- ([shift=(b)]\cx,\cy) ; + \draw[color=purple,->](b) -- ([shift=(b)]\cx,\cy) ; + \tkzDrawSegment[->,blue](a,c) + \tkzDrawSegment[->,purple](b,c) +\end{tikzpicture} +\end{tkzexample} + +\endinput
\ No newline at end of file |