\newpage

\section{Class \Iclass{vector}} % (fold)
\label{sec:class_vector}

In fact, they are more a class of oriented segments than vectors in the strict mathematical sense.

A vector is defined by giving two points (i.e. two affixes). 
|V.AB = vector : new (z.A,z.B)| creates the vector $\overrightarrow(AB)$, i.e. the oriented segment with origin $A$ representing a vector. A few rudimentary operations are defined, such as sum, subtraction and multiplication by a scalar.

The sum is defined as follows:

Let V.AB + V.CD result in a vector V.AE defined as follows

If $\overrightarrow{CD} = \overrightarrow{BE} $ then $\overrightarrow{AB} + \overrightarrow{CD} = \overrightarrow{AB} + \overrightarrow{BE} =\overrightarrow(AE)$

\begin{mybox}
   Creation |V.AB = vector: new (z.A,z.B)|
\end{mybox}

\begin{Verbatim}
z.A = ...
z.B = ...
z.C = ...
z.D = ...
V.AB = vector : new (z.A,z.B)
V.CD = vector : new (z.C,z.D)
V.AE = V.AB + V.CD  % possible V.AB : add (V.CD)
z.E  = V.AE.head % we recover the final point (head)
\end{Verbatim}

\subsection{Attributes of a vector} % (fold)
\label{sub:attributes_of_a_vector}

% subsection attributes_of_a_vector (end)
\vspace{1em}
\bgroup
\small
\catcode`_=12
\captionof{table}{Vector attributes.}\label{vector:att}  
\begin{tabular}{lll}
\toprule
\textbf{Attributes}      & \textbf{Application}& \textbf{Example}\\
\Iattr{vector}{tail}       &  |V.AB.t = z.A|   & [\ref{ssub:methods}]\\
\Iattr{vector}{head}       &  |V.AB.head = z.B|  &  [\ref{ssub:methods}] \\
\Iattr{vector}{type}     &  |V.AB.type = 'vector'|  & \\  
\Iattr{vector}{slope}    &  |V.AB.slope| & [\ref{ssub:example_vector_attributes}] \\
\Iattr{vector}{length}   &  |V.AB.norm|& [\ref{ssub:example_vector_attributes} ]\\
\Iattr{vector}{mtx}   &  |V.AB.mtx| & The result is a column matrix |{{V.AB.t},{V.AB.h}}|\\
\bottomrule
\end{tabular}
\egroup

\subsubsection{Example vector attributes} % (fold)
\label{ssub:example_vector_attributes}

\begin{minipage}{.6\textwidth}
\begin{Verbatim}
\directlua{%
init_elements() 
  z.O         = point: new (0,0)
  z.A         = point: new (0,1)
  z.B         = point: new (3,4)
  L.AB        = line : new ( z.A , z.B )
  z.C         = point: new (1,2)
  z.D         = point: new (2,1)
  u           = vector : new (z.A,z.B)
  v           = vector : new (z.C,z.D)
  w =u+v
  z.E = w.head
}
\begin{tikzpicture}[gridded]
  \tkzGetNodes
  \tkzLabelPoints(A,B,C,D,O,E)
  \tkzDrawSegments[->,red](A,B C,D A,E)
  \tkzLabelSegment(A,B){$\overrightarrow{u}$}
  \tkzLabelSegment(C,D){$\overrightarrow{v}$}
  \tkzLabelSegment(A,E){$\overrightarrow{w}$}
\end{tikzpicture}
$\overrightarrow{w}$ has slope :
$\tkzDN{\tkzUseLua{math.deg(w.slope)}}^\circ$
\end{Verbatim}
\end{minipage}
\begin{minipage}{.4\textwidth}
\directlua{%
init_elements() 
  z.O         = point: new (0,0)
  z.A         = point: new (0,1)
  z.B         = point: new (3,4)
  L.AB        = line : new ( z.A , z.B )
  z.C         = point: new (1,2)
  z.D         = point: new (2,1)
  u           = vector : new (z.A,z.B)
  v           = vector : new (z.C,z.D)
  w           = u+v
  z.E         = w.head
}
\begin{tikzpicture}[gridded]
  \tkzGetNodes
  \tkzLabelPoints(A,B,C,D,O,E)
  \tkzDrawSegments[->,red](A,B C,D A,E)
  \tkzLabelSegment(A,B){$\overrightarrow{u}$}
  \tkzLabelSegment(C,D){$\overrightarrow{v}$}
  \tkzLabelSegment(A,E){$\overrightarrow{w}$}
\end{tikzpicture}

$\overrightarrow{w}$ has slope :
$\tkzDN{\tkzUseLua{math.deg(w.slope)}}^\circ$
\end{minipage}
% subsubsection example_vector_attributes (end)

\subsection{Methods of the class vector} % (fold)
\label{sub:methods_of_the_class_vector}

\vspace{1em}
\bgroup
\catcode`_=12
\small
\captionof{table}{Methods of the class vector.}\label{vector:met}
\begin{tabular}{lll}
\toprule
 \textbf{Metamethods} & \textbf{Application}& \\
 \midrule
