zoukankan      html  css  js  c++  java
  • 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);
       }
    }
    }
  • 相关阅读:
    你云我云•兄弟夜谈会 第三季 企业IT架构
    你云我云•兄弟夜谈会 第二季 5G
    C++ 中的不定参数与格式化字符串 # ## vsprintf
    Python多进程池 multiprocessing Pool
    protobuf语法指南
    linux 监控工具netdata
    C++并发编程 条件变量 condition_variable,线程安全队列示例
    C++ 并发编程,std::unique_lock与std::lock_guard区别示例
    linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports
    goto语句引起的crosses initialization of XXX
  • 原文地址:https://www.cnblogs.com/yangpigao/p/2956890.html
Copyright © 2011-2022 走看看