/**
* La classe Direction3D
derive de {@link CoordonneesHomogenes3D CoordonneesHomogenes3D}
* pour permettre l'instanciation d'objets de type direction en trois dimensions.
*
* @author Nicolas Janey
* @author nicolas.janey@univ-fcomte.fr
* @version 1.0, 12/11/08
*/
public class Direction3D extends CoordonneesHomogenes3D {
/**
* Constructeur pour une Direction3D
orientée en (0.0, 0.0, 1.0).
*
*/
public Direction3D() {
super(0.0,0.0,1.0,0.0);
}
/**
* Constructeur pour une Direction3D
orientée en (x, y, z).
*
* @param x la coordonnee x affectee.
* @param y la coordonnee x affectee.
* @param z la coordonnee x affectee.
*
*/
public Direction3D(double x,double y,double z) {
super(x,y,z,0.0);
}
/**
* Constructeur pour une Direction3D
orientée en (x,y,z).
*
* @param d l'objet Direction3D
d'initialisation par copie.
*
*/
public Direction3D(Direction3D d) {
super(d);
}
/**
* Constructeur pour une Direction3D
orientee selon le vecteur norme
* defini entre deux {@link Position3D Position3D}.
*
* @param pi l'objet {@link Position3D Position3D} de depart.
* @param pf l'objet {@link Position3D Position3D} d'arrivee.
*
*/
public Direction3D(Position3D pi,
Position3D pf) throws ArithmeticException {
double dx = pf.c[0]-pi.c[0];
double dy = pf.c[1]-pi.c[1];
double dz = pf.c[2]-pi.c[2];
double d = Math.sqrt(dx*dx+dy*dy+dz*dz);
if ( d == 0.0 ) {
throw new ArithmeticException(); }
c = new double[4];
c[0] = dx/d;
c[1] = dy/d;
c[2] = dz/d;
c[3] = 0.0;
}
}