\section{Definition of a point}

 Points can be specified in any of the following ways:
\begin{itemize}
\item Cartesian coordinates;
\item Polar coordinates;
\item Named points;
\item Relative points.
\end{itemize}

Even if it's possible, I think it's a bad idea to work directly with coordinates. Preferable is to use named points.
A point is defined if it has a name linked to a unique pair of decimal numbers. 
 Let $(x,y)$ or $(a:d)$  i.e. ($x$ abscissa, $y$ ordinate) or  ($a$ angle: $d$ distance).
 This is possible because the plan has been provided with an orthonormed Cartesian coordinate system.   The working axes are supposed to be (ortho)normed with unity equal to $1$~cm or something equivalent like $0.39370$~in.
 Now by default if you use a grid or axes, the rectangle used is defined by the coordinate points: $(0,0)$ and $(10,10)$. It's the macro \tkzcname{tkzInit} of the package \tkzNamePack{tkz-base} that creates this rectangle. Look at the following two codes and the result of their compilation:
 
\begin{tkzexample}[latex=10cm,small]
\begin{tikzpicture}
\tkzGrid
\tkzDefPoint(0,0){O}
\tkzDrawPoint[red](O)
\tkzShowBB[line width=2pt,teal]
\end{tikzpicture}
\end{tkzexample}


\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
 \tkzDefPoint(0,0){O}
 \tkzDefPoint(5,5){A}
 \tkzDrawSegment[blue](O,A)
 \tkzDrawPoints[red](O,A)
 \tkzShowBB[line width=2pt,teal]
\end{tikzpicture}
\end{tkzexample}
 
 The Cartesian coordinate $(a,b)$ refers to the
 point $a$ centimeters in the $x$-direction and $b$ centimeters in the
 $y$-direction.

 A point in polar coordinates requires an angle $\alpha$, in degrees,
 and a distance  $d$ from the origin with a dimensional
 unit by default it's the \texttt{cm}.
 

\begin{minipage}[b]{0.5\textwidth}
 Cartesian coordinates 
\begin{tkzexample}[vbox,small]
\begin{tikzpicture}[scale=1] 
  \tkzInit[xmax=5,ymax=5] 
  \tkzDefPoints{0/0/O,1/0/I,0/1/J}
  \tkzDrawXY[noticks,>=latex]
  \tkzDefPoint(3,4){A} 
  \tkzDrawPoints(O,A) 
  \tkzLabelPoint(A){$A_1 (x_1,y_1)$} 
  \tkzShowPointCoord[xlabel=$x_1$,
                     ylabel=$y_1$](A) 
  \tkzLabelPoints(O,I)
  \tkzLabelPoints[left](J)
  \tkzDrawPoints[shape=cross](I,J) 
\end{tikzpicture}
\end{tkzexample}%
\end{minipage}
\begin{minipage}[b]{0.5\textwidth}
 Polar coordinates
\begin{tkzexample}[vbox,small]
\begin{tikzpicture}[,scale=1]
  \tkzInit[xmax=5,ymax=5]
  \tkzDefPoints{0/0/O,1/0/I,0/1/J}
  \tkzDefPoint(40:4){P}
  \tkzDrawXY[noticks,>=triangle 45]    
  \tkzDrawSegment[dim={$d$,
                 16pt,above=6pt}](O,P)
  \tkzDrawPoints(O,P) 
  \tkzMarkAngle[mark=none,->](I,O,P) 
  \tkzFillAngle[fill=blue!20,
                opacity=.5](I,O,P) 
  \tkzLabelAngle[pos=1.25](I,O,P){$\alpha$}  
  \tkzLabelPoint(P){$P  (\alpha : d )$} 
  \tkzDrawPoints[shape=cross](I,J) 
  \tkzLabelPoints(O,I)
  \tkzLabelPoints[left](J) 
\end{tikzpicture}
\end{tkzexample}
\end{minipage}%

The \tkzNameMacro{tkzDefPoint} macro is used to define a point by assigning coordinates to it. This macro is based on \tkzNameMacro{coordinate}, a macro of \TIKZ. It can use \TIKZ-specific options such as \tkzname{shift}. If calculations are required then the \tkzNamePack{xfp} package is chosen. We can use Cartesian or polar coordinates.

\subsection{Defining a named point  \tkzcname{tkzDefPoint}}

