flash中一个二维的类
最近看了flash
觉得很有趣,而且差不多都是面对对象的语言,上手很快,如果大家有兴趣可以学一下!!
下载 vector.rar
觉得很有趣,而且差不多都是面对对象的语言,上手很快,如果大家有兴趣可以学一下!!
1
class vector
2
{ var x;
3
var y;
4
public function vector(x,y)
5
{ this.x=x;
6
this.y=y;
7
8
9
}
10
//
11
function toString()
12
{ var rx=Math.round (x*1000)/1000;
13
var ry=Math.round(y*1000)/1000;
14
return "["+ rx+","+ry+"]";
15
}
16
function reset(x,y)
17
{this.x=x;
18
this.y=y;
19
}
20
function equals(v)
21
{return (x==v.x&&y==v.y)}
22
//向量相加
23
function plus(v)
24
{this.x+=v.x;
25
this.y+=v.y;}
26
//仅返回相加值
27
function plusNew (v)
28
{return (this.x+v.x,this.y+y);
29
}
30
//减法
31
function minus(v)
32
{this.x-=v.x;
33
this.y-=v.y;}
34
function minusNew(v)
35
{return (this.x+v.x,this.y+v.y);}
36
//取反
37
function negate(v)
38
{this.x=-this.x;
39
this.y=-this.y}
40
function negateNew(v)
41
{return(-this.x,-this.y);}
42
43
//向量的缩放
44
function scale(s)
45
{this.x*=s;
46
this.y*=s;
47
}
48
function scaleNew(s)
49
{return (this.x*s,this.y*s)
50
}
51
//get length
52
function getLength()
53
{ return Math.sqrt (this.x*this.x+this.y*this.y);}
54
//set length
55
function setLength(len)
56
{var r=this.getLength();
57
if(r){this.scale(len/r)}
58
else
59
{this.x=len;}}
60
61
62
//get angle
63
function getAngle()
64
{return(Math.atan2 (this.x,this.y));}
65
66
//set angle
67
function setAngle(angle)
68
{var r=getLength();
69
this.x=r*Math.cos (angle);
70
this.y=r*Math.sin(angle);}
71
72
//rotate
73
function rotate (angle)
74
{var ca=Math.cos (angle);
75
var sa=Math.sin(angle);
76
with(this)
77
{var rx=x*ca-y*sa;
78
var ry=x*sa+y*ca;
79
x=rx;
80
y=ry;
81
}}
82
83
function rotateNew(angle)
84
{var v=new vector(this.x,this.y);
85
v.rotate(angle);
86
return v;}
87
88
//点击 dot
89
function dot(v)
90
{return (this.x*v.x+this.y*v.y)}
91
//法向量
92
function getNormal()
93
{return({-this.y,this.x})}
94
//垂直验证
95
function isPerpTo(v)
96
{return(this.dot(v)==0)}
97
//计算两向量的角度
98
function angleBetween(v)
99
{var dp=this.dot(v);
100
var cosAngle=dp/(this.getLength()*v.getLength());
101
return Math.acos (cosAngle);
102
}
103
104
105
106
107
108
class vector 2
{ var x;3
var y;4
public function vector(x,y)5
{ this.x=x;6
this.y=y;7
8
9
}10
//11
function toString()12
{ var rx=Math.round (x*1000)/1000; 13
var ry=Math.round(y*1000)/1000;14
return "["+ rx+","+ry+"]";15
}16
function reset(x,y)17
{this.x=x;18
this.y=y;19
}20
function equals(v)21
{return (x==v.x&&y==v.y)}22
//向量相加23
function plus(v)24
{this.x+=v.x;25
this.y+=v.y;}26
//仅返回相加值27
function plusNew (v)28
{return (this.x+v.x,this.y+y);29
}30
//减法31
function minus(v)32
{this.x-=v.x;33
this.y-=v.y;}34
function minusNew(v)35
{return (this.x+v.x,this.y+v.y);}36
//取反37
function negate(v)38
{this.x=-this.x;39
this.y=-this.y}40
function negateNew(v)41
{return(-this.x,-this.y);}42
43
//向量的缩放44
function scale(s)45
{this.x*=s;46
this.y*=s;47
}48
function scaleNew(s)49
{return (this.x*s,this.y*s)50
}51
//get length52
function getLength()53
{ return Math.sqrt (this.x*this.x+this.y*this.y);}54
//set length55
function setLength(len)56
{var r=this.getLength();57
if(r){this.scale(len/r)}58
else59
{this.x=len;}}60
61
62
//get angle63
function getAngle()64
{return(Math.atan2 (this.x,this.y));}65
66
//set angle67
function setAngle(angle)68
{var r=getLength();69
this.x=r*Math.cos (angle);70
this.y=r*Math.sin(angle);}71
72
//rotate73
function rotate (angle)74
{var ca=Math.cos (angle);75
var sa=Math.sin(angle);76
with(this)77
{var rx=x*ca-y*sa;78
var ry=x*sa+y*ca;79
x=rx;80
y=ry;81
}}82
83
function rotateNew(angle)84
{var v=new vector(this.x,this.y);85
v.rotate(angle);86
return v;}87
88
//点击 dot89
function dot(v)90
{return (this.x*v.x+this.y*v.y)}91
//法向量92
function getNormal()93
{return({-this.y,this.x})}94
//垂直验证95
function isPerpTo(v)96
{return(this.dot(v)==0)}97
//计算两向量的角度98
function angleBetween(v)99
{var dp=this.dot(v);100
var cosAngle=dp/(this.getLength()*v.getLength());101
return Math.acos (cosAngle);102
}103
104
105
106
107

108

下载 vector.rar



浙公网安备 33010602011771号