/** * Especifica tres vectores que pueden ser considerados como los ejes * 'longitudinal' (d), 'horizontal' (h) y 'vertical' (v), pueden apuntar * en cualquier direccion. Pero en este proyecto, lo mas util, fue usar * tres vectores unitarios y perpendiculares entre si, usados para proyectar * puntos3D de acuerdo a la posicion y orientacion de la camara. * @author Carlos Cortes */ public class Ejes3D { private Point3D d; private Point3D h; private Point3D v; /** * Construye e inicializa un trio de ejes unitarios (tres vectores * unitarios) en las direcciones canonicas. */ public Ejes3D() { d = new Point3D(1,0,0); h = new Point3D(0,1,0); v = new Point3D(0,0,1); } /** * Construye e inicializa un trio de ejes con las direcciones especificadas * por 'vd', 'vh' y 'vv'. * @param vd Hacia donde apuntara el eje D. * @param vh Hacia donde apuntara el eje H. * @param vv Hacia donde apuntara el eje V. */ public Ejes3D(Point3D vd, Point3D vh, Point3D vv) { d = vd; h = vh; v = vv; } /** * Crea los ejes tomando la 'posicion' de la camara y el punto hacia donde * 'apunta'. * @param pos Posicion de la camara. * @param vista Hacia donde apunta. */ public Ejes3D(Point3D pos, Point3D vista) { d = pos.clone(); d.menos(vista); d.hacerUnitario(); h = new Point3D(0,0,1); h.pCruz(d); h.hacerUnitario(); v = d.clone(); v.pCruz(h); } /** * Retorna el eje D (el que apunta hacia el observador) */ public Point3D getD() { return d; } /** * Retorna el eje H (el que apunta horizontalmente, segun el observador) */ public Point3D getH() { return h; } /** * Retorna el eje V (el que apunta verticalmente, segun el observador) */ public Point3D getV() { return v; } /** * Retorna una copia de 'este' Ejes3D. * @return Una copia de 'este' Ejes3D. */ public Ejes3D clone() { Point3D _d = d.clone(); Point3D _h = h.clone(); Point3D _v = v.clone(); return new Ejes3D(_d, _h, _v); } /** * Invoca el metodo 'ajustar' de los tres vectores que componen 'este' Ejes3D. * @see Point3D */ public void ajustar() { d.ajustar(); h.ajustar(); v.ajustar(); } }