\begin{NewMacroBox}{tkzDefPoint}{\oarg{local options}\parg{$x,y$}\marg{name} or \parg{$\alpha$:$d$}\marg{name}}%
\begin{tabular}{lll}%
arguments &  default & definition  \\ 
\midrule
\TAline{($x,y$)}{no default}{$x$ and $y$ are two dimensions, by default in cm.}
\TAline{($\alpha$:$d$)}{no default}{$\alpha$ is an angle in degrees, $d$ is a dimension}
\TAline{\{name\}}{no default}{Name assigned to the point: $A$, $T_a$ ,$P1$ etc ...}
\bottomrule
\end{tabular}

\medskip
The obligatory arguments of this macro are two dimensions expressed with decimals, in the first case they are two measures of length, in the second case they are a measure of length and the measure of an angle in degrees.

\medskip
\begin{tabular}{lll}%
\toprule
options             & default & definition  \\ 
\midrule
\TOline{label} {no default} {allows you to place a label at a predefined distance}
\TOline{shift} {no default} {adds $(x,y)$ or $(\alpha:d)$ to all coordinates}
\end{tabular}
\end{NewMacroBox}

\subsubsection{Cartesian coordinates }
 
\begin{tkzexample}[latex=7cm,small]
  \begin{tikzpicture}
  \tkzInit[xmax=5,ymax=5]
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(4,0){B}
  \tkzDefPoint(0,3){C} 
  \tkzDrawPolygon(A,B,C)
  \tkzDrawPoints(A,B,C)
  \end{tikzpicture}
\end{tkzexample}

\subsubsection{Calculations with \tkzNamePack{xfp}}

 \begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
  \tkzInit[xmax=4,ymax=4]
  \tkzGrid
  \tkzDefPoint(-1+2,sqrt(4)){O}
  \tkzDefPoint({3*ln(exp(1))},{exp(1)}){A}
  \tkzDefPoint({4*sin(pi/6)},{4*cos(pi/6)}){B}
  \tkzDrawPoints[color=blue](O,B,A)
\end{tikzpicture}
\end{tkzexample}


\subsubsection{Polar coordinates }

\begin{tkzexample}[latex=7cm,small]
  \begin{tikzpicture}
  \foreach \an [count=\i] in {0,60,...,300}
   { \tkzDefPoint(\an:3){A_\i}}
  \tkzDrawPolygon(A_1,A_...,A_6)
  \tkzDrawPoints(A_1,A_...,A_6)
  \end{tikzpicture}
\end{tkzexample}

\subsubsection{Calculations and coordinates}
You must follow the syntax of \tkzNamePack{xfp} here. It is always possible to go through \tkzNamePack{pgfmath} but in this case, the coordinates must be calculated before using the macro \tkzcname{tkzDefPoint}.

\begin{tkzexample}[latex=6cm,small]
  \begin{tikzpicture}[scale=.5]
  \foreach \an [count=\i] in {0,2,...,358}
   { \tkzDefPoint(\an:sqrt(sqrt(\an mm))){A_\i}}
   \tkzDrawPoints(A_1,A_...,A_180)
  \end{tikzpicture}
\end{tkzexample}


\subsubsection{Relative points}
First, we can use the \tkzNameEnv{scope} environment from \TIKZ.
In the following example, we have a way to define an equilateral triangle.

\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
  \tkzSetUpLine[color=blue!60]
 \begin{scope}[rotate=30]
  \tkzDefPoint(2,3){A}
  \begin{scope}[shift=(A)]
     \tkzDefPoint(90:5){B}
     \tkzDefPoint(30:5){C}
  \end{scope}
 \end{scope}
 \tkzDrawPolygon(A,B,C)
\tkzLabelPoints[above](B,C)
\tkzLabelPoints[below](A)
\tkzDrawPoints(A,B,C)
\end{tikzpicture}
\end{tkzexample}

%<--------------------------------------------------------------------------->
\subsection{Point relative to another: \tkzcname{tkzDefShiftPoint}}
\begin{NewMacroBox}{tkzDefShiftPoint}{\oarg{Point}\parg{$x,y$}\marg{name} or \parg{$\alpha$:$d$}\marg{name}}%
\begin{tabular}{lll}%
arguments &  default & definition \\
\midrule
\TAline{($x,y$)}{no default}{$x$ and $y$ are two dimensions, by default in cm.}
\TAline{($\alpha$:$d$)}{no default}{$\alpha$ is an angle in degrees, $d$ is a dimension}

\midrule
options &  default & definition \\

\midrule
\TOline{[pt]} {no default} {\tkzcname{tkzDefShiftPoint}[A](0:4)\{B\}}
\end{tabular}
\end{NewMacroBox}

