Adobe Flex迷你教程 — ActionScript实现二维向量运算

 
/**
* Created with IntelliJ IDEA.
* User: DongYang
* Date: 13-3-13
* Time: 上午12:50
* Progress every day a little more.
*/
package uitl {
public class Vector {

    public var x : Number;
    public var y : Number;

    public function Vector( x : Number = 0 , y : Number = 0) {
        this . x = x;
        this . y = y;
    }

    public static function plus( v1 : Vector , v2 : Vector ): Vector {
        return new Vector( v1 . x + v2 . x , v1 . y + v2 . y);
    }

    public static function minus( v1 : Vector , v2 : Vector ): Vector //向量V1-V2
    {
        return new Vector( v2 . x - v1 . x , v2 . y - v1 . y);
    }

    public function reset( xx : Number , yy : Number ): void {
        this . x = xx;
        this . y = yy;
    }

    public function clone (): Vector {
        return new Vector( x , y);
    }

    public function selfPlus( v : Vector ): void //向量加法
    {
        x += v . x;
        y += v . y;
    }

    public function selMinus( v : Vector ): void //向量减法
    {
        x -= v . x;
        y -= v . y;
    }

    public function negate (): void //向量旋转180度
    {
        x = - x;
        y = - y;
    }

    public function scale(s : Number ): void //向量缩放s倍,改变向量的大小
    {
        x *= s;
        y *= s;
    }

    public function length (): Number //向量的模
    {
        return Math . sqrt( x * x + y * y);
    }

    public function setLength( len : Number ): void //设置向量的长度
    {
        var len0 : Number = length();
        if ( len0) {
            scale( len / len0);
        }
        else {
            x = len;
        }
    }

    public function getTangle (): Number //向量角度
    {
        return Math . atan2( y , x);
    }

    public function setAngle( ang : Number ): void //改变向量角度,保持向量原有长度
    {
        var len0 : Number = this . length();
        x = len0 * Math . cos( ang);
        y = len0 * Math . sin( ang);
    }

    public function rotate( ang : Number ): void //向里旋转ang弧度
    {
        var ca : Number = Math . cos( ang);
        var sa : Number = Math . sin( ang);
        var rx : Number = x * ca - y * sa;
        var ry : Number = x * sa + y * ca;
        this . x = rx;
        this . y = ry;
    }

    public function dot( v : Vector ): Number //向量点乘
    {
        return x * v . x + y * v . y;
    }

    public function getNormalN (): Vector //得到顺时针方向的法向量
    {
        return new Vector( y , - x);
    }

    public function getNormalS (): Vector //逆时针方向的法向量
    {
        return new Vector (- y , x);
    }

    public function angleBetween( v : Vector ): Number //计算两个向量之间的夹角
    {
        var dp : Number = dot( v);
        var cosAngle : Number = dp / ( length() * v . length());
        return Math . acos( cosAngle);
    }
}
}

 

你可能感兴趣的:(actionscript)