2008年9月24日星期三

《making things move》笔记(第三章)(1)

我们所讨论的角度,对于计算机来说,就是弧度。

公式:

弧度(radians) = 角度(degrees) * Math.PI /180

角度(degrees) = 弧度(radians) * 180 / Math.PI


FLASH坐标系:

Flash 是基于视频屏幕的坐标系,0,0 点为左上角,如图3-4。X值从左向右不断增大,但Y轴是相反的,


正值向下,负值向上。

所以,角度的计算在 Flash 中是颠倒的。顺时针旋转角度为正角。逆时针就意味着为负角。


三角函数

ActionScript 拥有一套用于计算不同三角关系的三角函数:

正弦,余弦,正切,反正弦,反余弦和反正切







正弦(Sine)


一个角的正弦值等于该角的对边与斜边的比,在 ActionScript中,使用 Math.sin(angle) 函数来表示。(angle: 将结果转换为弧度制)


Eg: Math.sin(30 * Math.PI / 180)






余弦(Cosine)


在 Flash 中,使用 Math.cos(angle) 就可以计算余弦值,余弦的定义为角的邻边与斜边之比






正切(Tangent)


Math.tan(angle)。它反应的是对边与邻边之间的关系


在 ActionScript 中,这个函数并不常用,而使用正弦和余弦的时候要多一些。另外,反正切函数却是非常有用的,后面会讲到,这里请大家记住正切函数的比例关系。






反正弦(Arcsine)和反余弦(Arccosine)


Math.asin(ratio) 和 Math.acos(ratio)

Eg:

Math.asin(0.5) * 180 / Math.PI

Math.acos(0.865) * 180 / Math.PI




反正切(Arctangent)


反正切简单地说就是正切函数的反函数。

Math.atan(ratio)

Math.atan2(y,x),这是 Flash 的另一个反正切函数,两个参数:对边长度与邻边长度。





旋转(Rotation)




var dx:Number = mouseX - arrow.x;

var dy:Number = mouseY - arrow.y;

var radians:Number = Math.atan2(dy, dx);

arrow.rotation = radians * 180 / Math.PI;


把这段代码放入enterFrame事件里。




波形




平滑的上下运动


Math.sin(angle):

如果想让物体上下或左右移动,那么就要用到这个函数。

考虑:使用 0~1~-1~0 的变化来实现这个动画,并且反复地使用这个波形。


例如。一个球类ball

ball.y = stage.stageHeight / 2 + Math.sin(angle) * 50;

ball的Y轴在(舞台宽度)/2的上下五十范围变化


利用这些,再加上X轴方向的速度,可以完成波形运动

ball.x += xspeed;

ball.y = centerY + Math.sin(angle) * range;

angle += yspeed;


ball.scaleX = ball.scaleY = centerScale + Math.sin(angle) * range正弦波还可以在 alpha,rotation 等属性中应用。

没有评论: