ActionScript 3 Trig用于创建椭圆的方程式

时间:2011-02-13 21:28:12

标签: flash actionscript-3 adobe trigonometry

我正在使用这个功能,将一个物体围绕一个完美圆形的中心点移动,并试图修改它以将其移动成宽度为1/2的椭圆形状?

基本上,我有一个设定的速度

var myVelocity:Number = 0.25;

然后我根据速度计算我的正弦和余弦

var myCos:Number = Math.cos(myVelocity);
var mySin:Number = Math.sin(myVelocity);

然后我计算物体距离每个轴的固定中心点的距离和

var x1:Number = myBall.x - centerX;
var y1:Number = myBall.y - centerY;
var x2:Number = myCos * x1 - mySin * y1;
var y2:Number = myCos * y1 + mySin * x1;
myBall.x = centerX + x2;
myBall.y = centerY + y2;

我有另一个根据myBall.x = centerX + cos(angle)* radius计算x和y的函数;这很容易修改半径成为椭圆,但有一种简单的方法来修改上面的椭圆变成椭圆吗?我想这样做是为了提高代码效率并减少数学函数调用次数

1 个答案:

答案 0 :(得分:1)

这个问题几乎逐字逐句Keith Peters

Foundation Actionscript 3.0: Making Things Move!涵盖的内容

我从书中为你掀起了一个快速片段。

import flash.display.Shape;
import flash.events.Event;

var box:Shape = new Shape();
box.graphics.beginFill(0xFF0000);
box.graphics.drawRect(0, 0, 50, 50);
box.graphics.endFill();
addChild(box);
var angle:Number = 0;
var centerX:Number = stage.stageWidth/2 - (box.width/2);
var centerY:Number = stage.stageHeight/2 - (box.height/2)
var radiusX:Number = 200;
var radiusY:Number = 100;
var speed:Number = .1;
stage.addEventListener(Event.ENTER_FRAME, loop, false, 0, true);

function loop(evt:Event):void
{
    box.x = centerX + Math.sin(angle) * radiusX;
    box.y = centerY + Math.cos(angle) * radiusY;
    angle += speed;
}

结果:http://www.swfupload.com/view/155573.htm