\section{Transformations}
Dans ce qui suit :
\begin{itemize}
    \item l'argument \argu{L} est soit un complexe, soit une liste de complexes soit une liste de listes de complexes,
    \item la droite \argu{d} est une liste de deux complexes : un point de la droite et un vecteur directeur.
  \end{itemize}
  
\subsection{affin}
La fonction \cmd{ld.affin(L, d, v, k)} renvoie l'image de \argu{L} par l'affinité de base la droite \argu{d}, parallèlement au vecteur \argu{v} et de rapport \argu{k}.

\subsection{ftransform}
La fonction \cmd{ld.ftransform(L, f)} renvoie l'image de \argu{L} par la fonction \argu{f} qui doit être une fonction de la variable complexe. Si un des éléments de \argu{L} est le complexe \val{cpx.Jump} alors celui-ci est renvoyé tel quel dans le résultat.

\subsection{hom}
La fonction \cmd{ld.hom(L, factor \fac{, center})} renvoie l'image de \argu{L} par l'homothétie de centre \argu{center} et de rapport \argu{factor}. Par défaut, l'argument \argu{center} vaut $0$.

\subsection{inv}
La fonction \cmd{ld.inv(L, radius \fac{, center})} renvoie l'image de \argu{L} par l'inversion par rapport au cercle de centre \argu{center} et de rayon \argu{radius}. Par défaut, l'argument \argu{center} vaut $0$.

\subsection{proj}
La fonction \cmd{ld.proj(L, d)} renvoie l'image de \argu{L} par la projection orthogonale sur la droite \argu{d}.

\subsection{projO}
La fonction \cmd{ld.projO(L, d, v)} renvoie l'image de \argu{L} par la projection sur la droite \argu{d} parallèlement au vecteur \argu{v}.

\subsection{rotate}
La fonction \cmd{ld.rotate(L, angle \fac{, center})} renvoie l'image de \argu{L} par la rotation de centre \argu{center} et d'angle \argu{angle} (en degrés). Par défaut, l'argument \argu{center} vaut $0$.  

\subsection{shift}
La fonction \cmd{ld.shift(L, u)} renvoie l'image de \argu{L} par la translation de vecteur \argu{u}.

\subsection{simil}
La fonction \cmd{ld.simil(L, factor, angle \fac{, center})} renvoie l'image de \argu{L} par la similitude de centre \argu{center}, de rapport \emph{factor} et d'angle \emph{angle} (en degrés). Par défaut, l'argument \emph{center} vaut arguargu$0$.

\subsection{sym}
La fonction \cmd{ld.sym(L, d)} renvoie l'image de \argu{L} par la symétrie orthogonale d'axe la droite \argu{d}.

\subsection{symG}
La fonction \cmd{ld.symG(L, d, v)} renvoie l'image de \argu{L} par la symétrie par rapport à la droite \argu{d} suivie de la translation de vecteur \argu{v} (symétrie glissée).

\subsection{symO}
La fonction \cmd{ld.symO(L, d, v)} renvoie l'image de \argu{L} par la symétrie par rapport à la droite \argu{d} et parallèlement au vecteur \argu{v} (symétrie oblique).

\begin{demo}{Utilisation de transformations}
\begin{luadraw}{name=Sierpinski}
local ld = luadraw
local g = ld.graph:new{window={-5,5,-5,5},size={10,10}}
local i, hom = ld.cpx.I, ld.hom
local rand = math.random
local A, B, C = 5*i, -5-5*i, 5-5*i -- triangle initial
local T, niv = {{A,B,C}}, 5
for k = 1, niv do
    T = ld.concat( hom(T,0.5,A), hom(T,0.5,B), hom(T,0.5,C) )
end
for _,cp in ipairs(T) do
    g:Filloptions("full", ld.rgb(rand(),rand(),rand()))
    g:Dpolyline(cp,true)
end
g:Show()
\end{luadraw}
\end{demo}
