Dart Documentationvector_mathVector2

Vector2 class

2D column vector.

class Vector2 {
 final Float32List storage = new Float32List(2);

 /// Set the values of [result] to the minimum of [a] and [b] for each line.
 static void min(Vector2 a, Vector2 b, Vector2 result) {
   result.x = Math.min(a.x, b.x);
   result.y = Math.min(a.y, b.y);
 }

 /// Set the values of [result] to the maximum of [a] and [b] for each line.
 static void max(Vector2 a, Vector2 b, Vector2 result) {
   result.x = Math.max(a.x, b.x);
   result.y = Math.max(a.y, b.y);
 }

 /// Construct a new vector with the specified values.
 Vector2(double x_, double y_) {
   setValues(x_, y_);
 }

 /// Initialized with values from [array] starting at [offset].
 Vector2.array(List<double> array, [int offset=0]) {
   int i = offset;
   storage[1] = array[i+1];
   storage[0] = array[i+0];
 }

 /// Zero vector.
 Vector2.zero();

 /// Copy of [other].
 Vector2.copy(Vector2 other) {
   setFrom(other);
 }

 /// Set the values of the vector.
 Vector2 setValues(double x_, double y_) {
   storage[0] = x_;
   storage[1] = y_;
   return this;
 }

 /// Zero the vector.
 Vector2 setZero() {
   storage[0] = 0.0;
   storage[1] = 0.0;
   return this;
 }

 /// Set the values by copying them from [other].
 Vector2 setFrom(Vector2 other) {
   storage[1] = other.storage[1];
   storage[0] = other.storage[0];
   return this;
 }

 /// Splat [arg] into all lanes of the vector.
 Vector2 splat(double arg) {
   storage[0] = arg;
   storage[1] = arg;
   return this;
 }

 /// Returns a printable string
 String toString() => '[${storage[0]},${storage[1]}]';

 /// Negate.
 Vector2 operator-() => new Vector2(-storage[0], -storage[1]);

 /// Subtract two vectors.
 Vector2 operator-(Vector2 other) => new Vector2(storage[0] - other.storage[0],
                                        storage[1] - other.storage[1]);

 /// Add two vectors.
 Vector2 operator+(Vector2 other) => new Vector2(storage[0] + other.storage[0],
                                        storage[1] + other.storage[1]);

 /// Scale.
 Vector2 operator/(double scale) {
   var o = 1.0 / scale;
   return new Vector2(storage[0] * o, storage[1] * o);
 }

 /// Scale.
 Vector2 operator*(double scale) {
   var o = scale;
   return new Vector2(storage[0] * o, storage[1] * o);
 }

 double operator[](int i) => storage[i];

 void operator[]=(int i, double v) { storage[i] = v; }

 /// Length.
 double get length {
   double sum;
   sum = (storage[0] * storage[0]);
   sum += (storage[1] * storage[1]);
   return Math.sqrt(sum);
 }

 /// Length squared.
 double get length2 {
   double sum;
   sum = (storage[0] * storage[0]);
   sum += (storage[1] * storage[1]);
   return sum;
 }

 /// Normalize [this].
 Vector2 normalize() {
   double l = length;
   // TODO(johnmccutchan): Use an epsilon.
   if (l == 0.0) {
     return this;
   }
   l = 1.0 / l;
   storage[0] *= l;
   storage[1] *= l;
   return this;
 }

 /// Normalize [this]. Returns length of vector before normalization.
 double normalizeLength() {
   double l = length;
   if (l == 0.0) {
     return 0.0;
   }
   l = 1.0 / l;
   storage[0] *= l;
   storage[1] *= l;
   return l;
 }

 /// Normalized copy of [this].
 Vector2 normalized() {
   return new Vector2.copy(this).normalize();
 }

 /// Normalize vector into [out].
 Vector2 normalizeInto(Vector2 out) {
   out.setFrom(this);
   return out.normalize();
 }

 /// Inner product.
 double dot(Vector2 other) {
   double sum;
   sum = storage[0] * other.storage[0];
   sum += storage[1] * other.storage[1];
   return sum;
 }

 /// Cross product.
 double cross(Vector2 other) {
   return storage[0] * other.storage[1] - storage[1] * other.storage[0];
 }

 /// Rotate [this] by 90 degrees then scale it. Store result in [out]. Return [out].
 Vector2 scaleOrthogonalInto(double scale, Vector2 out) {
   out.setValues(-scale * storage[1], scale * storage[0]);
   return out;
 }

