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);
       }
    }
    }
  • 相关阅读:
    面试中遇到递归算法题别慌--常见递归算法题的解题思路
    Xml日志记录文件最优方案(附源代码)
    linux下源码安装软件
    文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑
    从内存中直接运行PE程序
    谈谈Linux内核驱动的coding style
    【全面解禁!真正的Expression Blend实战开发技巧】第六章 认识ListBox
    玩转C链表
    麻省理工《C内存管理和C++面向对象编程》笔记---第一讲:认识C和内存管理
    Dll注入技术之输入法注入
  • 原文地址:https://www.cnblogs.com/yangpigao/p/2956890.html
Copyright © 2011-2022 走看看