• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>AS 应用>文章内容
  • [AS 功能代码教程 03] 三角函数及应用
  • 来源:大师之家 作者:FL基础理论大师 2007-09-07 【

[AS功能代码教程01]Flash 通用延迟代码

[AS 功能代码教程02]数字魔方及数组概念

[AS 功能代码教程03] 三角函数及应用

 


 

1.坐标系:

 Flash坐标系与数学坐标系:X轴相同,Y轴相反。
  
[数学坐标系]
  
[Flash中的坐标系]
 
2.角度制与弧度制的转换:
(1)弧度:弧度=角度*PI/180;
(2)角度:角度=弧度*180/PI;
*角度制多用于._rotation中
*弧度制多用于Math.sin(),Math.cos(),Math.atan()... ...
 
3.正弦、余弦、正切:
  1>正弦:Math.sin(n);在Flash中多用其图像性质:
    随X增长,Y取值为[0,1,0,-1,0]这个变化是周期性的。
  
  2>余弦:Math.cos(n);用法基本同上。
    随X增长,Y取值为[1,0,-1,0]这个变化是周期性的。
    
  3>正切:Math.atan(n);多用于求两点间的夹角。
  
Math.atan(n),他的值域在[-∏/2~∏/2],作用域只有半个圆;
    那么如何使其作用域成为一个整圆呢?
Math.atan2(y,x)与Math.atan(n)功能相同,只是作用域大了一倍。
 
4.正弦实例:

(1)制作一个球型,存为MC,实例名为"Ball"。

     摆放到舞台的适当位置;

 (2)加入代码层:

  var size=60;

  //设置振幅

  var centerY=150;

  //设置显示位置

  var n=0;

  //累加变量

onEnterFrame = function () {
 ball._y = centerY+size*Math.sin(-1*n*Math.PI/180);

/*(-1*n*Math.PI/180)角度转换为弧度,并且乘-1,与数学坐标系相反;

  用size*sin(n)扩大sin的值域到[-60,60]

  加上centerY 使得"ball"及其运动以centerY坐标为中心进行*/
 if (n<360) {
  n++;
 } else {
  n = 0;
 }

//超过一个周期,大于360度后,至0,重新开始一个周期
};

 

 


5.余弦实例(与正弦类似)

(1)制作一个球型,存为MC,实例名为"Ball"。

   摆放到舞台中央;

(2)加入代码层:

var size = 60;
var n = 0;

onEnterFrame = function () {
 ball._height = ball._width=Math.abs(size*Math.cos(n*Math.PI/180));

//"ball"的大小同cos()成比例变化
 if (n<360) {
  n++;
 } else {
  n = 0;
 }
};


 

6.正切实例:

(1)绘制出眼,鼻,嘴作为背景;

   画一个黑色圆作为眼珠,存为MC,实例名为"Reye";

   修改眼珠的影片剪辑,把它放在中心点的正右侧;

   复制一个Reye,实例名为"Leye"作为另一个眼珠。

(2)加入代码层:

Reye.onMouseMove = function() {
 dx = _root._xmouse-this._x;
 dy = _root._ymouse-this._y;

//获得鼠标与眼球的距离
 this._rotation = Math.atan2(dy, dx)/Math.PI*180;

//转换为角度
};
Leye.onMouseMove = Reye.onMouseMove;

//Leye鼠标移动时的函数等于Reye鼠标移动时的函数

 

 


7.正弦和余弦综合实例:

 1>画圆方法:

  

用cos(n)作为点x,x点从1~0~-1~0

  

用sin(n)作为点y,结合点x,[1,0]~[0,1]~[-1,0]~[0,-1]~[1,0]

 

以步长为1的距离,连接各点画出曲线,形成圆

AS代码层:

size = 60;

//半径长度
centerx = 200;
centery = 150;

//圆心点
n = 0;

//累加变量
onEnterFrame = function () {
 x = size*Math.cos(n*Math.PI/180);
 y = size*Math.sin(n*Math.PI/180);

//cos(n)表示x的前进方向,sin(n)表示y的前进方向

 tox = size*Math.cos((n+1)*Math.PI/180);
 toy = size*Math.sin((n+1)*Math.PI/180);

//以1为步长,能画出实线的效果
 lineStyle(1, 0x0, 100);
 moveTo(x+centerx, y+centery);
 lineTo(tox+centerx, toy+centery);

//以centerx,centery为圆心点,画线
 if (n<=360) {
  n++;
 }
};

 

 


2>画螺旋线方法:

  同画圆方法,只不过每画一步要多加一个偏移量,使之回不到起点。

 

size = 10

//半径长度
centerx = 200;
centery = 150;

//圆心点
n = 0;

//累加变量
len = 800;

//线的长度
a = 0.1;

//偏移量
onEnterFrame = function () {
 x = (size+n*a)*Math.cos(n*Math.PI/180);
 y = (size+n*a)*Math.sin(n*Math.PI/180);
 tox = (size+n*a)*Math.cos((n+1)*Math.PI/180);
 toy = (size+n*a)*Math.sin((n+1)*Math.PI/180);

//加过偏移量后的圆
 lineStyle(1, 0x0, 100);
 moveTo(x+centerx, y+centery);
 lineTo(tox+centerx, toy+centery);
 if (n<=len) {
  n++;
 }
};

 

 

 

3>正多边型画法

  方法也是由画圆法衍生而来的:

多边形内角和等于360度;

再根据边数,确定每个顶点的角度;

再根据角度确定每个顶点的位置,并连接各顶点。 

size = 50;

//多边行半径
sides = 5;

//边数,当边数为360时,也就是一个圆
centerx = 200;
centery = 200;

//圆心坐标
ang = 360/sides;

//每顶点的度数
for (n=1; n<=sides; n++) {
 x = size*Math.cos(n*ang*Math.PI/180);
 y = size*Math.sin(n*ang*Math.PI/180);

//第n个点在圆上的位置

 tox = size*Math.cos((n+1)*ang*Math.PI/180);
 toy = size*Math.sin((n+1)*ang*Math.PI/180);

//下一个点在圆上的位置

 lineStyle(1, 0x0, 100);
 moveTo(centerx+x, centery+y);
 lineTo(centerx+tox, centery+toy);

//两点间连线
}




上一篇:[AS 功能代码教程02]数字魔方及数组概念   下一篇:flash actionscript应用:纯AS钟表
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)