/* Auteur: Nicolas JANEY */ /* nicolas.janey@univ-fcomte.fr */ /* Octobre 2007 */ public class Direction { public float dx; public float dy; public float dz; public Direction() { dx = dy = 0.0F; dz = -1.0F; } public Direction(float dx,float dy,float dz) { this.dx = dx; this.dy = dy; this.dz = dz; } public Direction(Direction d) { dx = d.dx; dy = d.dy; dz = d.dz; } public Direction(Position p1,Position p2) { dx = p2.x-p1.x; dy = p2.y-p1.y; dz = p2.z-p1.z; normalise(); } public Direction(Position p1,Position p2,boolean normalisation) { dx = p2.x-p1.x; dy = p2.y-p1.y; dz = p2.z-p1.z; if ( normalisation ) normalise(); } public float norme() { return((float) Math.sqrt(dx*dx + dy*dy + dz*dz)); } public void normalise() { float norme = norme(); if ( norme != 0 ) { dx /= norme; dy /= norme; dz /= norme; } } public float produitScalaire(Direction d) { return(dx*d.dx + dy*d.dy + dz*d.dz); } public static float produitScalaire(Direction d1,Direction d2) { return(d1.dx*d2.dx + d1.dy*d2.dy + d1.dz*d2.dz); } public Direction produitVectoriel(Direction d) { return(new Direction(dy*d.dz - dz*d.dy, dz*d.dx - dx*d.dz, dx*d.dy - dy*d.dx)); } public static Direction produitVectoriel(Direction d1,Direction d2) { return(new Direction(d1.dy*d2.dz - d1.dz*d2.dy, d1.dz*d2.dx - d1.dx*d2.dz, d1.dx*d2.dy - d1.dy*d2.dx)); } public boolean testVecteurNul() { return((dx == 0.0F) && (dy == 0.0F) && (dz == 0.0F)); } public boolean testCodirection(Direction d) { float ps = produitScalaire(d); if ( ps < 0.0F ) return(false); return(ps == norme()*d.norme()); } public String toString() { return("["+dx+","+dy+","+dz+"]"); } }