\section{Miscellaneous tools and mathematical tools} \subsection{Duplicate a segment} This involves constructing a segment on a given half-line of the same length as a given segment. \begin{NewMacroBox}{tkzDuplicateSegment}{\parg{pt1,pt2}\parg{pt3,pt4}\marg{pt5}}% This involves creating a segment on a given half-line of the same length as a given segment . It is in fact the definition of a point. \tkzcname{tkzDuplicateSegment} is the new name of \tkzcname{tkzDuplicateLen}. \medskip \begin{tabular}{lll}% \toprule arguments & example & explanation \\ \midrule \TAline{(pt1,pt2)(pt3,pt4)\{pt5\}} {\tkzcname{tkzDuplicateSegment}(A,B)(E,F)\{C\}}{AC=EF and $C \in [AB)$} \\ \bottomrule \end{tabular} \medskip \emph{The macro \tkzcname{tkzDuplicateLength} is identical to this one. } \end{NewMacroBox} \subsubsection{Use of\tkzcname{tkzDuplicateSegment}} \begin{tkzexample}[latex=6cm,small] \begin{tikzpicture}[scale=.5] \tkzDefPoints{0/0/A,2/-3/B,2/5/C} \tkzDuplicateSegment(A,B)(A,C) \tkzGetPoint{D} \tkzDrawSegments[new](A,B A,C) \tkzDrawSegment[teal](A,D) \tkzDrawPoints[new](A,B,C,D) \tkzLabelPoints[above right=3pt](A,B,C,D) \end{tikzpicture} \end{tkzexample} \subsubsection{Proportion of gold with \tkzcname{tkzDuplicateSegment}} \begin{tkzexample}[latex=7cm,small] \begin{tikzpicture}[rotate=-90,scale=.4] \tkzDefPoints{0/0/A,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[orange,delta=10](D,E)(B) \tkzDrawArc[orange,delta=10](A,M)(E) \tkzDrawLines(A,B B,C A,D) \tkzDrawArc[orange,delta=10](B,D)(I) \tkzDrawPoints(A,B,D,C,M,I) \tkzLabelPoints[below left](A,B,D,C,M,I) \end{tikzpicture} \end{tkzexample} \subsubsection{Golden triangle or sublime triangle} \begin{tkzexample}[latex=7cm,small] \begin{tikzpicture}[scale=.75] \tkzDefPoints{0/0/A,5/0/C,0/5/B} \tkzDefMidPoint(A,C)\tkzGetPoint{H} \tkzDuplicateSegment(H,B)(H,A)\tkzGetPoint{D} \tkzDuplicateSegment(A,D)(A,B)\tkzGetPoint{E} \tkzDuplicateSegment(A,D)(B,A)\tkzGetPoint{G} \tkzInterCC(A,C)(B,G)\tkzGetSecondPoint{F} \tkzDrawLine(A,C) \tkzDrawArc(A,C)(B) \begin{scope}[arc style/.style={color=gray,% style=dashed}] \tkzDrawArc(H,B)(D) \tkzDrawArc(A,D)(B) \tkzDrawArc(B,G)(F) \end{scope} \tkzDrawSegment[dashed](H,B) \tkzCompass(B,F) \tkzDrawPolygon[new](A,B,F) \tkzDrawPoints(A,...,H) \tkzLabelPoints[below left](A,...,H) \end{tikzpicture} \end{tkzexample} \subsection{Segment length \tkzcname{tkzCalcLength}} There's an option in \TIKZ\ named \tkzname{veclen}. This option is used to calculate AB if A and B are two points. The only problem for me is that the version of \TIKZ\ is not accurate enough in some cases. My version uses the \tkzNamePack{xfp} package and is slower, but more accurate. \begin{NewMacroBox}{tkzCalcLength}{\oarg{local options}\parg{pt1,pt2}}% You can store the result with the macro \tkzcname{tkzGetLength} for example \tkzcname{tkzGetLength\{dAB\}} \\ defines the macro \tkzcname{dAB}. \medskip \begin{tabular}{lll}% \toprule arguments & example & explanation \\ \midrule \TAline{(pt1,pt2)\{name of macro\}} {\tkzcname{tkzCalcLength}(A,B)}{\tkzcname{dAB} gives $AB$ in cm} \bottomrule \end{tabular} \medskip Only one option \begin{tabular}{lll}% \toprule options & default & example \\ \midrule \TOline{cm} {true}{\tkzcname{tkzCalcLength}(A,B) After \tkzcname{tkzGetLength\{dAB\}} \tkzcname{dAB} gives $AB$ in cm} \end{tabular} \end{NewMacroBox} \subsubsection{Compass square construction} \begin{tkzexample}[latex=7cm,small] \begin{tikzpicture}[scale=1] \tkzDefPoint(0,0){A} \tkzDefPoint(4,0){B} \tkzCalcLength(A,B)\tkzGetLength{dAB} \tkzDefLine[perpendicular=through A](A,B) \tkzGetPoint{D} \tkzDefPointWith[orthogonal,K=-1](B,A) \tkzGetPoint{F} \tkzGetPoint{C} \tkzDrawLine[add= .6 and .2](A,B) \tkzDrawLine(A,D) \tkzShowLine[orthogonal=through A,gap=2](A,B) \tkzMarkRightAngle(B,A,D) \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[below left](A,B,C,D) \end{tikzpicture} \end{tkzexample} \subsubsection{Example} The macro \tkzcname{tkzDefCircle[radius](A,B)} defines the radius that we retrieve with \tkzcname{tkzGetLength}, this result is in \tkzname{cm}. \begin{tkzexample}[latex=6cm,small] \begin{tikzpicture}[scale=.5] \tkzDefPoint(0,0){A} \tkzDefPoint(3,-4){B} \tkzDefMidPoint(A,B) \tkzGetPoint{M} \tkzCalcLength(M,B)\tkzGetLength{rAB} \tkzDrawCircle(A,B) \tkzDrawPoints(A,B) \tkzLabelPoints(A,B) \tkzDrawSegment[dashed](A,B) \tkzLabelSegment(A,B){$\pgfmathprintnumber{\rAB}$} \end{tikzpicture} \end{tkzexample} \subsection{Transformation from pt to cm or cm to pt} Not sure if this is necessary and it is only a division by 28.45274 and a multiplication by the same number. The macros are: \begin{NewMacroBox}{tkzpttocm}{\parg{number}\marg{name of macro}}% The result is stored in a macro. \medskip \begin{tabular}{lll}% \toprule arguments & example & explanation \\ \midrule \TAline{(number)\{name of macro\}} {\tkzcname{tkzpttocm}(120)\{len\}}{\tkzcname{len} gives a number of tkzname{cm}} \bottomrule \end{tabular} \medskip You'll have to use \tkzcname{len} along with \tkzname{cm}. \end{NewMacroBox} \subsection{Change of unit} \begin{NewMacroBox}{tkzcmtopt}{\parg{number}\marg{name of macro}}% The result is stored in a macro. \medskip \begin{tabular}{lll} \toprule arguments & example & explanation \\ \midrule \TAline{(number)\{name of macro\}}{\tkzcname{tkzcmtopt}(5)\{len\}}{\tkzcname{len} length in \tkzname{pts}} \bottomrule \end{tabular} \medskip \emph{The result can be used with \tkzcname{len}\ \tkzname{pt}} \end{NewMacroBox} \subsection{Get point coordinates} %<--------------------------------------------------------------------------–> % Coordonnées d'un point % result in #2x and #2y #1 is the point and we get its coordinates % use either $A$ one point \tkzGetPointCoord(A){V} then \Vx = xA and \Vy = yA % in cm % tkzGetPointCoord with [#1] cm or pt ?? todo %<--------------------------------------------------------------------------–> \begin{NewMacroBox}{tkzGetPointCoord}{\parg{$A$}\marg{name of macro}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(point)\{name of macro\}} {\tkzcname{tkzGetPointCoord}(A)\{A\}}{\tkzcname{Ax} and \tkzcname{Ay} give coordinates for $A$} \end{tabular} \medskip \emph{Stores in two macros the coordinates of a point. If the name of the macro is \tkzname{p}, then \tkzcname{px} and \tkzcname{py} give the coordinates of the chosen point with the cm as unit.} \end{NewMacroBox} \subsubsection{Coordinate transfer with \tkzcname{tkzGetPointCoord}} \begin{tkzexample}[width=8cm,small] \begin{tikzpicture} \tkzInit[xmax=5,ymax=3] \tkzGrid[sub,orange] \tkzDrawX \tkzDrawY \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{Sum of vectors with \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} \subsection{Swap labels of points} \begin{NewMacroBox}{tkzSwapPoints}{\parg{$pt1$,$pt2$}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1,pt2)} {\tkzcname{tkzSwapPoints}(A,B)}{now $A$ has the coordinates of $B$ } \end{tabular} \emph{The points have exchanged their coordinates.} \end{NewMacroBox} \subsubsection{Use of \tkzcname{tkzSwapPoints}} \begin{tkzexample}[width=6cm,small] \begin{tikzpicture} \tkzDefPoints{0/0/O,5/-1/A,2/2/B} \tkzSwapPoints(A,B) \tkzDrawPoints(O,A,B) \tkzLabelPoints(O,A,B) \end{tikzpicture} \end{tkzexample} \subsection{Dot Product} In Euclidean geometry, the dot product of the Cartesian coordinates of two vectors is widely used. \begin{NewMacroBox}{tkzDotProduct}{\parg{$pt1$,$pt2$,$pt3$}}% The dot product of two vectors $\overrightarrow{u} = [a,b]$ and $\overrightarrow{v} = [a',b']$ is defined as: $\overrightarrow{u}\cdot \overrightarrow{v} = aa' + bb'$ $\overrightarrow{u} = \overrightarrow{pt1pt2}$ $\overrightarrow{v} = \overrightarrow{pt1pt3}$ \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1,pt2,pt3)} {\tkzcname{tkzDotProduct}(A,B,C)}{the result is $\overrightarrow{AB}\cdot \overrightarrow{AC}$} \end{tabular} \emph{The result is a number that can be retrieved with \tkzcname{tkzGetResult}.} \end{NewMacroBox} \subsubsection{Simple example} % (fold) \label{ssub:simple_example} \begin{tkzexample}[small,latex=7cm] \begin{tikzpicture} \tkzDefPoints{-2/-3/A,4/0/B,1/3/C} \tkzDefPointBy[projection= onto A--B](C) \tkzGetPoint{H} \tkzDrawSegment(C,H) \tkzMarkRightAngle(C,H,A) \tkzDrawSegments[vector style](A,B A,C) \tkzDrawPoints(A,H) \tkzLabelPoints(A,B,H) \tkzLabelPoints[above](C) \tkzDotProduct(A,B,C) \tkzGetResult{pabc} % \pgfmathparse{round(10*\pabc)/10} \let\pabc\pgfmathresult \node at (1,-3) {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pabc$}; \tkzDotProduct(A,H,B) \tkzGetResult{phab} % \pgfmathparse{round(10*\phab)/10} \let\phab\pgfmathresult \node at (1,-4) {$PA \times PH = \phab $}; \end{tikzpicture} \end{tkzexample} % subsubsection simple_example (end) \subsubsection{Cocyclic points} % (fold) \label{ssub:cocyclicpts} \begin{tkzexample}[small,latex=7cm] \begin{tikzpicture}[scale=.75] \tkzDefPoints{1/2/O,5/2/B,2/2/P,3/3/Q} \tkzInterLC[common=B](O,B)(O,B) \tkzGetFirstPoint{A} \tkzInterLC[common=B](P,Q)(O,B) \tkzGetPoints{C}{D} \tkzDrawCircle(O,B) \tkzDrawSegments(A,B C,D) \tkzDrawPoints(A,B,C,D,P) \tkzLabelPoints(P) \tkzLabelPoints[below left](A,C) \tkzLabelPoints[above right](B,D) \tkzDotProduct(P,A,B) \tkzGetResult{pab} \pgfmathparse{round(10*\pab)/10} \let\pab\pgfmathresult \tkzDotProduct(P,C,D) \tkzGetResult{pcd} \pgfmathparse{round(10*\pcd)/10} \let\pcd\pgfmathresult \node at (1,-3) {% $\overrightarrow{PA}\cdot \overrightarrow{PB} = \overrightarrow{PC}\cdot \overrightarrow{PD}$}; \node at (1,-4)% {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pab$}; \node at (1,-5){% $\overrightarrow{PC}\cdot \overrightarrow{PD} =\pcd$}; \end{tikzpicture} \end{tkzexample} % subsubsection cocyclicpts (end) \newpage \subsection{Power of a point with respect to a circle} \begin{NewMacroBox}{tkzPowerCircle}{\parg{$pt1$}\parg{$pt2$,$pt3$}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1)(pt2,pt3)} {\tkzcname{tkzPowerCircle}(A)(O,M)}{power of $A$ with respect to the circle (O,A)} \end{tabular} \emph{The result is a number that represents the power of a point with respect to a circle.} \end{NewMacroBox} \subsubsection{Power from the radical axis} % (fold) \label{ssub:power} In this example, the radical axis $(EF)$ has been drawn. A point $H$ has been chosen on $(EF)$ and the power of the point $H$ with respect to the circle of center $A$ has been calculated as well as $PS^2$. You can check that the power of $H$ with respect to the circle of center $C$ as well as $HS'^2, HT^2, HT'^2$ give the same result. \begin{tkzexample}[small,latex=7cm] \begin{tikzpicture}[scale=.5] \tkzDefPoints{-1/0/A,0/5/B,5/-1/C,7/1/D} \tkzDrawCircles(A,B C,D) \tkzDefRadicalAxis(A,B)(C,D) \tkzGetPoints{E}{F} \tkzDrawLine[add=1 and 2](E,F) \tkzDefPointOnLine[pos=1.5](E,F) \tkzGetPoint{H} \tkzDefLine[tangent from = H](A,B) \tkzGetPoints{T}{T'} \tkzDefLine[tangent from = H](C,D) \tkzGetPoints{S}{S'} \tkzDrawSegments(H,T H,T' H,S H,S') \tkzDrawPoints(A,B,C,D,E,F,H,T,T',S,S') \tkzPowerCircle(H)(A,B) \tkzGetResult{pw} \tkzDotProduct(H,S,S) \tkzGetResult{phtt} \node {Power $\approx \pw \approx \phtt$}; \end{tikzpicture} \end{tkzexample} % subsubsection power (end) \subsection{Radical axis} In geometry, the radical axis of two non-concentric circles is the set of points whose power with respect to the circles are equal. Here |\tkzDefRadicalAxis(A,B)(C,D)| gives the radical axis of the two circles $\mathcal{C}(A,B)$ and $\mathcal{C}(C,D)$. \begin{NewMacroBox}{tkzDefRadicalAxis}{\parg{$pt1$,$pt2$}\parg{$pt3$,$pt4$}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1,pt2)(pt3,pt4)} {\tkzcname{tkzDefRadicalAxis}(A,B)(C,D)}{Two circles with centers $A$ and $C$} \midrule \end{tabular} \emph{The result is two points of the radical axis.} \end{NewMacroBox} \subsubsection{Two circles disjointed} % (fold) \label{ssub:two_circles_disjointed} \begin{tkzexample}[small,latex=8cm] \begin{tikzpicture}[scale=.75] \tkzDefPoints{-1/0/A,0/2/B,4/-1/C,4/0/D} \tkzDrawCircles(A,B C,D) \tkzDefRadicalAxis(A,B)(C,D) \tkzGetPoints{E}{F} \tkzDrawLine[add=1 and 2](E,F) \tkzDrawLine[add=.5 and .5](A,C) \end{tikzpicture} \end{tkzexample} % subsubsection two_circles_disjointed (end) \subsection{Two intersecting circles} % (fold) \label{sub:two_intersecting_circles} \begin{tkzexample}[small,latex=8cm] \begin{tikzpicture}[scale=.5] \tkzDefPoints{-1/0/A,0/2/B,3/-1/C,3/-2/D} \tkzDrawCircles(A,C B,D) \tkzDefRadicalAxis(A,C)(B,D) \tkzGetPoints{E}{F} \tkzDrawPoints(A,B,C,D,E,F) \tkzLabelPoints(A,B,C,D,E,F) \tkzDrawLine[add=.25 and .5](E,F) \tkzDrawLine[add=.25 and .25](A,B) \end{tikzpicture} \end{tkzexample} % subsection two_intersecting_circles (end) \subsection{Two externally tangent circles} % (fold) \label{sub:two_externally_tangent_circles} \begin{tkzexample}[small,latex=8cm] \begin{tikzpicture}[scale=.5] \tkzDefPoints{0/0/A,4/0/B,6/0/C} \tkzDrawCircles(A,B C,B) \tkzDefRadicalAxis(A,B)(C,B) \tkzGetPoints{E}{F} \tkzDrawPoints(A,B,C,E,F) \tkzLabelPoints(A,B,C,E,F) \tkzDrawLine[add=1 and 1](E,F) \tkzDrawLine[add=.5 and .5](A,B) \end{tikzpicture} \end{tkzexample} % subsection two_externally_tangent_circles (end) \subsection{Two circles tangent internally} % (fold) \label{sub:deux_cercles_tangents_interieurement} \begin{tkzexample}[small,latex=8cm] \begin{tikzpicture}[scale=.5] \tkzDefPoints{0/0/A,3/0/B,5/0/C} \tkzDrawCircles(A,C B,C) \tkzDefRadicalAxis(A,C)(B,C) \tkzGetPoints{E}{F} \tkzDrawPoints(A,B,C,E,F) \tkzLabelPoints[below right](A,B,C,E,F) \tkzDrawLine[add=1 and 1](E,F) \tkzDrawLine[add=.5 and .5](A,B) \end{tikzpicture} \end{tkzexample} % subsection deux_cercles_tangents_interieurement (end) \subsubsection{Three circles} % (fold) \label{ssub:threecircles} \begin{tkzexample}[small,latex=7cm] \begin{tikzpicture}[scale=.4] \tkzDefPoints{0/0/A,5/0/a,7/-1/B,3/-1/b,5/-4/C,2/-4/c} \tkzDrawCircles(A,a B,b C,c) \tkzDefRadicalAxis(A,a)(B,b) \tkzGetPoints{i}{j} \tkzDefRadicalAxis(A,a)(C,c) \tkzGetPoints{k}{l} \tkzDefRadicalAxis(C,c)(B,b) \tkzGetPoints{m}{n} \tkzDrawLines[new](i,j k,l m,n) \end{tikzpicture} \end{tkzexample} % subsubsection threecircles (end) \subsection{\tkzcname{tkzIsLinear}, \tkzcname{tkzIsOrtho}} \begin{NewMacroBox}{tkzIsLinear}{\parg{$pt1$,$pt2$,$pt3$}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1,pt2,pt3)} {\tkzcname{tkzIsLinear}(A,B,C)}{$A,B,C$ aligned ?} \midrule \end{tabular} \emph{\tkzcname{tkzIsLinear} allows to test the alignment of the three points $pt1$,$pt2$,$pt3$. } \end{NewMacroBox} \begin{NewMacroBox}{tkzIsOrtho}{\parg{$pt1$,$pt2$,$pt3$}}% \begin{tabular}{lll}% arguments & example & explanation \\ \midrule \TAline{(pt1,pt2,pt3)} {\tkzcname{tkzIsOrtho}(A,B,C)}{$(AB)\perp (AC)$ ? } \midrule \end{tabular} \emph{\tkzcname{tkzIsOrtho} allows to test the orthogonality of lines $(pt1pt2)$ and $(pt1pt3)$. } \end{NewMacroBox} \subsubsection{Use of \tkzcname{tkzIsOrtho} and \tkzcname{tkzIsLinear}} \begin{tkzexample}[small,latex=7cm] \begin{tikzpicture} \tkzDefPoints{1/-2/A,5/0/B} \tkzDefCircle[diameter](A,B) \tkzGetPoint{O} \tkzDrawCircle(O,A) \tkzDefPointBy[rotation= center O angle 60](B) \tkzGetPoint{C} \tkzDefPointBy[rotation= center O angle 60](A) \tkzGetPoint{D} \tkzDrawCircle(O,A) \tkzDrawPoints(A,B,C,D,O) \tkzIsOrtho(C,A,B) \iftkzOrtho \tkzDrawPolygon[blue](A,B,C) \tkzDrawPoints[blue](A,B,C,D) \else \tkzDrawPoints[red](A,B,C,D) \fi \tkzIsLinear(O,C,D) \iftkzLinear \tkzDrawSegment[orange](C,D) \fi \end{tikzpicture} \end{tkzexample} \endinput