 /// Reflect [this].
 Vector2 reflect(Vector2 normal) {
   sub(normal.scaled(2 * normal.dot(this)));
   return this;
 }

 /// Reflected copy of [this].
 Vector2 reflected(Vector2 normal) {
   return new Vector2.copy(this).reflect(normal);
 }

 /// Relative error between [this] and [correct]
 double relativeError(Vector2 correct) {
   double correct_norm = correct.length;
   double diff_norm = (this - correct).length;
   return diff_norm/correct_norm;
 }

 /// Absolute error between [this] and [correct]
 double absoluteError(Vector2 correct) {
   return (this - correct).length;
 }

 /// True if any component is infinite.
 bool get isInfinite {
   bool is_infinite = false;
   is_infinite = is_infinite || storage[0].isInfinite;
   is_infinite = is_infinite || storage[1].isInfinite;
   return is_infinite;
 }

 /// True if any component is NaN.
 bool get isNaN {
   bool is_nan = false;
   is_nan = is_nan || storage[0].isNaN;
   is_nan = is_nan || storage[1].isNaN;
   return is_nan;
 }

 /// Add [arg] to [this].
 Vector2 add(Vector2 arg) {
   storage[0] = storage[0] + arg.storage[0];
   storage[1] = storage[1] + arg.storage[1];
   return this;
 }

 /// Subtract [arg] from [this].
 Vector2 sub(Vector2 arg) {
   storage[0] = storage[0] - arg.storage[0];
   storage[1] = storage[1] - arg.storage[1];
   return this;
 }

 /// Multiply entries in [this] with entries in [arg].
 Vector2 multiply(Vector2 arg) {
   storage[0] = storage[0] * arg.storage[0];
   storage[1] = storage[1] * arg.storage[1];
   return this;
 }

 /// Divide entries in [this] with entries in [arg].
 Vector2 divide(Vector2 arg) {
   storage[0] = storage[0] / arg.storage[0];
   storage[1] = storage[1] / arg.storage[1];
   return this;
 }

 /// Scale [this].
 Vector2 scale(double arg) {
   storage[1] = storage[1] * arg;
   storage[0] = storage[0] * arg;
   return this;
 }

 Vector2 scaled(double arg) {
   return clone().scale(arg);
 }

 /// Negate.
 Vector2 negate() {
   storage[1] = -storage[1];
   storage[0] = -storage[0];
   return this;
 }

 /// Absolute value.
 Vector2 absolute() {
   storage[1] = storage[1].abs();
   storage[0] = storage[0].abs();
   return this;
 }

 /// Clone of [this].
 Vector2 clone() {
   return new Vector2.copy(this);
 }

 /// Copy [this] into [arg]. Returns [arg].
 Vector2 copyInto(Vector2 arg) {
   arg.storage[1] = storage[1];
   arg.storage[0] = storage[0];
   return arg;
 }

 /// Copies [this] into [array] starting at [offset].
 void copyIntoArray(List<double> array, [int offset=0]) {
   array[offset+1] = storage[1];
   array[offset+0] = storage[0];
 }

 /// Copies elements from [array] into [this] starting at [offset].
 void copyFromArray(List<double> array, [int offset=0]) {
   storage[1] = array[offset+1];
   storage[0] = array[offset+0];
 }

