//****************************************************************************** // ActionScript2.0 Game Framework // Copyright(C) 2005 BeInteractive!, all rights reserved. // // $Id: Vector2D.as 6 2007-03-26 03:54:35Z yossy $ //****************************************************************************** /** Math.Vector2D 2次元ベクトルライブラリ Original code by yaneurao (from yaneSDK4D) */ class ASGF.Math.Vector2D { // ベクトル成分x, y public var x:Number = 0.0; public var y:Number = 0.0; public function Vector2D (x:Object, y:Number) { if(x!=undefined) { if(x instanceof "Vector2D") { this.x = x.x; this.y = x.y; } else if(typeof(x) == "number" && y!=undefined) { this.x = x; this.y = y; } } } /** x, yのセッター @param x Number x @param y Number y */ public function set (x:Number, y:Number) : Void { this.x = x; this.y = y; } /** 指定されたベクトルとの内積を求める @param v Vector2D 対象ベクトル @return Number 内積 */ public function innerProduct (v:Vector2D) : Number { return x * v.x + y * v.y; } /** 指定されたベクトルとの外積を求める @param v Vector2D 対象ベクトル @return Number 外積 */ public function outerProduct (v:Vector2D) : Number { return x * v.y - y * v.x; } /** 他のベクトルを加算する @param v Vector2D 加算するベクトル @return void */ public function add (v:Vector2D) : Void { x += v.x; y += v.y; } /** 他のベクトルを減算する @param v Vector2D 減算するベクトル @return void */ public function sub (v:Vector2D) : Void { x -= v.x; y -= v.y; } /** スカラー値を乗算する @param n Number 乗算するスカラー値 @return void */ public function mul (n:Number) : Void { x *= n; y *= n; } /** スカラー値で除算する @param n Number 除算するスカラー値 @return void */ public function div (n:Number) : Void { x /= n; y /= n; } /** 絶対値を求める @param void @return Number 絶対値 */ public function size () : Number { return Math.sqrt(x*x+y*y); } /** 絶対値の二乗を求める(比較ならこちらで充分。sqrtが無い分高速) @param void @return Number 絶対値の二乗 */ public function size2 () : Number { return (x*x+y*y); } /** 近似による距離(絶対値)の算出。sqrtを使っていない分速い。 @param v Vector2D 比較するベクトル @return Number 距離(絶対値) */ public function dist (v:Vector2D) : Number { var ax:Number = Math.abs(x - v.x); var ay:Number = Math.abs(y - v.y); if(ax > ay) { return ax + ay/2; } else { return ay + ax/2; } } /** ふたつのベクトルが等しいか返す @param v Vector2D 比較するベクトル @return Boolean ふたつのベクトルが等しいか */ public function equals (v:Vector2D) : Boolean { return (x==v.x) && (y==v.y); } public function toString () : String { return "(" + x + ", " + y + ")"; } }