\newpage

\section{Class \Iclass{point}} % (fold)
\label{sec:class_point}

The foundation of the entire framework is the \Iclass{point} class. This class is hybrid in the sense that it deals with both points in a plane and complex numbers. The principle is as follows: the plane is equipped with an orthonormal basis, which allows us to determine the position of a point using its abscissa and ordinate coordinate. Similarly, any complex number can be viewed simply as a pair of real numbers (its real part and its imaginary part).  We can then designate the plane as the complex plane, and the complex number $x+iy$ is represented by the point of the plane with coordinates $(x,y)$. Thus the point $A$ will have coordinates stored in the object $z.A$. Coordinates are attributes of the \code{point} object,  along with type, argument, and modulus.



The creation of a point is done using the following method, but there are other possibilities. If a scaling factor has been given, the method takes it into account.

   \def\size{42mm}
\begin{tikzpicture}[remember picture]
\node[ draw, fill=red!10] (tbl) {%
 \centering
\begin{minipage}{\size}

   \hspace{\fill} \texttt{Arguments}\hspace{\fill}
       
       \tikz\node[minimum width=\size,font=\small,
    draw, fill=cyan!10,
    rectangle split, rectangle split parts=6
  ] {
    \texttt{re (real)}
    \nodepart{two}\texttt{im (real)}
    \nodepart{three}\texttt{type = 'point'}
    \nodepart{four}\texttt{argument (rad)}
     \nodepart{five}\texttt{modulus (cm)}
       \nodepart{six}\texttt{mtx (matrix)}
  };
  
    \hspace{\fill}  \texttt{Methods}\hspace{\fill}
    
        \tikz\node[minimum width=\size,font=\small,
    draw, fill=orange!20,sharp corners,
    rectangle split, rectangle split parts=4
  ] {
   \texttt{homothety(coeff,obj)}
    \nodepart{two}\texttt{rotation (angle,object)}
    \nodepart{three}\texttt{symmetry (object)}
    \nodepart{four}\texttt{\ldots}
  };
\end{minipage}};
 \node[ draw, fill=red!10,,minimum height = 2em,
  rounded corners,anchor=south] (tc) at (tbl.north){Class |Point|};
\end{tikzpicture}
\hspace{5cm}\begin{tikzpicture}[remember picture]
   \node[ draw, fill=red!10] (tbl) {%
 \centering
\begin{minipage}{\size}
   \hspace{\fill}    \texttt{Arguments}\hspace{\fill}
       
        \tikz\node[minimum width=\size,font=\small,
    draw, fill=cyan!10,
    rectangle split, rectangle split parts=6
  ] {
    \texttt{re = 1}
    \nodepart{two}\texttt{im = 2}
    \nodepart{three}\texttt{type = 'point'}
    \nodepart{four}\texttt{argument = atan(2)}
     \nodepart{five}\texttt{modulus = $\sqrt{5}$}
      \nodepart{six}\texttt{mtx = \{\{1\},\{2\}\}}
  };
  
    \hspace{\fill}  \texttt{Methods}\hspace{\fill}
    
        \tikz\node[minimum width=\size,font=\small,
    draw, fill=orange!20,sharp corners,
    rectangle split, rectangle split parts=4
  ] {
   \texttt{homothety(coeff,obj)}
    \nodepart{two}\texttt{rotation (angle,object)}
    \nodepart{three}\texttt{symmetry (object)}
    \nodepart{four}\texttt{\ldots}
  };
\end{minipage}
     };
 \node[ draw, fill=red!10,remember picture,minimum height = 2em,
  rounded corners,anchor=south] (to) at (tbl.north){object |z.A|};
\end{tikzpicture}

\begin{tikzpicture}[remember picture,overlay]
\draw [thick,->](tc.east) -- (to.west);
\end{tikzpicture}

\subsection{Attributes of a point} % (fold)
\label{sub:attributes_of_a_point}
% Method \Imeth{point}{new}

\begin{mybox}
   Creation \\
   |z.A = point: new (1,2) |
\end{mybox}
 The point $A$ has coordinates $x=1$ and $y=2$. If you use the notation |z.A|, then $A$ will be  referenced as a node in \TIKZ\ or in \pkg{tkz-euclide}.

This is the creation of a fixed point with coordinates 1 and 2 and which is named $A$. The notation |z.A| indicates that the coordinates will be stored in a table denoted as  |z| (reference to the notation of the affixes of the complex numbers) that $A$ is the name of the point and the key allowing access to the values. 