 set xy(Vector2 arg) {
   storage[0] = arg.storage[0];
   storage[1] = arg.storage[1];
 }
 set yx(Vector2 arg) {
   storage[1] = arg.storage[0];
   storage[0] = arg.storage[1];
 }
 set r(double arg) => storage[0] = arg;
 set g(double arg) => storage[1] = arg;
 set s(double arg) => storage[0] = arg;
 set t(double arg) => storage[1] = arg;
 set x(double arg) => storage[0] = arg;
 set y(double arg) => storage[1] = arg;
 set rg(Vector2 arg) {
   storage[0] = arg.storage[0];
   storage[1] = arg.storage[1];
 }
 set gr(Vector2 arg) {
   storage[1] = arg.storage[0];
   storage[0] = arg.storage[1];
 }
 set st(Vector2 arg) {
   storage[0] = arg.storage[0];
   storage[1] = arg.storage[1];
 }
 set ts(Vector2 arg) {
   storage[1] = arg.storage[0];
   storage[0] = arg.storage[1];
 }
 Vector2 get xx => new Vector2(storage[0], storage[0]);
 Vector2 get xy => new Vector2(storage[0], storage[1]);
 Vector2 get yx => new Vector2(storage[1], storage[0]);
 Vector2 get yy => new Vector2(storage[1], storage[1]);
 Vector3 get xxx => new Vector3(storage[0], storage[0], storage[0]);
 Vector3 get xxy => new Vector3(storage[0], storage[0], storage[1]);
 Vector3 get xyx => new Vector3(storage[0], storage[1], storage[0]);
 Vector3 get xyy => new Vector3(storage[0], storage[1], storage[1]);
 Vector3 get yxx => new Vector3(storage[1], storage[0], storage[0]);
 Vector3 get yxy => new Vector3(storage[1], storage[0], storage[1]);
 Vector3 get yyx => new Vector3(storage[1], storage[1], storage[0]);
 Vector3 get yyy => new Vector3(storage[1], storage[1], storage[1]);
 Vector4 get xxxx => new Vector4(storage[0], storage[0], storage[0], storage[0]);
 Vector4 get xxxy => new Vector4(storage[0], storage[0], storage[0], storage[1]);
 Vector4 get xxyx => new Vector4(storage[0], storage[0], storage[1], storage[0]);
 Vector4 get xxyy => new Vector4(storage[0], storage[0], storage[1], storage[1]);
 Vector4 get xyxx => new Vector4(storage[0], storage[1], storage[0], storage[0]);
 Vector4 get xyxy => new Vector4(storage[0], storage[1], storage[0], storage[1]);
 Vector4 get xyyx => new Vector4(storage[0], storage[1], storage[1], storage[0]);
 Vector4 get xyyy => new Vector4(storage[0], storage[1], storage[1], storage[1]);
 Vector4 get yxxx => new Vector4(storage[1], storage[0], storage[0], storage[0]);
 Vector4 get yxxy => new Vector4(storage[1], storage[0], storage[0], storage[1]);
 Vector4 get yxyx => new Vector4(storage[1], storage[0], storage[1], storage[0]);
 Vector4 get yxyy => new Vector4(storage[1], storage[0], storage[1], storage[1]);
 Vector4 get yyxx => new Vector4(storage[1], storage[1], storage[0], storage[0]);
 Vector4 get yyxy => new Vector4(storage[1], storage[1], storage[0], storage[1]);
 Vector4 get yyyx => new Vector4(storage[1], storage[1], storage[1], storage[0]);
 Vector4 get yyyy => new Vector4(storage[1], storage[1], storage[1], storage[1]);
 double get r => storage[0];
 double get g => storage[1];
 double get s => storage[0];
 double get t => storage[1];
 double get x => storage[0];
 double get y => storage[1];
 Vector2 get rr => new Vector2(storage[0], storage[0]);
 Vector2 get rg => new Vector2(storage[0], storage[1]);
 Vector2 get gr => new Vector2(storage[1], storage[0]);
 Vector2 get gg => new Vector2(storage[1], storage[1]);
 Vector3 get rrr => new Vector3(storage[0], storage[0], storage[0]);
 Vector3 get rrg => new Vector3(storage[0], storage[0], storage[1]);
 Vector3 get rgr => new Vector3(storage[0], storage[1], storage[0]);
 Vector3 get rgg => new Vector3(storage[0], storage[1], storage[1]);
 Vector3 get grr => new Vector3(storage[1], storage[0], storage[0]);
 Vector3 get grg => new Vector3(storage[1], storage[0], storage[1]);
 Vector3 get ggr => new Vector3(storage[1], storage[1], storage[0]);
 Vector3 get ggg => new Vector3(storage[1], storage[1], storage[1]);
 Vector4 get rrrr => new Vector4(storage[0], storage[0], storage[0], storage[0]);
 Vector4 get rrrg => new Vector4(storage[0], storage[0], storage[0], storage[1]);
 Vector4 get rrgr => new Vector4(storage[0], storage[0], storage[1], storage[0]);
 Vector4 get rrgg => new Vector4(storage[0], storage[0], storage[1], storage[1]);
 Vector4 get rgrr => new Vector4(storage[0], storage[1], storage[0], storage[0]);
 Vector4 get rgrg => new Vector4(storage[0], storage[1], storage[0], storage[1]);
 Vector4 get rggr => new Vector4(storage[0], storage[1], storage[1], storage[0]);
 Vector4 get rggg => new Vector4(storage[0], storage[1], storage[1], storage[1]);
 Vector4 get grrr => new Vector4(storage[1], storage[0], storage[0], storage[0]);
 Vector4 get grrg => new Vector4(storage[1], storage[0], storage[0], storage[1]);
 Vector4 get grgr => new Vector4(storage[1], storage[0], storage[1], storage[0]);
 Vector4 get grgg => new Vector4(storage[1], storage[0], storage[1], storage[1]);
 Vector4 get ggrr => new Vector4(storage[1], storage[1], storage[0], storage[0]);
 Vector4 get ggrg => new Vector4(storage[1], storage[1], storage[0], storage[1]);
 Vector4 get gggr => new Vector4(storage[1], storage[1], storage[1], storage[0]);
 Vector4 get gggg => new Vector4(storage[1], storage[1], storage[1], storage[1]);
 Vector2 get ss => new Vector2(storage[0], storage[0]);
 Vector2 get st => new Vector2(storage[0], storage[1]);
 Vector2 get ts => new Vector2(storage[1], storage[0]);
 Vector2 get tt => new Vector2(storage[1], storage[1]);
 Vector3 get sss => new Vector3(storage[0], storage[0], storage[0]);
 Vector3 get sst => new Vector3(storage[0], storage[0], storage[1]);
 Vector3 get sts => new Vector3(storage[0], storage[1], storage[0]);
 Vector3 get stt => new Vector3(storage[0], storage[1], storage[1]);
 Vector3 get tss => new Vector3(storage[1], storage[0], storage[0]);
 Vector3 get tst => new Vector3(storage[1], storage[0], storage[1]);
 Vector3 get tts => new Vector3(storage[1], storage[1], storage[0]);
 Vector3 get ttt => new Vector3(storage[1], storage[1], storage[1]);
 Vector4 get ssss => new Vector4(storage[0], storage[0], storage[0], storage[0]);
 Vector4 get ssst => new Vector4(storage[0], storage[0], storage[0], storage[1]);
 Vector4 get ssts => new Vector4(storage[0], storage[0], storage[1], storage[0]);
 Vector4 get sstt => new Vector4(storage[0], storage[0], storage[1], storage[1]);
 Vector4 get stss => new Vector4(storage[0], storage[1], storage[0], storage[0]);
 Vector4 get stst => new Vector4(storage[0], storage[1], storage[0], storage[1]);
 Vector4 get stts => new Vector4(storage[0], storage[1], storage[1], storage[0]);
 Vector4 get sttt => new Vector4(storage[0], storage[1], storage[1], storage[1]);
 Vector4 get tsss => new Vector4(storage[1], storage[0], storage[0], storage[0]);
 Vector4 get tsst => new Vector4(storage[1], storage[0], storage[0], storage[1]);
 Vector4 get tsts => new Vector4(storage[1], storage[0], storage[1], storage[0]);
 Vector4 get tstt => new Vector4(storage[1], storage[0], storage[1], storage[1]);
 Vector4 get ttss => new Vector4(storage[1], storage[1], storage[0], storage[0]);
 Vector4 get ttst => new Vector4(storage[1], storage[1], storage[0], storage[1]);
 Vector4 get ttts => new Vector4(storage[1], storage[1], storage[1], storage[0]);
 Vector4 get tttt => new Vector4(storage[1], storage[1], storage[1], storage[1]);
}

