\chapter{Transformations géométriques et coordonnées homogènes}
{\bf On se place dans le cadre des coordonnées homogènes (à 4 composantes).  Il est possible de définir toute transformation affine par une simple multiplication matricielle~:
\begin{equation}[x,y,z,1] \cdot \left [ \begin{array}{cccc}a & b & c & 0 \\ d & e & f & 0 \\ g & h & i & 0 \\ j & k & l & 1\\ \end{array} \right ]\end{equation}
 
 Lors de la transformation des coordonnées utilisateur vers les coordonnées écran, un dispositif d'affichage concatène habituellement trois matrices :
 \begin{equation}M = M_v \cdot M_{proj\_persp} \cdot M_s\end{equation}
 
 La première de ces matrices ($M_v$) est une matrice de passage des coordonnées utilisateur (point de vue) vers des coordonénes universelles par des translations et rotations, telles que l'on regarde dans le sens de $z$-négatif et que l'observateur se soit situé à l'origine.
 
 La seconde matrice ($M_{proj\_persp}$) est une matrice dite perspective (en projection centrale) qui ramène les coordonnées précédentes vers le volume canonique $[-1,1]^3$.
 
 La dernière ($M_s$) est une matrice de projection qui ramène dans les coordonnées 2D de l'appareil (coordonnées entières et positives).
 
 On s'intéresse ici à la matrice suivante :
 \begin{equation}
 M_{proj\_persp} = \left (
 \begin{array}{cccc}
 \dfrac{2n}{r-l} & 0 & 0 & 0 \\
 0 & \dfrac{2n}{t-b} & 0 & 0 \\
 \dfrac{l+r}{l-r} & \dfrac{b+t}{b-t} & \dfrac{f+n}{n-f} & 1 \\
 0 & 0 & \dfrac{2fn}{f-n} & 0 \\
 \end{array}
 \right )
 \end{equation}
}
\section{Dans la matrice (3.1), quelles sont les composantes qui définissent la partie \og translation\fg\ de la transformation ?}
D'après la propriété de transposition d'un produit de matrices 
$$\left (A \cdot B\right)^T = B^T \cdot A^T$$
on obtient le produit matriciel suivant :
$$\left [ \begin{array}{cccc}a & d & g & j \\ b & e & h & k \\ c & f & i & l \\ 0 & 0 & 0 & 1\\ \end{array} \right ] \cdot \left[\begin{array}{c} x \\ y \\ z \\ 1\end{array} \right ]$$
On retrouve donc la matrice de coordonnées homogène du cours, pour laquelle on sait que les composantes correspondantes à la translation sont $$j,k,l$$

