La classe Ortho comporte une seule méthode: un constructeur réalisant le calcul de la matrice de transformation.
/**
* La classe <code>Ortho</code> permet l'instanciation d'objets
* de type transformation geometrique
* pour mise en projection parallele orthographique.
*
* @author Nicolas Janey
* @author nicolas.janey@univ-fcomte.fr
* @version 1.0, 12/11/08
*/
public class Ortho extends TransformationGeometrique3D {
/**
* Constructeur pour une transformation <code>Ortho</code> definie par la position
* de l'observateur, un point directement vise et la conservation des verticales.
*
* @param observateur la {@link Position3D Position3D} definissant
* la position de l'observateur
* @param pointVise la {@link Position3D Position3D} definissant
* la position du point directement vise par l'observateur
*/
public Ortho(Position3D observateur,Position3D pointVise) {
super();
Direction3D n = new Direction3D(observateur,pointVise);
double nx = n.getX();
double ny = n.getY();
double nz = n.getZ();
double pox = observateur.getX();
double poy = observateur.getY();
double poz = observateur.getZ();
double a = 1.0/Math.sqrt(1.0-ny*ny);
c[0][0] = -a*nz;
c[0][1] = 0.0;
c[0][2] = a*nx;
c[0][3] = a*(pox*nz-poz*nx);
c[1][0] = -a*nx*ny;
c[1][1] = 1.0/a;
c[1][2] = -a*nz*ny;
c[1][3] = (a*ny*(pox*nx+poz*nz)-poy/a);
c[2][0] = -nx;
c[2][1] = -ny;
c[2][2] = -nz;
c[2][3] = (pox*nx+poy*ny+poz*nz);
c[3][0] = 0.0;
c[3][1] = 0.0;
c[3][2] = 0.0;
c[3][3] = 1.0;
}
}