flash中一个二维的类
最近看了flash
觉得很有趣,而且差不多都是面对对象的语言,上手很快,如果大家有兴趣可以学一下!!
下载 vector.rar
觉得很有趣,而且差不多都是面对对象的语言,上手很快,如果大家有兴趣可以学一下!!
1class 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
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
下载 vector.rar