\begin{center}
  \bgroup
  \small
  \catcode`_=12
  \captionof{table}{Point attributes.}\label{point:att}  
  \begin{tabular}{lll}
  \toprule
  \textbf{Attributes}     & \textbf{Application}& \textbf{Example}\\
  \Iattr{point}{re}       &  |z.A.re = 1|    & [\ref{ssub:methods}] \\
  \Iattr{point}{im}       &  |z.A.im = 2|    & [\ref{ssub:methods}]  \\
  \Iattr{point}{type}     &  |z.A.type = 'point'|  & \\  
  \Iattr{point}{argument} &  |z.A.argument| $\approx$ |0.78539816339745| &  [\ref{ssub:example_point_attributes}] \\
  \Iattr{point}{modulus}  & |z.A.modulus| $\approx$ |2.2360...| =$\sqrt{5}$ &  [\ref{ssub:example_point_attributes}] \\
  \Iattr{point}{mtx}  & |z.A.mtx =  = {{1},{2}}|  &  [\ref{ssub:example_point_attributes}] \\
  \bottomrule
  \end{tabular}
  \egroup
\end{center}

\newpage
\subsubsection{Example: point attributes} % (fold)
\label{ssub:example_point_attributes}

\directlua{
init_elements ()
   z.M = point: new (1,2)
}
\hspace*{\fill}

\begin{Verbatim}
\directlua{
   init_elements ()
   z.M = point: new (1,2)}
\end{Verbatim}
\pgfkeys{/pgf/number format/.cd,std,precision=2}
\let\pmpn\pgfmathprintnumber
\DeleteShortVerb{\|}

\begin{Verbatim}
\begin{tikzpicture}[scale = 1]
\pgfkeys{/pgf/number format/.cd,std,precision=2}
\let\pmpn\pgfmathprintnumber
\tkzDefPoints{2/4/M,2/0/A,0/0/O,0/4/B}
\tkzLabelPoints(O)
\tkzMarkAngle[fill=gray!30,size=1](A,O,M)
\tkzLabelAngle[pos=1,right](A,O,M){%
$\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad}
\tkzDrawSegments(O,M)
\tkzLabelSegment[above,sloped](O,M){%
$|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
\tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
\tkzDrawPoints(M,A,O,B)
\tkzPointShowCoord(M)
\tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
\tkzLabelPoint[left,teal](B){$\tkzUseLua{z.M.im}$}
\tkzDrawSegments[->,add = 0 and 0.25](O,B O,A)
\end{tikzpicture}
\end{Verbatim}


\begin{center}
   \begin{tikzpicture}
   \pgfkeys{/pgf/number format/.cd,std,precision=2}
   \let\pmpn\pgfmathprintnumber
   \tkzDefPoints{2/4/M,2/0/A,0/0/O,0/4/B}
   \tkzLabelPoints(O)
   \tkzMarkAngle[fill=gray!30,size=1](A,O,M)
   \tkzLabelAngle[pos=1,right](A,O,M){%
   $\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad}
   \tkzDrawSegments(O,M)
   \tkzLabelSegment[above,sloped](O,M){%
   $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
   \tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
   \tkzDrawPoints(M,A,O,B)
   \tkzPointShowCoord(M)
   \tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
   \tkzLabelPoint[left,teal](B){$\tkzUseLua{z.M.im}$}
   \tkzDrawSegments[->,add = 0 and 0.25](O,B O,A)
   \begin{scope}[every annotation/.style={fill=lightgray!15,anchor = east}]
   \node [annotation,font =\small,text width=6cm] at (current bounding box.west) {
Attributes of \texttt{z.M}
   \begin{mybox}{}
     \begin{itemize}
     \item \texttt{z.M.re} = 1
     \item \texttt{z.M.im} = 2
     \item \texttt{z.M.type} = 'point'
     \item \texttt{z.M.argument} = $\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad
     \item \texttt{z.M.modulus} = $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm
     \item \texttt{z.M.mtx} =  \tkzUseLua{z.M.mtx : print ()}
     \end{itemize}
   \end{mybox}
       };
   \end{scope}
   \end{tikzpicture}
\end{center}

 \MakeShortVerb{\|}

\subsubsection{Attribute \Iattr{point}{mtx}} % (fold)
\label{ssub:attribute_iattr_point_mtx}

This method allows the point to be used in conjunction with matrices.

\vspace{6pt}
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
  \directlua{
  z.A = point : new (2,-1)
  z.A.mtx : print () 
  }
\end{Verbatim}
\end{minipage}
  \begin{minipage}{.5\textwidth}
    \begin{center}
      \directlua{
      z.A = point : new (2,-1)
      z.A.mtx : print () 
      }
    \end{center}
  \end{minipage}
% subsubsection attribute_iattr_point_mtx (end)
% subsubsection example_point_attributes (end)
% subsection attributes_of_a_point (end)


\subsubsection{Argand diagram} % (fold)
\label{ssub:argand_diagram}
\normalsize
\begin{minipage}{\textwidth}
\begin{Verbatim}
\directlua{
init_elements ()
   z.A = point : new ( 2 , 3 )
   z.O = point : new ( 0 , 0 )
   z.I = point : new ( 1 , 0 )
}
\begin{tikzpicture}
   \tkzGetNodes
   \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
   \tkzDrawCircle[dashed,red](O,A)
   \tkzPointShowCoord(A)
   \tkzDrawPoint(A)
   \tkzLabelPoint[above right](A){\normalsize $a+ib$}
   \tkzDrawX\tkzDrawY
   \tkzDrawSegment(O,A)
   \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
  \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
\end{tikzpicture}
\end{Verbatim}
\end{minipage}

\begin{minipage}{\textwidth}
\directlua{
init_elements ()
      z.A = point : new ( 2 , 3 )
      z.O = point : new ( 0 , 0 )
      z.I = point : new ( 1 , 0 )
}
\begin{center}
  \begin{tikzpicture}
        \tkzGetNodes
        \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
        \tkzDrawCircle[dashed,red](O,A)
        \tkzPointShowCoord(A)
        \tkzDrawPoint(A)
        \tkzLabelPoint[above right](A){\normalsize $a+ib$}
        \tkzDrawX\tkzDrawY
        \tkzDrawSegment(O,A)
        \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
       \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
     \end{tikzpicture}
\end{center}
\end{minipage}


% subsubsection argand_diagram (end)
\newpage
\subsection{Methods of the class point} % (fold)
\label{sub:methods_of_the_class_point}

The methods described in the following table are standard and can be found in most of the examples at the end of this documentation. The result of the different methods presented in the following table is a \tkzNameObj{point}. Refer to section  (\ref{sub:complex_numbers}) for the metamethods.

\vspace{1em}
\bgroup
\catcode`_=12
\small
\captionof{table}{Functions \& Methods of the class point.}\label{point:met}
\begin{tabular}{lll}
\toprule
\textbf{Functions} & \textbf{Application}& \\
\midrule
\Igfct{point}{new(r,r)}    & |z.A = point : new(1,2)| & [\ref{ssub:method_normalize}] \\
\Igfct{point}{polar (d,an)}  & |z.A = point : polar(1,math.pi/3)| &  [\ref{sub:archimedes}] \\
\Igfct{point}{polar\_deg (d,an)} &    an in deg    &  polar coordinates an deg \\
\midrule
\textbf{Methods} & \textbf{Application}& \\
\midrule
\textbf{Points} &&\\
\midrule
\Imeth{point}{north(r)} & |r| distance to the point (1 if empty) &  \ref{ssub:methods}]   \\
\Imeth{point}{south(r)} & &  \\
\Imeth{point}{east(r)}  &  & \\
\Imeth{point}{west(r)}  &  & \\
\Imeth{point}{normalize()} &  |z.b = z.a: normalize ()| &  [\ref{ssub:method_normalize}] \\
\Imeth{point}{get\_points (obj)}     & retrieves points from the object & [\ref{ssub:object_rotation}; \ref{ssub:apollonius_circle_ma_mb_k} ]  \\
\Imeth{point}{orthogonal (d)} & |z.B=z.A:orthogonal(d)| &  $\overrightarrow{OB}\perp \overrightarrow{OA}$  and $OB=d$.  [\ref{ssub:orthogonal_method}]\\
\Imeth{point}{at ()} & |z.X = z.B : at (z.A)| &  $\overrightarrow{OB}= \overrightarrow{AX}$  and $OB=d$.  [\ref{ssub:_imeth_point_at_method}] \\
 \midrule
  \textbf{Transformations} &&\\
 \midrule
  \Imeth{point}{symmetry(obj)} & obj : point, line, etc. & [\ref{ssub:object_symmetry}] \\
 \Imeth{point}{rotation(an , obj)}  & point, line, etc.  & [\ref{ssub:object_rotation}] \\
  \Imeth{point}{homothety(r,obj)}     & |z.c = z.a : homothety (2,z.b)| & [\ref{sub:homothety}]   \\
  \midrule
   \textbf{Misc.} &&\\
  \midrule
    \Imeth{point}{print()} & displays the affix of the point & [\ref{ssub:object_symmetry} ]\\
\bottomrule %
\end{tabular}
\egroup

\subsubsection{Method  \Imeth{point}{north (d)} } % (fold)
\label{ssub:example_method_imeth_point_north_d}

This function defines a point located on a vertical line passing through the given point. This function is useful if you want to report a certain distance (Refer to the following example).
If |d| is absent then it is considered equal to 1.

\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\directlua{
   init_elements ()
   z.O   = point : new ( 0, 0 )
   z.A   = z.O : east ()
   z.Ap  = z.O : east (2) : north (2)
   z.B   = z.O : north ()
   z.C   = z.O : west ()
   z.D   = z.O : south ()
}
\begin{tikzpicture}
   \tkzGetNodes
   \tkzDrawPolygon(A,B,C,D)
   \tkzDrawPoints(A,B,C,D,O,A')
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\directlua{
   init_elements ()
   z.O = point : new ( 0, 0 )
   z.A = z.O : east ()
   z.Ap = z.O : east (2) : north (2)
   z.B = z.O : north ()
   z.C = z.O : west ()
   z.D = z.O : south ()
}

\begin{center}
  \begin{tikzpicture}[scale = 1.5]
     \tkzGetNodes
     \tkzDrawPolygon(A,B,C,D)
     \tkzDrawPoints(A,B,C,D,O,A')
     \tkzLabelPoints(A,B,C,D,O,A')
  \end{tikzpicture}
\end{center}

\end{minipage}
% subsubsection example_method_imeth_point_north_d (end)


\subsubsection{Method \Imeth{point}{polar} } % (fold)
\label{ssub:example_polar_method}

This involves defining a point using its modulus and argument.

\begin{minipage}{0.6\textwidth}
\begin{Verbatim}
\directlua{
   init_elements ()
   z.O     = point:   new  (0, 0)
   z.A     = point:   new  (3, 0)
   z.F     = point:   polar (3, math.pi/3)
}
\begin{tikzpicture}
   \tkzGetNodes
   \tkzDrawCircle(O,A)
   \tkzDrawSegments[new](O,A)
   \tkzDrawSegments[purple](O,F)
   \tkzDrawPoints(A,O,F)
   \tkzLabelPoints[below right=6pt](A,O)
   \tkzLabelPoints[above](F)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{0.4\textwidth}
\directlua{
init_elements ()
    z.O     = point:   new  (0, 0)
    z.A     = point:   new  (3, 0)
    z.F     = point:   polar (3, math.pi/3)
}

\begin{center}
  \begin{tikzpicture}[scale = .75]
  \tkzGetNodes
  \tkzDrawCircle(O,A)
  \tkzDrawSegments[new](O,A)
  \tkzDrawSegments[purple](O,F)
  \tkzDrawPoints(A,O,F)
  \tkzLabelPoints[below right=6pt](A,O)
  \tkzLabelPoints[above](F)
  \end{tikzpicture}
\end{center}


\end{minipage}
% subsubsection example_polar_method (end)

\subsubsection{Method \Imeth{point}{normalize ()}} % (fold)
\label{ssub:method_normalize}

The result is a point located between the origin and the initial point at a distance of $1$ from the origin.

\vspace{6pt}
\directlua{
init_elements ()
z.O = point : new (0,0)
z.A = point : new (2,1)
z.B = z.A : normalize ()
z.I = point : new (1,0)
}

\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
\directlua{
init_elements ()
   z.O = point : new (0,0)
   z.A = point : new (1,2)
   z.B = z.A : normalize ()
   z.I = point : new (1,0)
}
\begin{tikzpicture}[scale = 1.5]
   \tkzGetNodes
   \tkzDrawSegment(O,A)
   \tkzDrawCircle(O,B)
   \tkzDrawPoints(O,A,B,I)
   \tkzLabelPoints(O,A,B)
   \tkzLabelPoint[below right](I){$1$}
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\begin{center}
  \begin{tikzpicture}[scale = 1.5]
  \tkzGetNodes
  \tkzDrawSegment(O,A)
  \tkzDrawCircle(O,B)
  \tkzDrawPoints(O,A,B,I)
  \tkzLabelPoints(O,A)
  \tkzLabelPoints[above](B)
  \tkzLabelPoint[below right](I){$1$}
  \end{tikzpicture}
\end{center}
  \end{minipage}


% subsubsection method_normalize (end)

\subsubsection{Method \Imeth{point}{orthogonal (d)}} % (fold)
\label{ssub:orthogonal_method}

Let $O$ be the origin of the plane. The \code{orthogonal (d)} method is used to obtain a point $B$ from a point $A$ such that $\overrightarrow{OB}\perp \overrightarrow{OA}$ with $OB=OA$ if $d$ is empty, otherwise $OB = d$.

\begin{minipage}{.6\textwidth}
\begin{Verbatim}
\directlua{
init_elements ()
  z.A = point : new (  3 , 1  )
  z.B = z.A : orthogonal (1)
  z.O = point : new ( 0,0  )
  z.C = z.A : orthogonal ()
}
\begin{tikzpicture}[gridded]
  \tkzGetNodes
  \tkzDrawSegments(O,A O,C)
  \tkzDrawPoints(O,A,B,C)
  \tkzLabelPoints[below right](O,A,B,C)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.4\textwidth}
\directlua{%
init_elements ()
  z.A = point : new (  3 , 1  )
  z.B = z.A : orthogonal (1)
  z.O = point : new ( 0,0  )
  z.C = z.A : orthogonal ()
}
\begin{center}
  \begin{tikzpicture}[gridded]
    \tkzGetNodes
    \tkzDrawSegments(O,A O,C)
    \tkzDrawPoints(O,A,B,C)
    \tkzLabelPoints[below right](O,A,B,C)
  \end{tikzpicture}
\end{center}

\end{minipage}
% subsubsection orthogonal_method (end)

\subsubsection{Method \Imeth{point}{at}} % (fold)
\label{ssub:_imeth_point_at_method}

This method is complementary to the previous one, so you may not wish to have $\overrightarrow{OB}\perp \overrightarrow{OA}$ but $\overrightarrow{AB}\perp \overrightarrow{OA}$.

\begin{minipage}{.6\textwidth}
\begin{Verbatim}
\directlua{%
init_elements ()
z.O = point : new ( 0,0  )
z.A = point : new (  3 , 2  )
z.B = z.A : orthogonal (1)
z.C = z.A+z.B
z.D =(z.C-z.A):orthogonal(2) : at (z.C) 
}
  \begin{tikzpicture}[gridded]
  \tkzGetNodes
  \tkzLabelPoints[below right](O,A,C)
  \tkzLabelPoints[above](B,D)
  \tkzDrawSegments(O,A A,B A,C C,D O,B)
  \tkzDrawPoints(O,A,B,C,D)
  \end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.4\textwidth}
\directlua{%
init_elements ()
z.O = point : new ( 0,0 )
z.A = point : new ( 3 ,2)
z.B = z.A : orthogonal (1)
z.C = z.A+z.B
z.D =(z.C-z.A):orthogonal(2) : at (z.C) 
}
\begin{center}
  \begin{tikzpicture}[gridded]
  \tkzGetNodes
  \tkzLabelPoints[below right](O,A,C)
  \tkzLabelPoints[above](B,D)
  \tkzDrawSegments(O,A A,B A,C C,D O,B)
  \tkzDrawPoints(O,A,B,C,D)
  \end{tikzpicture}
\end{center}
\end{minipage}

% subsubsection _imeth_point_at_method (end)

\subsubsection{Method \Imeth{point}{rotation} first example} % (fold)
\label{ssub:example_rotation_of_points}

The arguments are the angle of rotation in radians, and here a list of points.

\begin{minipage}{.6\textwidth}
\begin{Verbatim}
\directlua{%
init_elements ()
  z.a       = point:  new(0, -1)
  z.b       = point:  new(4, 0)
  z.o       = point:  new(6, -2)
  z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
}
  \begin{tikzpicture}
  \tkzGetNodes
  \tkzDrawLines(o,a o,a' o,b o,b')
  \tkzDrawPoints(a,a',b,b',o)
  \tkzLabelPoints(b,b',o)
  \tkzLabelPoints[below left](a,a')
  \tkzDrawArc(o,a)(a')
  \tkzDrawArc(o,b)(b')
  \end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.4\textwidth}
\directlua{%
  init_elements ()
  z.a = point:  new(0, -1)
  z.b = point:  new(4, 0)
  z.o = point:  new(6, -2)
  z.ap,z.bp =  z.o : rotation (math.pi/2,z.a,z.b)
}

\begin{center}
\begin{tikzpicture}[scale = .5]
   \tkzGetNodes
   \tkzDrawLines(o,a o,a' o,b o,b')
   \tkzDrawPoints(a,a',b,b',o)
   \tkzLabelPoints(b,b',o)
   \tkzLabelPoints[below left](a,a')
   \tkzDrawArc(o,a)(a')
   \tkzDrawArc(o,b)(b')
\end{tikzpicture}
\end{center}
\end{minipage}
% subsubsection example_rotation_of_points (end)

\subsubsection{Method \Imeth{point}{rotation} second example} % (fold)
\label{ssub:object_rotation}
Rotate a triangle by an angle of $\pi/6$ around $O$.

\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\directlua{%
init_elements ()
   z.O   = point: new(-1, -1)
   z.A   = point: new(2, 0)
   z.B   = point: new(5, 0)
   L.AB  = line: new(z.Az.B)
   T.ABC = L.AB: equilateral()
   S.fig = L.AB: square ()
   _,_,
   z.E,z.F = get_points(S.fig)
   S.new = z.O : rotation(math.pi/3,S.fig)
   _,_,z.Ep,z.Fp = get_points( S.new )
   z.C = T.ABC.pc
   T.ApBpCp = z.O : rotation(math.pi/3,T.ABC)
   z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
}
\begin{tikzpicture}[scale = .75]
   \tkzGetNodes
   \tkzDrawPolygons(A,B,C A',B',C'%
          A,B,E,F A',B',E',F')
   \tkzDrawPoints (A,B,C,A',B',C',O)
   \tkzLabelPoints (A,B,C,A',B',C',O)
   \tkzDrawArc[delta=0,->](O,A)(A')
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\directlua{%
init_elements ()
z.O = point : new ( -1 , -1 )
z.A = point : new ( 2 , 0 )
z.B = point : new ( 5 , 0 )
L.AB = line : new (z.A,z.B)
T.ABC = L.AB : equilateral ()
S.fig = L.AB : square ()
_,_,z.E,z.F = get_points (   S.fig   )
S.new = z.O : rotation (math.pi/3,S.fig)
_,_,z.Ep,z.Fp = get_points (   S.new   )
z.C = T.ABC.pc
T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
}

\begin{center}
\begin{tikzpicture}[  scale = .75]
   \tkzGetNodes
   \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
   \tkzDrawPoints (A,B,C,A',B',C',O)
   \tkzLabelPoints (A,B,C,A',B',C',O)
    \begin{scope}
       \tkzDrawArc[delta=0,->,dashed,red](O,A)(A')
       \tkzDrawSegments[dashed,red](O,A O,A')
    \end{scope}
\end{tikzpicture}
\end{center}
\end{minipage}
% subsubsection object_rotation (end)

\subsubsection{Method \Imeth{point}{symmetry}} % (fold)
\label{ssub:object_symmetry}

Example of the symmetry of an object


\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\directlua{%
init_elements ()
  z.a = point:  new(0,-1)
  z.b = point:  new(2, 0)
  L.ab = line : new (z.a,z.b)
  C.ab = circle : new (z.a,z.b)
  z.o = point:  new(1,1)
  z.ap,z.bp =  get_points (z.o: symmetry (C.ab))
}
\begin{tikzpicture}
 \tkzGetNodes
 \tkzDrawCircles(a,b a',b')
 \tkzDrawLines(a,a' b,b')
 \tkzDrawLines[red](a,b a',b')
 \tkzDrawPoints(a,a',b,b',o)
 \tkzLabelPoints(a,a',b,b',o)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\directlua{%
init_elements ()
  z.a = point:  new(0, -1)
  z.b = point:  new(2, 0)
  L.ab = line : new (z.a,z.b)
  C.ab = circle : new (z.a,z.b)
  z.o = point:  new(1, 1)
  z.ap,z.bp =  get_points (z.o: symmetry (C.ab))
}

\begin{center}
  \begin{tikzpicture}
  \tkzGetNodes
  \tkzDrawCircles(a,b a',b')
  \tkzDrawLines(a,a' b,b')
  \tkzDrawLines[red](a,b a',b')
  \tkzDrawPoints(a,a',b,b',o)
  \tkzLabelPoints(a,a',b,b',o)
  \end{tikzpicture}
\end{center}

\end{minipage}
% subsubsection object_symmetry (end)
% subsection methods_of_the_class_point (end)

% section class_point (end)
\endinput