Static Methods

void min(Vector2 a, Vector2 b, Vector2 result) #

Set the values of result to the minimum of a and b for each line.

static void min(Vector2 a, Vector2 b, Vector2 result) {
 result.x = Math.min(a.x, b.x);
 result.y = Math.min(a.y, b.y);
}

void max(Vector2 a, Vector2 b, Vector2 result) #

Set the values of result to the maximum of a and b for each line.

static void max(Vector2 a, Vector2 b, Vector2 result) {
 result.x = Math.max(a.x, b.x);
 result.y = Math.max(a.y, b.y);
}

Constructors

new Vector2(double x_, double y_) #

Construct a new vector with the specified values.

Vector2(double x_, double y_) {
 setValues(x_, y_);
}

new Vector2.array(List<double> array, [int offset = 0]) #

Initialized with values from array starting at offset.

Vector2.array(List<double> array, [int offset=0]) {
 int i = offset;
 storage[1] = array[i+1];
 storage[0] = array[i+0];
}

new Vector2.copy(Vector2 other) #

Copy of other.

Vector2.copy(Vector2 other) {
 setFrom(other);
}

new Vector2.zero() #

Zero vector.

Vector2.zero();

Properties

double g #

double get g => storage[1];
set g(double arg) => storage[1] = arg;

final Vector2 gg #

Vector2 get gg => new Vector2(storage[1], storage[1]);

final Vector3 ggg #

Vector3 get ggg => new Vector3(storage[1], storage[1], storage[1]);

final Vector4 gggg #

Vector4 get gggg => new Vector4(storage[1], storage[1], storage[1], storage[1]);

final Vector4 gggr #

Vector4 get gggr => new Vector4(storage[1], storage[1], storage[1], storage[0]);

final Vector3 ggr #

Vector3 get ggr => new Vector3(storage[1], storage[1], storage[0]);

final Vector4 ggrg #

Vector4 get ggrg => new Vector4(storage[1], storage[1], storage[0], storage[1]);

final Vector4 ggrr #

Vector4 get ggrr => new Vector4(storage[1], storage[1], storage[0], storage[0]);

Vector2 gr #

Vector2 get gr => new Vector2(storage[1], storage[0]);
set gr(Vector2 arg) {
 storage[1] = arg.storage[0];
 storage[0] = arg.storage[1];
}

final Vector3 grg #

Vector3 get grg => new Vector3(storage[1], storage[0], storage[1]);

final Vector4 grgg #

Vector4 get grgg => new Vector4(storage[1], storage[0], storage[1], storage[1]);

final Vector4 grgr #

Vector4 get grgr => new Vector4(storage[1], storage[0], storage[1], storage[0]);

final Vector3 grr #

Vector3 get grr => new Vector3(storage[1], storage[0], storage[0]);

final Vector4 grrg #

Vector4 get grrg => new Vector4(storage[1], storage[0], storage[0], storage[1]);

final Vector4 grrr #

Vector4 get grrr => new Vector4(storage[1], storage[0], storage[0], storage[0]);

final bool isInfinite #

True if any component is infinite.

bool get isInfinite {
 bool is_infinite = false;
 is_infinite = is_infinite || storage[0].isInfinite;
 is_infinite = is_infinite || storage[1].isInfinite;
 return is_infinite;
}

final bool isNaN #

True if any component is NaN.

bool get isNaN {
 bool is_nan = false;
 is_nan = is_nan || storage[0].isNaN;
 is_nan = is_nan || storage[1].isNaN;
 return is_nan;
}

final double length #

Length.

double get length {
 double sum;
 sum = (storage[0] * storage[0]);
 sum += (storage[1] * storage[1]);
 return Math.sqrt(sum);
}

final double length2 #

Length squared.

double get length2 {
 double sum;
 sum = (storage[0] * storage[0]);
 sum += (storage[1] * storage[1]);
 return sum;
}

double r #

double get r => storage[0];
set r(double arg) => storage[0] = arg;

Vector2 rg #

Vector2 get rg => new Vector2(storage[0], storage[1]);
set rg(Vector2 arg) {
 storage[0] = arg.storage[0];
 storage[1] = arg.storage[1];
}

final Vector3 rgg #

Vector3 get rgg => new Vector3(storage[0], storage[1], storage[1]);

final Vector4 rggg #

Vector4 get rggg => new Vector4(storage[0], storage[1], storage[1], storage[1]);

final Vector4 rggr #

Vector4 get rggr => new Vector4(storage[0], storage[1], storage[1], storage[0]);

final Vector3 rgr #

Vector3 get rgr => new Vector3(storage[0], storage[1], storage[0]);

final Vector4 rgrg #

Vector4 get rgrg => new Vector4(storage[0], storage[1], storage[0], storage[1]);

final Vector4 rgrr #

Vector4 get rgrr => new Vector4(storage[0], storage[1], storage[0], storage[0]);

final Vector2 rr #

Vector2 get rr => new Vector2(storage[0], storage[0]);

final Vector3 rrg #

Vector3 get rrg => new Vector3(storage[0], storage[0], storage[1]);

final Vector4 rrgg #

Vector4 get rrgg => new Vector4(storage[0], storage[0], storage[1], storage[1]);

final Vector4 rrgr #

Vector4 get rrgr => new Vector4(storage[0], storage[0], storage[1], storage[0]);

final Vector3 rrr #

Vector3 get rrr => new Vector3(storage[0], storage[0], storage[0]);

final Vector4 rrrg #

Vector4 get rrrg => new Vector4(storage[0], storage[0], storage[0], storage[1]);

final Vector4 rrrr #

Vector4 get rrrr => new Vector4(storage[0], storage[0], storage[0], storage[0]);

double s #

double get s => storage[0];
set s(double arg) => storage[0] = arg;

final Vector2 ss #

Vector2 get ss => new Vector2(storage[0], storage[0]);

final Vector3 sss #

Vector3 get sss => new Vector3(storage[0], storage[0], storage[0]);

final Vector4 ssss #

Vector4 get ssss => new Vector4(storage[0], storage[0], storage[0], storage[0]);