\noteJef{Ici, je ne sais pas trop... D'après l'assistant, il faut transposer la matrice $M_{proj\_persp}$, ce qui nous donne des résultats totalement différents.
On peut simplement spécifier que telle qu'elle est là, la translation serait $\mathbf{v} = (0,0,1)^T$ i.e. les 3 premières lignes de la 4ème colonne.}\\

\noteThom{En fait, à la base moi je pensais aussi prendre les 3premières lignes de la 4ème colonne juste comme ça, mais ca m'a parrut bisarre que ce soit tout des 0.  Puis en regardant bien à la page 79, on voit qu'il prend les 3 premières lignes de la 4ème colonne, mais le produit est transposé par rapport à ce qu'il nous donne ici. C'est pour ça que j'ai d'abord transposé tout pour ensuite prendre les 3 premières lignes de la 4 ème colonne et ca donne j,k,l... non ?}\\

\noteFredA{Sinon il suffit de simplement effectuer la multiplication matricielle de l'énoncé telle quelle (ce qui revient en fait à appliquer la tranformation au vecteur [x, y, z, 1]), et on remarque que dans le vecteur obtenu (le résultat de la transformation), les paramètres $j$, $k$ et $l$ sont les seuls coefficients qu'on ajoute à chaque coordonnées (on peut même voir que $j$ représente la translation selon X, $k$ selon Y et $l$ selon Z) : 
$$\left [ \begin{array}{cccc}ax + dy + gz + \textbf{j} \\
                             bx + ey + hz + \textbf{k} \\
                             cx + fy + iz + \textbf{l} \\
                             1\\ \end{array} \right ]$$}

\section{A quoi correspondent les variables $n,f,r,l,b,t$ dans la matrice (3.3)?}
Dans le cadre de la projection perspective, un point 3D est dans une pyramide tronquée (à gauche dans le schéma). On veut mapper les points
de cette pyramide dans un cube avec le repère centré (le repère de la scène).

\begin{figure}[htbps]
	\begin{center}
		\includegraphics[scale=.75]{./images/gl_projectionmatrix01.eps}
	\end{center}
\end{figure}

\medskip
\begin{itemize}
\item Le $n$ correspond à la coordonnée $Z$ de la face la plus proche de l'origine du repère de la vue en perspective ($n$ear) 
\item Le $f$ correspond à la coordonnée $Z$ de la face la plus éloignée de l'origine du repère de la vue en perspective ($f$ar) 
\item Le $r$ correspond à la coordonnée $X$ du côté droit de la face la plus proche de l'origine du repère ($r$ight)
\item Le $l$ correspond à la coordonnée $X$ du côté gauche de la face la plus proche de l'origine du repère ($l$eft)
\item Le $t$ correspond à la coordonnée $Y$ du côté haut de la face la plus proche de l'origine du repère ($t$op)
\item Le $b$ correspond à la coordonnée $Y$ du côté bas de la face la plus proche de l'origine du repère ($b$ottom)
\end{itemize}


\section{Comment est effectuée l'opération non linéaire qui permet d'effectuer la projection centrale proprement dite ?}
\noteJef{Pas certain de la réponse}

D'abord, on passe par les coordonnées homogènes : supposons que le plan dans lequel on doit projecter est le plan perpendiculaire à l'axe $Z$ et à une
distance $d$ de l'observateur. Supposons également que ce plan soit centré à l'origine. Il suffit de poser : 
\begin{equation}
	\left\{
		\begin{array}{c}
			x' = \dfrac{x}{1+\frac{z}{d}} ;\\
			y' = 	\dfrac{y}{1+\frac{z}{d}} ;\\
			z' = \dfrac{z}{1+\frac{z}{d}} ;
		\end{array}
	\right.
\end{equation}
Il suffit alors d'appliquer une matrice de cisaillement par $\frac{1}{d}$ : 
\begin{equation}
	\left(
		\begin{tabular}{c}
			$x'$\\ $y'$\\ $z'$\\$1 + \dfrac{z}{d}$
		\end{tabular}
	\right)
	= 
	\left[
		\begin{tabular}{cccc}
			$1$ & 0 & 0 & 0\\ 
			$0$ & 1 & 0 & 0\\
			 0  & 0 & 1 & 0\\ 
			 0  & 0 & $\dfrac{1}{d}$ & 1
		\end{tabular}	
	\right]	
	\left(
		\begin{tabular}{c}
			$x$\\ $y$\\ $z$\\$1$
		\end{tabular}
	\right)
\end{equation}
\section{Prenons $n=-1; f=-11; l=-1; r=1; b=-1; t=1$.  Construire la matrice et effectuer le changement de coordonnées pour un point situé en $(0,0,5)$.}
$$
 M_{proj\_persp}
 = 
 \left (
 \begin{array}{cccc}
 \dfrac{2(-1)}{1-(-1)} & 0 & 0 & 0 \\
 0 & \dfrac{2(-1)}{1-(-1)} & 0 & 0 \\
 \dfrac{-1+1}{-1-1} & \dfrac{-1+1}{-1-1} & \dfrac{-11+(-1)}{-1-(-11)} & 1 \\
 0 & 0 & \dfrac{2(-11)(-1)}{(-11)-(-1)} & 0 \\
 \end{array}
 \right )
 =
 \left (
 \begin{array}{cccc}
 -1 & 0 & 0 & 0 \\
 0 & -1 & 0 & 0 \\
 0 & 0 & -1.2 & 1 \\
 0 & 0 & -2.2 & 0 \\
 \end{array}
 \right )
$$
Soit $P'$ le point résultant, il vient : 
\begin{equation}
	P'_H = 
 	\left (
		 \begin{array}{cccc}
			-1 & 0 & 0 & 0 \\
 			0 & -1 & 0 & 0 \\
			0 & 0 & -1.2 & 1 \\
		 	0 & 0 & -2.2 & 0 \\
		 \end{array}
	 \right )
	 \left[ 
		 \begin{array}{c}
			0 \\
 			0  \\
			5  \\
		 	1
		 \end{array}
	\right]	 
\end{equation}

On a donc : 
\begin{equation}
	P'_H = 
	\left[ 
		 \begin{array}{c}
			-1 . 0 + 0 . 0 + 0 . 5 + 0 . 1 \\
 			0 . 0 + (-1) . 0 + 0 . 5 + 0 . 1  \\
			0 . 0 + 0 . 0 + (-1.2) . 5 + 1 . 1  \\
		 	0 . 0 + 0. 0 + (-2.2) . 5 + 0 . 1
		 \end{array}
	\right]	 	
	= 
	\left[ 
		 \begin{array}{c}
			0 \\
 			0 \\
			-5 \\
		 	-11\\
		 \end{array}
	\right]	 	
\end{equation}
On normalise et on obtient finalement :
\begin{equation}
	P' = \left( 0 , 0 , \dfrac{-5}{-11}\right)^T = (0,0,\frac{5}{11})^T
\end{equation}
\subsection{Le point résultat est-il situé dans le volume canonique ?}
On calcule la distance entre $P'$ et l'origine : 
\begin{equation}
	d(\mathcal{O},P') = \sqrt{0^2 + 0^2 + \left(\dfrac{5}{11}\right)^2} = \dfrac{5}{11}  \leq 1
\end{equation}
Le point est donc bien dans le volume canonique
\section{La matrice (3.3) est elle inversible ? (en d'autres termes, a-t-on une bijection entre le volume canonique et le volume de départ ?)}
Oui elle l'est, pour s'en convaincre, on peut calculer le déterminant. 
\subsection{ Qu'en est-il de la profondeur (coordonnée $z$ après application de la transformation) ? }
\todo
\subsection{Doit elle encore servir pour l'affichage proprement dit (sur un dispositif 2D comme un écran) ?}
Elle peut servir pour l'affichage dans le cadre de l'algorithme du z-buffer.