/** * La classe Ortho 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 Ortho 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; } }