Adobe Flex迷你教程 — ActionScript实现二维向量运算
2013-03-13 01:05
381 查看
/**
* 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);
}
}
}
* 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);
}
}
}
相关文章推荐
- Adobe Flex迷你教程 — 实现类似新浪微博评论消息容器
- Adobe Flex迷你教程 — Super easy实现Mac系统下滑式Alert窗口
- JS实现简单的二维矩阵乘积运算
- Python:用Numpy来实现向量的各种运算
- C++实现R语言向量化运算(向量类:c 矩阵类:matrix)2015.9.11
- 39、C++定义一个类,实现向量的加减运算
- 3D数学读书笔记——向量运算及在c++上的实现
- Python求矩阵特征值及特征向量和实现对角化矩阵简化矩阵n次方运算
- 【POJ1984】【二维加权并查集】【向量运算】【四边形法则】
- JS实现简单的二维矩阵乘积运算
- 从零开始学习Node.js系列教程四:多页面实现的数学运算示例
- 从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
- Eigen库使用教程之旋转矩阵,旋转向量和四元数的初始化和相互转换的实现
- Adobe Flex迷你教程 — 让Graphics的线响应事件。
- Adobe Flex迷你教程 — DataGrid滚动条单击异常处理
- 用vector实现二维向量
- 用vector(向量)实现动态开辟二维三维数组
- Adobe Flex迷你教程 — CursorManager使用
- 用vector实现二维向量