final Vector4 ssst #

Vector4 get ssst => new Vector4(storage[0], storage[0], storage[0], storage[1]);

final Vector3 sst #

Vector3 get sst => new Vector3(storage[0], storage[0], storage[1]);

final Vector4 ssts #

Vector4 get ssts => new Vector4(storage[0], storage[0], storage[1], storage[0]);

final Vector4 sstt #

Vector4 get sstt => new Vector4(storage[0], storage[0], storage[1], storage[1]);

Vector2 st #

Vector2 get st => new Vector2(storage[0], storage[1]);
set st(Vector2 arg) {
 storage[0] = arg.storage[0];
 storage[1] = arg.storage[1];
}

final Float32List storage #

final Float32List storage = new Float32List(2)

final Vector3 sts #

Vector3 get sts => new Vector3(storage[0], storage[1], storage[0]);

final Vector4 stss #

Vector4 get stss => new Vector4(storage[0], storage[1], storage[0], storage[0]);

final Vector4 stst #

Vector4 get stst => new Vector4(storage[0], storage[1], storage[0], storage[1]);

final Vector3 stt #

Vector3 get stt => new Vector3(storage[0], storage[1], storage[1]);

final Vector4 stts #

Vector4 get stts => new Vector4(storage[0], storage[1], storage[1], storage[0]);

final Vector4 sttt #

Vector4 get sttt => new Vector4(storage[0], storage[1], storage[1], storage[1]);

double t #

double get t => storage[1];
set t(double arg) => storage[1] = arg;

Vector2 ts #

Vector2 get ts => new Vector2(storage[1], storage[0]);
set ts(Vector2 arg) {
 storage[1] = arg.storage[0];
 storage[0] = arg.storage[1];
}

final Vector3 tss #

Vector3 get tss => new Vector3(storage[1], storage[0], storage[0]);

final Vector4 tsss #

Vector4 get tsss => new Vector4(storage[1], storage[0], storage[0], storage[0]);

final Vector4 tsst #

Vector4 get tsst => new Vector4(storage[1], storage[0], storage[0], storage[1]);

final Vector3 tst #

Vector3 get tst => new Vector3(storage[1], storage[0], storage[1]);

final Vector4 tsts #

Vector4 get tsts => new Vector4(storage[1], storage[0], storage[1], storage[0]);

final Vector4 tstt #

Vector4 get tstt => new Vector4(storage[1], storage[0], storage[1], storage[1]);

final Vector2 tt #

Vector2 get tt => new Vector2(storage[1], storage[1]);

final Vector3 tts #

Vector3 get tts => new Vector3(storage[1], storage[1], storage[0]);

final Vector4 ttss #

Vector4 get ttss => new Vector4(storage[1], storage[1], storage[0], storage[0]);

final Vector4 ttst #

Vector4 get ttst => new Vector4(storage[1], storage[1], storage[0], storage[1]);

final Vector3 ttt #

Vector3 get ttt => new Vector3(storage[1], storage[1], storage[1]);

final Vector4 ttts #

Vector4 get ttts => new Vector4(storage[1], storage[1], storage[1], storage[0]);

final Vector4 tttt #

Vector4 get tttt => new Vector4(storage[1], storage[1], storage[1], storage[1]);

double x #

double get x => storage[0];
set x(double arg) => storage[0] = arg;

final Vector2 xx #

Vector2 get xx => new Vector2(storage[0], storage[0]);

final Vector3 xxx #

Vector3 get xxx => new Vector3(storage[0], storage[0], storage[0]);

final Vector4 xxxx #

Vector4 get xxxx => new Vector4(storage[0], storage[0], storage[0], storage[0]);

final Vector4 xxxy #

Vector4 get xxxy => new Vector4(storage[0], storage[0], storage[0], storage[1]);

final Vector3 xxy #

Vector3 get xxy => new Vector3(storage[0], storage[0], storage[1]);

final Vector4 xxyx #

Vector4 get xxyx => new Vector4(storage[0], storage[0], storage[1], storage[0]);

final Vector4 xxyy #

Vector4 get xxyy => new Vector4(storage[0], storage[0], storage[1], storage[1]);

Vector2 xy #

Vector2 get xy => new Vector2(storage[0], storage[1]);
set xy(Vector2 arg) {
 storage[0] = arg.storage[0];
 storage[1] = arg.storage[1];
}

final Vector3 xyx #

Vector3 get xyx => new Vector3(storage[0], storage[1], storage[0]);

final Vector4 xyxx #

