Vector3f.java :  » Graphics-3D-2D-OpenGL » glscene » org » glscene » geometry » Android Open Source

Android Open Source » Graphics 3D 2D OpenGL » glscene 
glscene » org » glscene » geometry » Vector3f.java
package org.glscene.geometry;

import java.nio.ByteBuffer;

import org.glscene.util.DirectBufferable;

public final class Vector3f implements DirectBufferable {

  private float fX, fY, fZ;
  
  public static final Vector3f NullVector = new Vector3f(0, 0, 0);
  public static final Vector3f XVector = new Vector3f(1, 0, 0);
  public static final Vector3f YVector = new Vector3f(0, 1, 0);
  public static final Vector3f ZVector = new Vector3f(0, 0, 1);
  
  public Vector3f(float x, float y, float z) {
    fX = x;
    fY = y;
    fZ = z;
  }
  public Vector3f(Vector2f xy, float z) {
    fX = xy.getX();
    fY = xy.getY();
    fZ = z;
  }
  
  public float getX() { return fX; }
  public float getY() { return fY; }
  public float getZ() { return fZ; }
  public Vector2f getXY() { return new Vector2f(fX, fY); }
  
  public String toString() { 
    return "["+Float.toString(fX)+"; "+Float.toString(fY)+"; "+Float.toString(fZ)+"]"; 
  }
  
  public void putInto(ByteBuffer buffer) {
    buffer.putFloat(fX);
    buffer.putFloat(fY);
    buffer.putFloat(fZ);
  }
  
  public static Vector3f add (Vector3f a, Vector3f b) {
    return new Vector3f(a.fX+b.fX, a.fY+b.fY, a.fZ+b.fZ);
  }

  public static Vector3f sub (Vector3f a, Vector3f b) {
    return new Vector3f(a.fX-b.fX, a.fY-b.fY, a.fZ-b.fZ);
  }
  
  public static float dot (Vector3f a, Vector3f b) {
    return a.fX*b.fX+a.fY*b.fY+a.fZ*b.fZ;
  }
  
  public float length() {
    return (float) Math.sqrt((double) length2());
  }
  
  public float length2() {
    return fX*fX+fY*fY+fZ*fZ;
  }
  
  public Vector3f normalize() {
    float len = length();
    if (len>0) {
      float d = 1/len;
      return new Vector3f(fX*d, fY*d, fZ*d);
    } else {
      return NullVector; 
    }
  }

  public Vector3f adjustLength(float newLength) {
    float len = length();
    if (len>0) {
      float d = newLength/len;
      return new Vector3f(fX*d, fY*d, fZ*d);
    } else {
      return NullVector; 
    }
  }
  
  public Vector3f scale(float f) {
    return new Vector3f(fX*f, fY*f, fZ*f);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.