点击这里查看:myMath类
import myMath;
class Vector {
var x:Number;
var y:Number;
/*格式化输出向量坐标,(将坐标舍入为3个十进制小数位)对实际数值不造成任何影响*/
function toString():String{
var rx = Math.round (this.x * 1000) / 1000;
var ry = Math.round (this.y * 1000) / 1000;
return ""["" + rx + "", "" + ry + ""]"";
}
/*重置Vector类*/
function reset(x:Number,y:Number):Void {
this.x=x;
this.y=y;
}
/*构造函数*/
function Vector(x:Number,y:Number){
this.x=x;
this.y=y;
}
/*复制Vector类*/
function getClone():Vector{
return new Vector(this.x,this.y);
}
/*比较两个Vector类是否相等*/
function equals(v:Vector):Boolean{
return (this.x==v.x && this.y==v.y);
}
/*向量加法,改变的是当前对象*/
function plus(v:Vector):Void{
with (this) {
x += v.x;
y += v.y;
}
}
/*将两个向量和存储在一个新的对象中*/
function plusNew(v:Vector):Vector{
return new Vector(this.x+v.x,this.y+v.y);
}
/*向量减法,改变的是当前对象*/
function minus(v:Vector):Void{
with (this) {
x -= v.x;
y -= v.y;
}
}
/*将两个向量差存储在一个新的对象中*/
function minusNew(v:Vector):Vector{
return new Vector(this.x-v.x,this.y-v.y);
}
/*向量求逆,改变的是当前对象*/
function negate():Void{
with (this) {
x = -x;
y = -y;
}
}
/*向量求逆后存储在一个新的对象中*/
function negateNew():Vector{
return new Vector(-this.x,-this.y);
}
/*向量缩放*/
function scale(s:Number):Void{
with (this) {
x *= s;
y *= s;
}
}
function scaleNew(s:Number):Vector{
return new Vector(this.x * s, this.y * s);
}
/*向量长度*/
function getLength():Number{
with (this) return Math.sqrt (x*x + y*y);
}
/*跟据给定向量长度,重新设置Vector对象的大小*/
function setLength(len:Number):Void{
var r:Number = this.getLength();
if (r) this.scale (len / r);
else this.x = len;
}
/*向量角度*/
function getAngle():Number{
return myMath.atan2D(this.y, this.x);
}
/*重置向量角度*/
function setAngle(ang:Number):Void{
with (this) {
var r:Number = getLength();
x = r * myMath.cosD (ang);
y = r * myMath.sinD (ang);
}
}
/*向量旋转,指的是角度的变化,而不是目标角度本身*/
function rotate(ang:Number):Void{
var ca:Number = myMath.cosD (ang);
var sa:Number = myMath.sinD (ang);
with (this) {
var rx:Number = x * ca - y * sa;
var ry:Number = x * sa + y * ca;
x = rx;
y = ry;
}
}
function rotateNew(ang:Number):Vector{
var v:Vector=new Vector(this.x,this.y);
v.rotate(ang);
return v;
}
/*点积*/
function dot(v:Vector):Number{
with (this) return x * v.x + y * v.y;
}
/*法向量*/
function getNormal():Vector{
return new Vector(-this.y,this.x);
}
/*垂直验证*/
function isPerpTo(v:Vector):Boolean{
return (this.dot (v) == 0);
}
/*向量的夹角*/
function angleBetween(v:Vector):Number{
var dp:Number = this.dot (v);
var cosAngle:Number = dp / (this.getLength() * v.getLength());
return myMath.acosD (cosAngle);
}
}