\subsubsection{Isosceles triangle with  \tkzcname{tkzDefShiftPoint}}
This macro allows you to place one point relative to another. This is equivalent to a translation. Here is how to construct an isosceles triangle with main vertex $A$ and angle at vertex of $30^{\circ} $.

\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[rotate=-30]
 \tkzDefPoint(2,3){A}
 \tkzDefShiftPoint[A](0:4){B}
 \tkzDefShiftPoint[A](30:4){C}
 \tkzDrawSegments(A,B B,C C,A)
 \tkzMarkSegments[mark=|,color=red](A,B A,C)
 \tkzDrawPoints(A,B,C)
 \tkzLabelPoints(B,C)
 \tkzLabelPoints[above left](A)
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Equilateral triangle}
Let's see how to get an equilateral triangle (there is much simpler)

\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
 \tkzDefPoint(2,3){A}
 \tkzDefShiftPoint[A](30:3){B}
 \tkzDefShiftPoint[A](-30:3){C}
 \tkzDrawPolygon(A,B,C)
 \tkzDrawPoints(A,B,C)
 \tkzLabelPoints(B,C)
 \tkzLabelPoints[above left](A)
 \tkzMarkSegments[mark=|,color=red](A,B A,C B,C)
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Parallelogram}
There's a simpler way
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
 \tkzDefPoint(0,0){A}
 \tkzDefPoint(30:3){B}
 \tkzDefShiftPointCoord[B](10:2){C}
 \tkzDefShiftPointCoord[A](10:2){D}
 \tkzDrawPolygon(A,...,D)
 \tkzDrawPoints(A,...,D)
\end{tikzpicture}
\end{tkzexample}

%<--------------------------------------------------------------------------->
\subsection{Definition of multiple points: \tkzcname{tkzDefPoints}}

\begin{NewMacroBox}{tkzDefPoints}{\oarg{local options}\marg{$x_1/y_1/n_1,x_2/y_2/n_2$, ...}}%
$x_i$ and $y_i$ are the coordinates of a referenced point $n_i$

\begin{tabular}{lll}%
\toprule
arguments &  default  & example  \\
\midrule
\TAline{$x_i/y_i/n_i$}{}{\tkzcname{tkzDefPoints\{0/0/O,2/2/A\}}}
\end{tabular}

\medskip
\begin{tabular}{lll}%
options             & default & definition   \\ 
\midrule
\TOline{shift} {no default} {Adds $(x,y)$ or $(\alpha:d)$ to all coordinates}
\end{tabular}
\end{NewMacroBox}

\subsection{Create a triangle}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=1]
 \tkzDefPoints{0/0/A,4/0/B,4/3/C}
 \tkzDrawPolygon(A,B,C)
 \tkzDrawPoints(A,B,C)
\end{tikzpicture}
\end{tkzexample}

\subsection{Create a square}
Note here the syntax for drawing the polygon.
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=1]
 \tkzDefPoints{0/0/A,2/0/B,2/2/C,0/2/D}
 \tkzDrawPolygon(A,...,D)
 \tkzDrawPoints(A,B,C,D)
\end{tikzpicture}
\end{tkzexample}

\section{Special points}
The introduction of the dots was done in \tkzname{tkz-base}, the most important macro being \tkzcname{tkzDefPoint}. Here are some special points.
%<--------------------------------------------------------------------------->
\subsection{Middle of a segment \tkzcname{tkzDefMidPoint}}
It is a question of determining the middle of a segment.

\begin{NewMacroBox}{tkzDefMidPoint}{\parg{pt1,pt2}}%
The result is in \tkzname{tkzPointResult}. We can access it with \tkzcname{tkzGetPoint}.

 \medskip
\begin{tabular}{lll}%
\toprule
arguments & default & definition \\
\midrule
\TAline{(pt1,pt2)}{no default}{pt1 and pt2 are two points}
\end{tabular}
\end{NewMacroBox}

\subsubsection{Use of \tkzcname{tkzDefMidPoint}}
Review the use of \tkzcname{tkzDefPoint} in \tkzNamePack{tkz-base}.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
 \tkzDefPoint(2,3){A}
 \tkzDefPoint(4,0){B}
 \tkzDefMidPoint(A,B) \tkzGetPoint{C}
 \tkzDrawSegment(A,B)
 \tkzDrawPoints(A,B,C)
 \tkzLabelPoints[right](A,B,C)
\end{tikzpicture}
\end{tkzexample}

\subsection{Barycentric coordinates }

