import java.lang.Math; /** * Un punto que representa una posicion en el espacio de coordenada (x, y, z), * especificado en precision float. * @author Carlos Cortes */ public class Point3D { private float x; private float y; private float z; /** * Construye e inicializa un punto en el origen (0, 0, 0) del espacio de * coordenadas. */ public Point3D() { x = 0f; y = 0f; z = 0f; } /** * Construye e inicializa un punto en la posicion (x, y, z) especifica en * el espacio de coordenadas. */ public Point3D(float px, float py, float pz) { x = px; y = py; z = pz; } /** * Retorna la coordenada X del punto en presicion float. * @return La coordenada X del punto en presicion float. */ public float getX() { return x; } /** * Retorna la coordenada Y del punto en presicion float. * @return La coordenada Y del punto en presicion float. */ public float getY() { return y; } /** * Retorna la coordenada Z del punto en presicion float. * @return La coordenada Z del punto en presicion float. */ public float getZ() { return z; } /** * Cambia la coordenada X de 'este' punto al valor especificado por 'f'. * @param f La nueva coordenada X de 'este' punto. */ public void setX(float f) { x = f; } /** * Cambia la coordenada Y de 'este' punto al valor especificado por 'f'. * @param f La nueva coordenada Y de 'este' punto. */ public void setY(float f) { y = f; } /** * Cambia la coordenada Z de 'este' punto al valor especificado por 'f'. * @param f La nueva coordenada Z de 'este' punto. */ public void setZ(float f) { z = f; } /** * Resta (vectorial) a 'este' punto, el punto 'p'. * @param p Punto que es restado a 'este'. */ public void menos(Point3D p) { this.x -= p.getX(); this.y -= p.getY(); this.z -= p.getZ(); } /** * Retorna distancia de 'este' punto al origen. * @return La distancia de 'este' punto al origen. */ public float getMagnitud() { return (float)Math.sqrt(x*x + y*y + z*z); } /** * Escala 'este' punto para que tenga magnitud unitaria, conservando * su direccion. */ public void hacerUnitario() { float mag = getMagnitud(); x /= mag; y /= mag; z /= mag; } /** * Retorna el resultado del producto punto de 'este' punto con el punto 'p'. * @param p Otro punto para calcular el producto punto con 'este'. */ public float pPunto(Point3D p) { return x * p.getX() + y * p.getY() + z * p.getZ(); } /** * Convierte 'este' punto al que resulta de hacer el producto cruz con el * punto 'p'. * @param p Otro punto para calcular el producto cruz con 'este'. */ public void pCruz(Point3D p) { float i = y * p.getZ() - z * p.getY(); float j = z * p.getX() - x * p.getZ(); float k = x * p.getY() - y * p.getX(); x = i; y = j; z = k; } /** * Cambia las coordenadas (x, y, z) del punto, a las que tendria si 'ejes' * fueran los ejes canonicos. Util para hacer rotaciones y escalamientos. * @param ejes Ejes usados para hacer la normalizacion. * @see Ejes3D */ public void normalizar(Ejes3D ejes) { float _x = pPunto(ejes.getD()); float _y = pPunto(ejes.getH()); float _z = pPunto(ejes.getV()); x = _x; y = _y; z = _z; } /** * Redondea cada coordenada a su entero mas cercano. */ public void ajustar() { x = (float)Math.rint(x); y = (float)Math.rint(y); z = (float)Math.rint(z); } /** * Retorna una copia de 'este' punto. * @return Una copia de 'este' punto. */ public Point3D clone() { return new Point3D(x, y, z); } }