package net.zylum.bB3D { class Vector { var i, j, k:Number; public function Vector(i:Number, j:Number, k:Number) { this.i = i; this.j = j; this.k = k; } public function rotate(xFormMatrix:Array) { var i0 = i; var j0 = j; var k0 = k; i = xFormMatrix[0][0]*i0 + xFormMatrix[0][1]*j0 + xFormMatrix[0][2]*k0; j = xFormMatrix[1][0]*i0 + xFormMatrix[1][1]*j0 + xFormMatrix[1][2]*k0; k = xFormMatrix[2][0]*i0 + xFormMatrix[2][1]*j0 + xFormMatrix[2][2]*k0; } public function normalize() { var m:Number = Math.sqrt(i*i + j*j + k*k); i /= m; j /= m; k /= m; } public function add(v:Vector) { i += v.i; j += v.j; k += v.k; } static function difference(v1:Vector, v2:Vector):Vector { return new Vector(v2.i - v1.i, v2.j - v1.j, v2.k - v1.k); } public function scale(s:Number) { i *= s; j *= s; k *= s; } static function dot(v1:Vector, v2:Vector):Number { return v1.i*v2.i + v1.j*v2.j + v1.k*v2.k; } static function cross(v1:Vector, v2:Vector):Vector { return new Vector ( v1.j*v2.k - v1.k*v2.j, v1.k*v2.i - v1.i*v2.k, v1.i*v2.j - v1.j*v2.i ); } } }