Vector4 get xyxx => new Vector4(storage[0], storage[1], storage[0], storage[0]);

final Vector4 xyxy #

Vector4 get xyxy => new Vector4(storage[0], storage[1], storage[0], storage[1]);

final Vector3 xyy #

Vector3 get xyy => new Vector3(storage[0], storage[1], storage[1]);

final Vector4 xyyx #

Vector4 get xyyx => new Vector4(storage[0], storage[1], storage[1], storage[0]);

final Vector4 xyyy #

Vector4 get xyyy => new Vector4(storage[0], storage[1], storage[1], storage[1]);

double y #

double get y => storage[1];
set y(double arg) => storage[1] = arg;

Vector2 yx #

Vector2 get yx => new Vector2(storage[1], storage[0]);
set yx(Vector2 arg) {
 storage[1] = arg.storage[0];
 storage[0] = arg.storage[1];
}

final Vector3 yxx #

Vector3 get yxx => new Vector3(storage[1], storage[0], storage[0]);

final Vector4 yxxx #

Vector4 get yxxx => new Vector4(storage[1], storage[0], storage[0], storage[0]);

final Vector4 yxxy #

Vector4 get yxxy => new Vector4(storage[1], storage[0], storage[0], storage[1]);

final Vector3 yxy #

Vector3 get yxy => new Vector3(storage[1], storage[0], storage[1]);

final Vector4 yxyx #

Vector4 get yxyx => new Vector4(storage[1], storage[0], storage[1], storage[0]);

final Vector4 yxyy #

Vector4 get yxyy => new Vector4(storage[1], storage[0], storage[1], storage[1]);

final Vector2 yy #

Vector2 get yy => new Vector2(storage[1], storage[1]);

final Vector3 yyx #

Vector3 get yyx => new Vector3(storage[1], storage[1], storage[0]);

final Vector4 yyxx #

Vector4 get yyxx => new Vector4(storage[1], storage[1], storage[0], storage[0]);

final Vector4 yyxy #

Vector4 get yyxy => new Vector4(storage[1], storage[1], storage[0], storage[1]);

final Vector3 yyy #

Vector3 get yyy => new Vector3(storage[1], storage[1], storage[1]);

final Vector4 yyyx #

Vector4 get yyyx => new Vector4(storage[1], storage[1], storage[1], storage[0]);

final Vector4 yyyy #

Vector4 get yyyy => new Vector4(storage[1], storage[1], storage[1], storage[1]);

Operators

double operator [](int i) #

double operator[](int i) => storage[i];

void operator []=(int i, double v) #

void operator[]=(int i, double v) { storage[i] = v; }

Vector2 operator +(Vector2 other) #

Add two vectors.

Vector2 operator+(Vector2 other) => new Vector2(storage[0] + other.storage[0],
                                      storage[1] + other.storage[1]);

Vector2 operator -() #

Negate.

Vector2 operator-() => new Vector2(-storage[0], -storage[1]);

Vector2 operator -(Vector2 other) #

Subtract two vectors.

Vector2 operator-(Vector2 other) => new Vector2(storage[0] - other.storage[0],
                                      storage[1] - other.storage[1]);

Vector2 operator *(double scale) #

Scale.

Vector2 operator*(double scale) {
 var o = scale;
 return new Vector2(storage[0] * o, storage[1] * o);
}

Vector2 operator /(double scale) #

Scale.

Vector2 operator/(double scale) {
 var o = 1.0 / scale;
 return new Vector2(storage[0] * o, storage[1] * o);
}

Methods

Vector2 absolute() #

Absolute value.

Vector2 absolute() {
 storage[1] = storage[1].abs();
 storage[0] = storage[0].abs();
 return this;
}

double absoluteError(Vector2 correct) #

Absolute error between this and correct

double absoluteError(Vector2 correct) {
 return (this - correct).length;
}

Vector2 add(Vector2 arg) #

Add arg to this.

Vector2 add(Vector2 arg) {
 storage[0] = storage[0] + arg.storage[0];
 storage[1] = storage[1] + arg.storage[1];
 return this;
}

Vector2 clone() #

Clone of this.

Vector2 clone() {
 return new Vector2.copy(this);
}

void copyFromArray(List<double> array, [int offset = 0]) #

Copies elements from array into this starting at offset.

void copyFromArray(List<double> array, [int offset=0]) {
 storage[1] = array[offset+1];
 storage[0] = array[offset+0];
}

Vector2 copyInto(Vector2 arg) #

Copy this into arg. Returns arg.

Vector2 copyInto(Vector2 arg) {
 arg.storage[1] = storage[1];
 arg.storage[0] = storage[0];
 return arg;
}

