Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Implementation of the 4 dimensional vector

/* $Id: Vector4f.java,v 1.1 2005/08/20 10:15:55 joda Exp $  * Created on 22.07.2004  */ //package net.sourceforge.ftgl.util; /**  * Implementation of the 4 dimensional vector.  *   * @author Ralf Petring  * @author funsheep  */ public class Vector4f implements Cloneable {   /** x component */   public float x;   /** y component */   public float y;   /** z component */   public float z;   /** w component */   public float w;   /**    * Constructs a new vector whith (0,0,0,1) as coordinates.    */   public Vector4f() {     this(0, 0, 0, 1);   }   /**    * Creates a new vector.    *     * @param x    *            the x coordinate    * @param y    *            the y coordinate    * @param z    *            the z coordinate    * @param w    *            the w coordinate    */   public Vector4f(final float x, final float y, final float z, final float w) {     this.x = x;     this.y = y;     this.z = z;     this.w = w;   }   /**    * Copyconstructor.    *     * @param v    *            the vector to copy    */   public Vector4f(final Vector4f v) {     this(v.x, v.y, v.z, v.w);   }   /**    * Adds the given values to this vector.    *     * @param dx    *            the x value to add    * @param dy    *            the y value to add    * @param dz    *            the z value to add    * @return this vector    */   public Vector4f add(final float dx, final float dy, final float dz) {     this.x += dx;     this.y += dy;     this.z += dz;     return this;   }   /**    * Adds a vector to this vector.    *     * @param v    *            the vector to add    * @return this vector    */   public Vector4f add(final Vector4f v) {     return this.add(v.x, v.y, v.z);   }   /**    * Substracts the given values from this vector.    *     * @param dx    *            the x value to substract    * @param dy    *            the y value to substract    * @param dz    *            the z value to substract    * @return this vector    */   public Vector4f sub(final float dx, final float dy, final float dz) {     return this.add(-dx, -dy, -dz);   }   /**    * Substracts a given vector from this one.    *     * @param v    *            the vector to substract    * @return this vector    */   public Vector4f sub(final Vector4f v) {     return this.add(-v.x, -v.y, -v.z);   }   /**    * Multiplies the coordinates of this vector with the given float values.    *     * @param dx    *            the value to be multiplied the x coordinate    * @param dy    *            the value to be multiplied the y coordinate    * @param dz    *            the value to be multiplied the z coordinate    * @return this vector    */   public Vector4f scale(final float dx, final float dy, final float dz) {     this.x *= dx;     this.y *= dy;     this.z *= dz;     return this;   }   /**    * Multiplies the coordinates of this vector with the given float value.    *     * @param d    *            the value to be multiplied with all coordinates    * @return this vector    */   public Vector4f scale(final float d) {     return this.scale(d, d, d);   }   /**    * Returns the squared length of this vector.    *     * @return the squared length of this vector    */   public final float lengthSquared() {     return (this.x * this.x + this.y * this.y + this.z * this.z); // TODO                                     // needs                                     // w?   }   /**    * Returns the length of this vector.    *     * @return the length of this vector    */   public final float length() {     // TODO needs w?     return (float) Math.sqrt(this.lengthSquared());   }   /**    * Normalizes this vector.    *     * @return this vector    */   public final Vector4f normalize() {     // TODO needs w?     float norm = 1f / this.length();     this.x *= norm;     this.y *= norm;     this.z *= norm;     return this;   }   /**    * Calculates the dotprodukt of this vector and the given vector.    *     * @param v    *            the second vector    * @return the scalarproduct between this and the second vector    */   public final float dot(final Vector4f v) {     return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; // TODO                                       // w                                       // component                                       // also?   }   /**    * {@inheritDoc}    */   public Object clone() {     try {       return super.clone();     } catch (CloneNotSupportedException e) {       throw new RuntimeException("the roof is on fire", e);     }   }   /**    * {@inheritDoc}    */   public String toString() {     return "[" + this.x + "," + this.y + "," + this.z + "," + this.w + "]";   } }