$pt_1$, $pt_2$, \dots, $pt_n$ being $n$ points, they define $n$ vectors $\overrightarrow{v_1}$, $\overrightarrow{v_2}$, \dots, $\overrightarrow{v_n}$ with the origin of the referential as the common endpoint. $\alpha_1$, $\alpha_2$,
\dots $\alpha_n$ are $n$ numbers, the vector obtained by:
\begin{align*}
  \frac{\alpha_1 \overrightarrow{v_1} + \alpha_2 \overrightarrow{v_2} + \cdots + \alpha_n \overrightarrow{v_n}}{\alpha_1
    + \alpha_2 + \cdots + \alpha_n}
\end{align*}
defines a single point.

\begin{NewMacroBox}{tkzDefBarycentricPoint}{\parg{pt1=$\alpha_1$,pt2=$\alpha_2$,\dots}}%
\begin{tabular}{lll}%
arguments & default & definition \\
\midrule
\TAline{(pt1=$\alpha_1$,pt2=$\alpha_2$,\dots)}{no default}{Each point has a assigned weight}
\bottomrule
\end{tabular}

\medskip
You need at least two points.
\end{NewMacroBox}


\subsubsection{Using \tkzcname{tkzDefBarycentricPoint} with two points}
In the following example, we obtain the barycentre of points $A$ and $B$ with coefficients $1$ and $2$, in other words:
\[
  \overrightarrow{AI}= \frac{2}{3}\overrightarrow{AB}
\]

\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
  \tkzDefPoint(2,3){A}
  \tkzDefShiftPointCoord[2,3](30:4){B}
  \tkzDefBarycentricPoint(A=1,B=2)
  \tkzGetPoint{I}
  \tkzDrawPoints(A,B,I)
  \tkzDrawLine(A,B)
  \tkzLabelPoints(A,B,I)
\end{tikzpicture}
\end{tkzexample}

\subsubsection{Using \tkzcname{tkzDefBarycentricPoint} with three points}
This time $M$ is simply the centre of gravity of the triangle. For reasons of simplification and homogeneity, there is also \tkzcname{tkzCentroid}.
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=.8]
  \tkzDefPoint(2,1){A}
  \tkzDefPoint(5,3){B}
  \tkzDefPoint(0,6){C}
  \tkzDefBarycentricPoint(A=1,B=1,C=1)
  \tkzGetPoint{M}
  \tkzDefMidPoint(A,B)  \tkzGetPoint{C'}
  \tkzDefMidPoint(A,C)  \tkzGetPoint{B'}
  \tkzDefMidPoint(C,B)  \tkzGetPoint{A'}
  \tkzDrawPolygon(A,B,C)
  \tkzDrawPoints(A',B',C')
  \tkzDrawPoints(A,B,C,M)
  \tkzDrawLines[add=0 and 1](A,M B,M C,M)
  \tkzLabelPoint(M){$M$}
  \tkzAutoLabelPoints[center=M](A,B,C)
  \tkzAutoLabelPoints[center=M,above right](A',B',C')
\end{tikzpicture}
\end{tkzexample}

\subsection{Internal Similitude Center}
The centres of the two homotheties in which two circles correspond are called external and internal centres of similitude.

\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.75,rotate=-30]
 \tkzDefPoint(0,0){O}
 \tkzDefPoint(4,-5){A}
 \tkzDefIntSimilitudeCenter(O,3)(A,1) 
 \tkzGetPoint{I}
 \tkzExtSimilitudeCenter(O,3)(A,1) 
 \tkzGetPoint{J}
 \tkzDefTangent[from with R= I](O,3 cm)  
 \tkzGetPoints{D}{E}
 \tkzDefTangent[from with R= I](A,1 cm)  
 \tkzGetPoints{D'}{E'}
 \tkzDefTangent[from  with R= J](O,3 cm) 
 \tkzGetPoints{F}{G}
 \tkzDefTangent[from with R= J](A,1 cm)   
 \tkzGetPoints{F'}{G'}
 \tkzDrawCircle[R,fill=red!50,opacity=.3](O,3 cm)
 \tkzDrawCircle[R,fill=blue!50,opacity=.3](A,1 cm)
 \tkzDrawSegments[add = .5 and .5,color=red](D,D' E,E')
 \tkzDrawSegments[add= 0 and 0.25,color=blue](J,F J,G)
 \tkzDrawPoints(O,A,I,J,D,E,F,G,D',E',F',G')
 \tkzLabelPoints[font=\scriptsize](O,A,I,J,D,E,F,G,D',E',F',G')
\end{tikzpicture}
\end{tkzexample}

\endinput


