钓鱼方法钓鱼技巧钓鱼攻略钓鱼秘籍钓鱼装备,尽在渔夫子

Vector(向量)类

二维向量,也可称为点向量:
点击这里查看: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); 
}
}

标签:flash
分类:生活点滴| 发布:渔夫子| 查看: | 发表时间:2006-7-29
原创文章如转载,请注明:转载自渔夫子 http://www.yufuzi.net/
本文链接:http://www.yufuzi.net/post/flash_Vector.html

相关文章

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。