那天谁说的要画8字的图案。可以应用极坐标来完成。
大家对高中时的圆锥曲线统一极坐标方程还熟悉吧?
len = e*p/ (1- e*cos(rad)) e离心率,p焦点到准线距离
//下面是一个椭圆。
function ellipse(r) {
_root.funcName.text = "椭圆";
return .3*175/(1-.9*Math.cos(r));
}
极坐标的点是用 (length, radian)表示的,但是Flash是笛卡尔坐标,所以用下面的函数来转化。
//极坐标转化成笛卡尔坐标
function pToC() {
var point = new Object(); //用笛卡尔表示的点
var len;
len = doCalculate.call(this, r); //得到极坐标的点
point.x = len*Math.cos(r);
point.y = len*Math.sin(r);
return point;
}
然后根据得到的笛卡尔坐标的点,利用onEnterFrame画图就可以了。
点击浏览该文件
点击浏览该文件
附上几个极坐标的方程:
过原点的直线:red = a ; a 是常数的一个角
垂直极轴的直线:len*cos(rad) = constLen; constLen 是常数的一个长度
平行极轴的直线:len*sin(rad) = constLen;
圆心是原点的圆:len = R; R是半径
过原点的圆,圆心在极轴:len = 2* R * cos(rad);
过原点的圆,圆心在垂直极轴的直线上:len = a*R*sin(rad);
心脏线:len = 2*R*(1+cos(rad)); R是心脏线的中心到原点的距离
纽线:pow(len,2) = pow(A,2)*cos(2*rad); A是半长轴
pow(len,2) = pow(A,2)*sin(2*rad);
四瓣玫瑰线: len = A * cos(2*rad);
三瓣玫瑰线: len = A * cos(3*rad);
注:偶数倍rad画倍数的2倍个瓣,奇数倍画奇数个瓣
螺旋线:len = A * rad;
对数螺旋线:len = pow(e,A*rad); 这个A要舍得小一点才能看清楚
改变一下方程,能画出很漂亮的曲线
关于源文件,我其实不是想说AS,倒是想起了C。因为AS里边function特别有一个Function类,大家应该也用的很熟了。
可是C的初心者一般都对指向函数的指针敬而远之,其实用是一样,名字不同,但我都叫“函数对象”。用来实现所谓静态多态(不绑定对象的“多态”)。
例子就是把 函数对象 作为 调用函数 的一个参数,从而使调用函数表现为“多态”。
function invoker(func, [parameters]){
//do some common init work
func.call(this, [parameters]);
//do something
}
C版本:
void invoker(TYPE (*func),[parameters]){
func([parameters]);
}
因为AS其实还是一种弱类型语言,几乎可以任意的转换类型,这种调用就显得特别灵活。AS的函数还自动产生一个arguements对象,完全可以不在定义函数的时候写死,而在调用的时候选择不同的参数形式。
比如Array的构造函数就可以接收多种完全不同形式的参数
甚至可以写成这样:
function afunc(){
var len = arguments.length;
//......................
var local1 = arguments[0];
if(arguments[1])
//................
arguments[2].call(arguments[3],arguments[4],....);
}
总之,引用《thinking in Java》的一句话,万物皆对象。利用好对象的特点。
声明,这个帖子是我写的,可是内容不是“原创”,都写进n百本教材了,温习一下。