Flash ActionScript 3创建椭圆的三角方程

Flash ActionScript 3创建椭圆的三角方程,flash,actionscript-3,adobe,trigonometry,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 = my

我正在使用这个函数,它将一个对象围绕一个完美圆的中心点移动,并试图修改它,使其以一个椭圆形移动,该椭圆形的高度是其宽度的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和y。x=中心x+cos(角度)*半径;这很容易将半径修改为椭圆,但是有没有简单的方法将上面的半径修改为椭圆?我想这样做是为了更有效地使用代码,减少数学函数调用的数量

这个问题几乎是一字不差地涉及到

我从这本书中为你快速地编了一个片段

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;
}

结果:

应该是
var mySin:Number=Math.sin(myVelocity)@weltraumpirat:编辑question@OXMO456:是的,我知道,但既然@user615460是新来的,我就慢了。。。那里完成:)@weltraumpirat:这就是我所拥有的:)我正试图将它从一个圆修改成一个椭圆。谢谢你,但我已经知道了。我试图修改提供的代码,以减少数学函数调用的数量。我最终将在25个对象的循环中使用代码。如果我必须在每次重复中调用每个对象的正弦和余弦,那就是大量的数学函数调用。因为cos和sin不会改变,如果我可以计算一次,然后按照提供的循环进行迭代,那么代码就会运行得更干净更快。所以问题仍然是我如何将我提供的代码修改成一个椭圆,而不使用loop@user615460您刚才回答自己:)…检查“查找表”…基本上在数组中存储一次sin/cos值,并使用一个int递增并跳转到零,您将使用该int引用sin/cos数组值…而且,如果没有查找表,在循环对象之前存储sin/cos值,那么每帧将有25个sin/cos调用,对吗?我很抱歉。我确实误读了你问题的最后一部分。我想删除它,但它引发了一些有用的聊天;变量y1:Number=myY-mycentry;变量x2:Number=(myCos*x1)-(mySin*y1);变量y2:Number=(myCos*y1)+(mySin*x1);myBall.x=mycentrex+x2;myY=mycentry+y2;myBall.y=(myY*0.5)+(mycentry/2);