/* * Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ package Box2D.Common.Math{ import Box2D.Common.*; /// A 2D column vector. public class b2Vec2 { public function b2Vec2(x_:Number=0, y_:Number=0) : void {x=x_; y=y_;}; public function SetZero() : void { x = 0.0; y = 0.0; } public function Set(x_:Number=0, y_:Number=0) : void {x=x_; y=y_;}; public function SetV(v:b2Vec2) : void {x=v.x; y=v.y;}; public function Negative():b2Vec2 { return new b2Vec2(-x, -y); } static public function Make(x_:Number, y_:Number):b2Vec2 { return new b2Vec2(x_, y_); } public function Copy():b2Vec2{ return new b2Vec2(x,y); } public function Add(v:b2Vec2) : void { x += v.x; y += v.y; } public function Subtract(v:b2Vec2) : void { x -= v.x; y -= v.y; } public function Multiply(a:Number) : void { x *= a; y *= a; } public function MulM(A:b2Mat22) : void { var tX:Number = x; x = A.col1.x * tX + A.col2.x * y; y = A.col1.y * tX + A.col2.y * y; } public function MulTM(A:b2Mat22) : void { var tX:Number = b2Math.b2Dot(this, A.col1); y = b2Math.b2Dot(this, A.col2); x = tX; } public function CrossVF(s:Number) : void { var tX:Number = x; x = s * y; y = -s * tX; } public function CrossFV(s:Number) : void { var tX:Number = x; x = -s * y; y = s * tX; } public function MinV(b:b2Vec2) : void { x = x < b.x ? x : b.x; y = y < b.y ? y : b.y; } public function MaxV(b:b2Vec2) : void { x = x > b.x ? x : b.x; y = y > b.y ? y : b.y; } public function Abs() : void { if (x < 0) x = -x; if (y < 0) y = -y; } public function Length():Number { return Math.sqrt(x * x + y * y); } public function LengthSquared():Number { return (x * x + y * y); } public function Normalize():Number { var length:Number = Math.sqrt(x * x + y * y); if (length < Number.MIN_VALUE) { return 0.0; } var invLength:Number = 1.0 / length; x *= invLength; y *= invLength; return length; } public function IsValid():Boolean { return b2Math.b2IsValid(x) && b2Math.b2IsValid(y); } public var x:Number; public var y:Number; }; }