博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Adobe Flex迷你教程 — ActionScript实现二维向量运算
阅读量:4882 次
发布时间:2019-06-11

本文共 2219 字,大约阅读时间需要 7 分钟。

 
/**
* 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);
   
}
}
}

 

转载于:https://www.cnblogs.com/yangpigao/archive/2013/03/13/2956890.html

你可能感兴趣的文章
hdu 5412 CRB and Queries(整体二分)
查看>>
CentOS如何安装linux桌面?
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>
bzoj 2281: [Sdoi2011]黑白棋
查看>>
bzoj 4475: [Jsoi2015]子集选取
查看>>
团队开发7
查看>>
java之静态代理与动态代理
查看>>
软件测试2019:第四次作业
查看>>
201571030335 + 小学四则运算练习软件项目报告
查看>>
不用代码就能实现get与post
查看>>
发现一个强大的可视化第三方库pyecharts
查看>>
团队项目第一阶段冲刺站立会议03
查看>>
Android Material Design控件学习(二)——NavigationView的学习和使用
查看>>
ActiveMQ介绍
查看>>
FineUI(专业版)新增 5 款 Metro 皮肤,邀您共赏!
查看>>
Java生鲜电商平台-订单表的设计
查看>>
gdb基本调试命令
查看>>
互联网开放平台API安全设计
查看>>
python Django 相关学习笔记
查看>>