双角波形
一种思想:
设置两套数值 angle1 和 angle2,
为它们各自增加一个中心点(center)和速度(speed)值。
用一个正弦波作为一种属性,另一个正弦波作为另一种属性,比如位置或缩放。
从 Random.as 文档类开始,这里面拥有两个角度(angle),两个速度(speed)和两个中心点(center),将其中一个角(angle1)作为小球的X坐标,另一个角(angle2)作为Y坐标。运行程序时,就像只虫子在房间里飞
将ball替换成点。可以画出轨迹。
xpos=centerX+Math.sin(angleX)*range;
ypos=centerY+Math.sin(angleY)*range;
angleX+=xspeed;
angleY+=yspeed;
graphics.lineTo(xpos,ypos)
轨迹图――
圆形运动
在执行物体移动的动画时,完全可以使用余弦来代替正弦。
实际上,余弦和正弦协同工作时,才能形成一个更加有用的功能:使物体沿圆形运动
记住用正弦函数计算 y ,用余弦函数计算 x。
ball.x = centerX + Math.cos(angle) * radius;
ball.y = centerY + Math.sin(angle) * radius;
angle += speed;
椭圆运动
。如果让x和y运动的大小相同,那么就得到一个圆。如果想得到一个椭圆形,我们只需要在计算x和y位置时使用不同的半径值: radiusX 和 radiusY 。
ball.x = centerX + Math.cos(angle) * radiusX;
ball.y = centerY + Math.sin(angle) * radiusY;
angle += speed;
勾股定理
在 Flash 中,最常见的情况是我们只知道两条直角边的长度要求出斜边的长度。比如,求出两点间的距离。
dx = x2 – x1;
dy = y2 – y1;
dist = Math.sqrt(dx*dx + dy*dy);
在学到碰撞检测时,我们会发现内置的碰撞检测(hit testing)方法存在着先天不足,然后会看到使用勾股定理公式完成基于距离(distance-based)碰撞检测方法。它还非常适合用于计算重力或弹力等,因为这些力的大小与两个物体之间的距离成正比。
===========================================
本章重要公式
基本三角函数的计算:
角的正弦值 = 对边 / 斜边
角的余弦值 = 邻边 / 斜边
角的正切值 = 对边 / 邻边
角度制与弧度制的相互转换:
弧度 = 角度 * Math.PI / 180
角度 = 弧度 * 180 / Math.PI
向鼠标旋转(或向某点旋转):
// substitute mouseX, mouseY with the x, y point to rotate to
dx = mouseX - sprite.x;
dy = mouseY - sprite.y;
sprite.rotation = Math.atan2(dy, dx) * 180 / Math.PI;
创建波形:
// assign value to x, y or other property of sprite or movie clip,
// use as drawing coordinates, etc.
public function onEnterFrame(event:Event){
value = center + Math.sin(angle) * range;
angle += speed; }
创建圆形:
// assign position to x and y of sprite or movie clip,
// use as drawing coordinates, etc.
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radius;
yposition = centerY + Math.sin(angle) * radius;
angle += speed; }
创建椭圆:
// assign position to x and y of sprite or movie clip,
// use as drawing coordinates, etc.
public function onEnterFrame(event:Event){
xposition = centerX + Math.cos(angle) * radiusX;
yposition = centerY + Math.sin(angle) * radiusY;
angle += speed; }
计算两点间距离:
// points are x1, y1 and x2, y2
// can be sprite / movie clip positions, mouse coordinates, etc.
dx = x2 – x1;
dy = y2 – y1;
dist = Math.sqrt(dx*dx + dy*dy);
没有评论:
发表评论