\Imeth{vector}{\_\_add (u,v)}  & |V.AB + V.CD| & \\
\Imeth{vector}{\_\_sub (u,v)}  & |V.AB - V.CD| & \\
\Imeth{vector}{\_\_unm (u)}  & |V.CD = -V.AB| & \\
\Imeth{vector}{\_\_mul (k,u)}  & |V.CD = k*V.AB| & \\
 \midrule
 \textbf{Methods} & \textbf{Application}& \\
\Imeth{vector}{new(pt, pt)}    & |V.AB = vector: new (z.A,z.B) | &  \\
\Imeth{vector}{normalize(V)}   & |V.AB : normalize () | &  \\
\Imeth{vector}{orthogonal(d)}  & |V.AB : orthogonal (d) | &  \\
\Imeth{vector}{scale(d)}       & |V.CD = V.AB : scale (2) | &  $\overrightarrow{CD} = 2\overrightarrow{AB} $ \\
\Imeth{vector}{at (V)}    & |V.DB = V.AC : at (z.D) | & $\overrightarrow{DB} = \overrightarrow{AC} $ \\    
\bottomrule 
\end{tabular}
\egroup

\subsubsection{Example of methods} % (fold)
\label{ssub:example_of_methods}

\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\directlua{%
  init_elements() 
  z.O   = point: new (0,0)
  z.A   = point: new (0,1)
  z.B   = point: new (3,4)
  V.AB  = vector: new (z.A,z.B)
  V.AC  = V.AB : scale (.5)
  z.C   = V.AC.head
  V.AD  = V.AB : orthogonal ()
  z.D   = V.AD.head
  V.AN  = V.AB : normalize ()
  z.N   = V.AN.head
  V.AR  = V.AB : orthogonal(2*math.sqrt(2))
  z.R   = V.AR.head
  V.AX  = 2*V.AC - V.AR
  z.X   = V.AX.head
  V.OY  = V.AX : at (z.O)
  z.Y   = V.OY.head
}
\begin{tikzpicture}[gridded,scale = .75]
  \tkzGetNodes
  \tkzDrawSegments[>=stealth,->,red](A,B A,C A,D A,N A,R A,X O,Y)
  \tkzLabelPoints(A,B,C,D,O,N,R,X,Y)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
\directlua{%
init_elements() 
  z.O   = point: new (0,0)
  z.A   = point: new (0,1)
  z.B   = point: new (3,4)
  V.AB  = vector: new (z.A,z.B)
  V.AC  = V.AB : scale (.5)
  z.C   = V.AC.head
  V.AD  = V.AB : orthogonal ()
  z.D   = V.AD.head
  V.AN  = V.AB : normalize ()
  z.N   = V.AN.head
  V.AR  = V.AB : orthogonal (2*math.sqrt(2))
  z.R   = V.AR.head
  V.AX  = 2*V.AC - V.AR
  z.X   = V.AX.head
  V.OY  = V.AX : at (z.O)
  z.Y   = V.OY.head
}
\begin{tikzpicture}[gridded,scale = .75]
  \tkzGetNodes
  \tkzDrawSegments[>=stealth,->,red](A,B A,C A,D A,N A,R A,X O,Y)
  \tkzLabelPoints(A,B,C,D,O,N,R,X,Y)
\end{tikzpicture}
\end{minipage}
% subsubsection example_of_methods (end)
% section class_vector (end)
\endinput