home *** CD-ROM | disk | FTP | other *** search
/ AI Game Programming Wisdom / AIGameProgrammingWisdom.iso / SourceCode / 07 DecisionMaking Architectures / 01 Isla, Blumberg / Vec2.java < prev    next >
Encoding:
Java Source  |  2001-09-25  |  2.0 KB  |  110 lines

  1. package bb;
  2.  
  3. /*
  4. A basic 2-dimensional vector class.
  5.  
  6. @author naimad
  7. */
  8.  
  9. public class Vec2 {
  10.  
  11.     double[] v = new double[2];
  12.     
  13.     public Vec2() {
  14.         v[0] = 0.0;
  15.         v[1] = 0.0;
  16.     }
  17.     
  18.     public Vec2(double x, double y) {
  19.         v[0] = x;
  20.         v[1] = y;
  21.     }
  22.     
  23.     public Vec2(double[] xy) {
  24.         v[0] = xy[0];
  25.         v[1] = xy[1];
  26.     }
  27.     
  28.     public Vec2(Vec2 vv) {
  29.         v[0] = vv.x();
  30.         v[1] = vv.y();
  31.     }
  32.     
  33.     public double x() {
  34.         return v[0];
  35.     }
  36.     
  37.     public double y() {
  38.         return v[1];
  39.     }
  40.     
  41.     public void x(double xx) {
  42.         v[0] = xx;
  43.     }
  44.     
  45.     public void y(double yy) {
  46.         v[1] = yy;
  47.     }
  48.     
  49.     public void set(double x, double y) {
  50.         v[0] = x;
  51.         v[1] = y;
  52.     }
  53.  
  54.     public void set(double[] vv) {
  55.         v[0] = vv[0];
  56.         v[1] = vv[1];
  57.     }
  58.  
  59.     public void set(Vec2 vv) {
  60.         v[0] = vv.x();
  61.         v[1] = vv.y();
  62.     }
  63.     
  64.     public static void add(Vec2 v1, Vec2 v2, Vec2 vout) {
  65.         vout.x(v1.x()+v2.x());
  66.         vout.y(v1.y()+v2.y());
  67.     }
  68.     
  69.     public static void sub(Vec2 v1, Vec2 v2, Vec2 vout) {
  70.         vout.x(v1.x()-v2.x());
  71.         vout.y(v1.y()-v2.y());
  72.     }
  73.     
  74.     public void scale(double s) {
  75.         v[0]*=s;
  76.         v[1]*=s;
  77.     }
  78.     
  79.     public double mag() {
  80.         return Math.sqrt(v[0]*v[0] + v[1]*v[1]);
  81.     }
  82.     
  83.     public void normalize() {
  84.         scale(1.0/mag());
  85.     }
  86.     
  87.     public double dot(Vec2 vv) {
  88.         return v[0]*vv.x() + v[1]*vv.y();
  89.     }
  90.     
  91.     public double distance(Vec2 vec) {
  92.         return Math.sqrt(distanceSquared(vec));
  93.     }
  94.  
  95.     public double distanceSquared(Vec2 vec) {
  96.         double v1 = vec.x()-v[0];
  97.         double v2 = vec.y()-v[1];
  98.         return v1*v1 + v2*v2;
  99.     }
  100.     
  101.     public Object clone() {
  102.         return new Vec2(this);
  103.     }
  104.     
  105.     public String toString() {
  106.         return "["+v[0]+", " + v[1] + "]";
  107.     }
  108.  
  109. }
  110.