ActionScript 3 Trig Equations для создания эллипса - PullRequest
0 голосов
/ 14 февраля 2011

Я работаю с этой функцией, которая перемещает объект вокруг центральной точки в идеальном круге и пытаюсь изменить его, чтобы переместить его в овальную форму, которая в 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;

У меня есть другая функция, которая вычисляет x и y на основе myBall.x = centerX + cos (angle) * radius;это достаточно легко изменить радиус, чтобы стать эллипсом, но есть ли простой способ изменить вышеупомянутый, чтобы стать эллипсом?Я хочу сделать это, чтобы быть более эффективным с кодом и сократить количество вызовов математических функций

1 Ответ

1 голос
/ 14 февраля 2011

Этот вопрос почти дословно к тому, что Кейт Питерс охватывает в Foundation Actionscript 3.0: заставить все двигаться!

Я взяла для тебя быстрый отрывок из книги.

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

...