as入门之恶补数学(二) 占个座位先
18 一 2008
在学习三角函数之前,我们先来了解一个概念---弧度
在日常生活中我们使用的度量角度的单位是度。一个圆周是360度,但是这个数字是任意规定的。而弧度单位是数学家们定义的测量角度的标准公制单位。弧度是基于π定义的,π是圆的一种固有属性。计算机编程语言通常在处理角度时都以弧度为单位。flash as的内置Math类,它在计算时都是以弧度为单位。
弧度的定义如下:两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧长正好等于圆的半径时,两条射线的夹角的弧度为1。从下面一个图示我们来看一下:
在这个图中,夹角θ的弧度可以使用这个公式来计算:弧长为s,半径为l,则夹角θ的弧度值就是θ=s/l。
π是一个常量,在flash的as中,用Math.PI来定义,PI的值为3.1415…..我们可以测试一下:
p=Math.PI
trace(p)//输出为:3.14159265358979
那么。如何将度转化为弧度呢?基本的关系是π弧度等于180度比例为π:180。因此2π弧度就等于360度,也就是一个圆周。转换的关系式为:
弧度=度×π/180
在flash as中,我们可以通过这样的函数来进行转换:
function dzhd(angel){ //angel为一个度表示的角度,自定义一个函数dzhd
return angel*(Math.PI/180)
}
我们可以来测试一下这个函数:
function dzhd(angel){
return angel*(Math.PI/180)
}
x=dzhd(180)
trace(x)//输出为3.14159265358979,也就是pi
当然,我们在使用的过程中不一定非要用函数来进行转换,我们可以直接用一个表达式来进行转换,同样是可以的。比如把一个角度angel转换为一个弧度hudu值,可以用下面来表示
hudu=angel*(Math.PI)/180
测试一下:
angel=180
hudu=angel*(Math.PI/180)
trace(hudu)//输出为3.14159265358979,也就是pi
同样,我们也可以把弧度转换为度。弧度值乘以180/π得到角度:
自定义函数:
function hdzd(hudu){
return hudu*(180/Math.PI)
}
测试:
function hdzd(hudu){
return hudu*(180/Math.PI)
}
x=hdzd(1)
trace(x)//输出为57.2957795130823,实际上1弧度对应57.3度。
同样,我们也可以直接用一个表达式来转换而不用函数。angel=hudu*(180/Math.PI)
测试:
hudu=1
angel=hudu*(180/Math.PI)
trace(angel)//同样输出为57.2957795130823,实际上1弧度对应57.3度。
10、三角函数
既然说到三角函数,我们还是要从最基本的做起。我们的三角函数,最初是在直角三角形中形成的,来看一下这个三角形。
直角三角形实际上就是其中的一个角是90度的三角形,也就是有一个角是直角。它的直角处用一个小的正方形来标识。它的三条边,直角边用a、b标记,最长的一边c称为斜边。整个现代文明可以说都是建立在三角形的基础之上的。直角三角形中三条边和三个角之间的关系是as程序员必备的基础知识。
1、勾股定理
这是一个很远古的公式,可能我们很早就已经了解过了。
a的平方加上b的平方等于c的平方。那么,如果我们想计算c的值,对该方程的两边求平方根就可以了。
对于这个定理,大家先有一个基本的认识,等我们来介绍具体在flash场景中使用的时候,我们再具体的来说一个它的应用。
2、正弦函数:
正弦在数学中是这样来定义的,在直角三角形中,角θ的正弦等于它的对边和斜边之比。
sinθ=对边/斜边
在我们的三角形中,公式可以修改为:
sinθ=b/c
在数学中,关于这个函数有很多计算的项目和应用。我们在这里给大家提两点需要大家注意:
(1)、关于它的取值。
在数学中,θ是一个角度值,所以我们会遇到sin(30),sin(60)等等。而它的计算结果是一个数值,是一个-1<=sinθ<=1大于等于负一而小于等于正一的值。这个值在不同的角度范围有时为正,有时为负,取值如下:
0度<=θ<=180度 sinθ>=0
180度<=θ<=360度 sinθ<=0
这样我们可以利用它来控制一个量在一定的范围内来回变化,而不会超出这个返回。这个在这个函数的图像中也会体现出来。
(2)、关于它的周期性。
三角函数都有周期性。正弦和余弦的周期都是360度,也就是2π。以它为周期,循环变化。也就是经过360度,结果重复一次。
在as中关于正弦函数Math.sin()
在as中计算角度的正弦的语法很简单。
Math.sin(theta)
变量theta是用弧度表示的一个角。下面是一个简单的测试。
x=Math.sin(0)
trace(x)//输出0
x=Math.sin(Math.PI)
trace(x)//输出1.22460635382238e-16 这是因为浮点数是以二进制格式存储的,因此会有一定的误差。这是一个非常接近于0的值
x=90*Math.PI/180 //把90度转换为弧度值
x=Math.sin(x)
trace(x)//输出为1
x=Math.sin(90)//之间计算数字90的正弦值
trace(x)//输出0.893996663600558
//从这里可以看出,flash as接受的是一个弧度值,如果是一个数字,则as会认为它是一个弧度来进行计算
下面是使用flash的绘图函数,绘制一个正弦函数的图
代码如下,加到第一帧就可以了
//使用绘图函数,绘制一个正弦函数的图像。
x0=50 //定义开始绘制的位置。
y0=200
a=100//定义一个初始的振幅,也就是扩大一个,不然sinθ的值小于1,很难看出来。
//我们设计一个动态绘制的过程。
du=0//定义开始绘制的角度
_root.moveTo(x0,y0) //绘制的初始位置
x=x0 //定义开始绘制的水平位置
_root.onEnterFrame=function(){ //进入帧时,开始绘制
_root.lineStyle(3,0×00ff00,100) //绘制格式
hudu=Math.PI*du/180 //把角度转换为弧度
x=x+0.5 //水平方向每隔0.5象素,绘制一次
du++ //角度递加,每次加一度
//trace(du),你可以测试一下角度的变化
y=y0-a*Math.sin(hudu) //绘制的y坐标.在这里为甚么用y0减去这个三角函数值呢?因为三角函数计算出来在小于180度时为一个正值而对于flash的场景来说,上边数值小,下面数值大,为了和数学上的函数图像适应,所以减去.
_root.lineTo(x,y) //绘制
if(du==720){ //如果角度增加到720度,也就是两个循环,重新开始绘制
clear() //清屏
x=x0 //初始化位置
_root.moveTo(x0,y0)
du=0 //角度变为0
}
}
- No Comments , 20 次阅读 Hits
-
标签:ActionScript, Math, 弧度, 数学

最活跃用户