as笔记。oop与算法。---4

      闪了一下 2004-7-13 18:36
2.8类的继承.

类的概念:类是方法和属性的集合体....

以前说的类总是鸟类呀.汽车类呀..把些具有共同属性的东西作为一类..其实.类还是方法的集合..

仅仅有属性的话.类就像是数据结构了..(一位朋友问过类似的问题).

只有加入了方法.类才具有了更好的封装性..更能够作为一个实实在在的独立代码存在.

2.8.1.方法的继承和属性的继承.

在mx中的继承没有什么可说的.

2004中的继承是专业的.我们后边再聊.这里就说到这里.
//有关三角的几个小东西.
//求两点之间的距离.
function dAB(x1,y1,x2,y2){
var dx=x2-x1;
var dy=y2-y1;
return Math.sqrt(dx*dx+dy*dy);
}
trace(dAB(1,2,3,4));//hehe 可以拉
//角的弧度测量.简单的把度转化为弧度.
function d2hd(d){
return(d*(Math.PI/180));
}
trace(d2hd(360));//可以拉
//注意:(Math.PI/180)的括号不可少!!在发布时swf里边将不是(Math.PI/180)这代码..而是6.28318530717959..有点预处理的味道.快!!不信你用破解软件看看内容...
//本书作者不喜欢用弧度.所以编写了大量角度的函数.不爽.我懒得很.不写了.
//只是给出一个余弦的例子.

待续...
这个可能是原作者网站:

www.robertpenner.com/index2.html


书名估计应该是这个:
《Flash MX编程与创意实现》
二维向量类.已经改为2004as2.0格式.一定要存为vector.as..
我做了精简.去掉我认为不需要的函数.函数少了好记.!

class vector {
var x:Number;
var y:Number;
// 用于返回属性值的方法
function toString():String {
return ("["+x+","+y+"]");
}
//改变属性值的方法.
function reset(getx:Number, gety:Number):Void {
x = getx;
y = gety;
}
//克隆向量.与mx不同//!!!!!!
function getclone():vector {
return new vector(x, y);
}
//比较相等否.
function eqV(getVector:vector):Boolean {
return (x == getVector.x && y == getVector.y);
}
//向量加法.
function addV(getVector:vector):Void {
x += getVector.x;
y += getVector.y;
}
//向量加法得到新向量.
function addVNew(getVector:vector):vector {
return new vector(x+getVector.x, y+getVector.y);
}
//向量减法暂时不写.应该可以替代.留空.用缩放系数-1替代.
//向量缩放
function scaleV(n:Number):Void {
x *= n;
y *= n;
}
//向量缩放得到新向量.
function scaleVNew(n:Number):vector {
return new vector(x*n, y*n);
}
//得到向量的长度
function getLength():Number {
return Math.sqrt(x*x+y*y);
}
//设置向量长度
function setLength(len:Number):Void {
var r=this.getLength();
if(r) this.scaleV(len/r);
else this.x=len;
}
//得到向量角度
function getAngle():Number {
return (180/Math.PI)*Math.atan2(y,x);
}
//设置向量角度
function setAngle(angle:Number):Void {
var r=this.getLength();
var tem=angle*(Math.PI/180);
x=r*Math.cos(tem);
y=r*Math.sin(tem);
}
//旋转.
function rotate(angle:Number):Void {
var r=this.getLength()
var tem=angle*(Math.PI/180);
var ca=Math.cos(tem);
var sa=Math.sin(tem);
var rx=x*ca-y*sa;
var ry=x*sa+y*ca;
x=rx;
y=ry;
}
//旋转并得到新向量.
function rotateNew(angle:Number):vector{
var v=new vector(x,y);
v.rotate(angle);
return v;
}
//内积
function dot(v:vector):Number{
return x*v.x+y*v.y;
}
//法向量计算省略.可以用rotateNew(90)得到.
//垂直验证省略.用(v1.dot(v2)==0)判断垂直.
//向量夹角.得到向量夹角绝对值.
function angleBetween(v:vector):Number{
var tem=this.dot(v);
return (180/Math.PI)*Math.acos(tem/(this.getLength()*v.getLength()));
}


// 构造函数
function vector(getx:Number, gety:Number) {
x = getx;
y = gety;
}
}
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}