//原作者:Robert Penner
//AS2.0改写:wiyiflash
//欢迎访问:http://www.wiyiflash.com/bbs
//-------------------------------------------------------
//Vector类提供了Flash里的矢量运算功能
//AS2.0改写:wiyiflash
//欢迎访问:http://www.wiyiflash.com/bbs
//-------------------------------------------------------
//Vector类提供了Flash里的矢量运算功能
import ExtMath; class Vector { public var x:Number; //声明公用属性y public var y:Number; //定义构造函数 public function Vector(x:Number, y:Number) { x = x; y = y; } //定义公用方法reset,即重设方法 public function reset(x:Number, y:Number) { with (this) { __constructor__(x, y); } } //定义公用方法getClone,即克隆方法 public function getClone() { with (this) { return new __constructor__(x, y); } } //定义公用方法equals,即比较是否相等的方法 public function equals(v:Vector) { return (this.x == v.x && this.y == v.y); } //定义公用方法plus,即向量求和方法 public function plus(v:Vector) { x += v.x; y += v.y; } //定义公用方法plusNew,即返回向量和的方法 public function plusNew(v:Vector) { with (this) { return new __constructor__(x+v.x, y+v.y); } } //定义公用方法minus,即向量求减方法 public function minus(v:Vector) { x -= v.x; y -= v.y; } //定义公用方法minusNew,即返回向量差方法 public function minusNew(v:Vector) { with (this) { return new __constructor__(x-v.x, y-v.y); } } //定义公用方法negate,即向量求逆方法 public function negate() { x = -x; y = -y; } //定义公用方法negateNew,即返回逆向量方法 public function negateNew():Vector { with (this) { return new __constructor__(-x, -y); } } public function scale(s:Number) { x *= s; y *= s; } public function scaleNew(s:Number):Vector { with (this) { return new __constructor__(s); } } public function getLength():Number { return Math.sqrt(x*x+y*y); } public function setLength(len:Number) { var r = this.getLength(); if (r) { this.scale(len/r); } else { //如果r==0 this.x = len; } } public function getAngle() { return ExtMath.atan2D(x, y); } public function setAngle(angle:Number) { var r = getLength(); x = r*ExtMath.cosD(angle); y = r*ExtMath.sinD(angle); } public function rotate(angle:Number) { var ca = ExtMath.cosD(angle); var sa = ExtMath.sinD(angle); with (this) { var rx = x*ca-y*sa; var ry = x*sa+y*ca; x = rx; y = ry; } } public function rotateNew(angle:Number) { with (this) { var v = new __constructor__(x, y); v.rotate(angle); return v; } } public function dot(v:Vector) { //点积结果为0,两个向量就是相互垂直的 return (x*v.x+y*v.y); } public function isPerpTo(v:Vector) { return (this.dot(v) == 0); } public function getNormal() { with (this) { return new __constructor__(-y, x); } } public function angleBetween(v:Vector) { var dp = dot(v); var cosAngle = dp/(getLength()*v.getLength()); return ExtMath.acosD(cosAngle); } } |
[From 维艺--Flash论坛]