void copyIntoArray(List<double> array, [int offset = 0]) #

Copies this into array starting at offset.

void copyIntoArray(List<double> array, [int offset=0]) {
 array[offset+1] = storage[1];
 array[offset+0] = storage[0];
}

double cross(Vector2 other) #

Cross product.

double cross(Vector2 other) {
 return storage[0] * other.storage[1] - storage[1] * other.storage[0];
}

Vector2 divide(Vector2 arg) #

Divide entries in this with entries in arg.

Vector2 divide(Vector2 arg) {
 storage[0] = storage[0] / arg.storage[0];
 storage[1] = storage[1] / arg.storage[1];
 return this;
}

double dot(Vector2 other) #

Inner product.

double dot(Vector2 other) {
 double sum;
 sum = storage[0] * other.storage[0];
 sum += storage[1] * other.storage[1];
 return sum;
}

Vector2 multiply(Vector2 arg) #

Multiply entries in this with entries in arg.

Vector2 multiply(Vector2 arg) {
 storage[0] = storage[0] * arg.storage[0];
 storage[1] = storage[1] * arg.storage[1];
 return this;
}

Vector2 negate() #

Negate.

Vector2 negate() {
 storage[1] = -storage[1];
 storage[0] = -storage[0];
 return this;
}

Vector2 normalize() #

Normalize this.

Vector2 normalize() {
 double l = length;
 // TODO(johnmccutchan): Use an epsilon.
 if (l == 0.0) {
   return this;
 }
 l = 1.0 / l;
 storage[0] *= l;
 storage[1] *= l;
 return this;
}

Vector2 normalized() #

Normalized copy of this.

Vector2 normalized() {
 return new Vector2.copy(this).normalize();
}

Vector2 normalizeInto(Vector2 out) #

Normalize vector into out.

Vector2 normalizeInto(Vector2 out) {
 out.setFrom(this);
 return out.normalize();
}

double normalizeLength() #

Normalize this. Returns length of vector before normalization.

double normalizeLength() {
 double l = length;
 if (l == 0.0) {
   return 0.0;
 }
 l = 1.0 / l;
 storage[0] *= l;
 storage[1] *= l;
 return l;
}

Vector2 reflect(Vector2 normal) #

Reflect this.

Vector2 reflect(Vector2 normal) {
 sub(normal.scaled(2 * normal.dot(this)));
 return this;
}

Vector2 reflected(Vector2 normal) #

Reflected copy of this.

Vector2 reflected(Vector2 normal) {
 return new Vector2.copy(this).reflect(normal);
}

double relativeError(Vector2 correct) #

Relative error between this and correct

double relativeError(Vector2 correct) {
 double correct_norm = correct.length;
 double diff_norm = (this - correct).length;
 return diff_norm/correct_norm;
}

Vector2 scale(double arg) #

Scale this.

Vector2 scale(double arg) {
 storage[1] = storage[1] * arg;
 storage[0] = storage[0] * arg;
 return this;
}

Vector2 scaled(double arg) #

Vector2 scaled(double arg) {
 return clone().scale(arg);
}

Vector2 scaleOrthogonalInto(double scale, Vector2 out) #

Rotate this by 90 degrees then scale it. Store result in out. Return out.

Vector2 scaleOrthogonalInto(double scale, Vector2 out) {
 out.setValues(-scale * storage[1], scale * storage[0]);
 return out;
}

Vector2 setFrom(Vector2 other) #

Set the values by copying them from other.

Vector2 setFrom(Vector2 other) {
 storage[1] = other.storage[1];
 storage[0] = other.storage[0];
 return this;
}

Vector2 setValues(double x_, double y_) #

Set the values of the vector.

Vector2 setValues(double x_, double y_) {
 storage[0] = x_;
 storage[1] = y_;
 return this;
}

Vector2 setZero() #

Zero the vector.

Vector2 setZero() {
 storage[0] = 0.0;
 storage[1] = 0.0;
 return this;
}

Vector2 splat(double arg) #

Splat arg into all lanes of the vector.

Vector2 splat(double arg) {
 storage[0] = arg;
 storage[1] = arg;
 return this;
}

Vector2 sub(Vector2 arg) #

Subtract arg from this.

Vector2 sub(Vector2 arg) {
 storage[0] = storage[0] - arg.storage[0];
 storage[1] = storage[1] - arg.storage[1];
 return this;
}

String toString() #

Returns a printable string

String toString() => '[${storage[0]},${storage[1]}]';