高级坐标旋转

时间:2012-12-08 18:49:22

标签: actionscript-3 actionscript rotation trigonometry

package  {
    import flash.display.Sprite;
    import flash.geom.Point;
    import flash.events.Event;

    public class Game2 extends Sprite {

        var balls:Array;
        var radius:Number = 50;
        var centerX:Number = stage.stageWidth / 2;
        var centerY:Number = stage.stageHeight / 2;
        var i:int = 0;
        var angle:Number = 0.1;
        var sin:Number = Math.sin(angle);
        var cos:Number = Math.cos(angle);
        public function Game2() {
            init();
        }



        function init():void
        {
            balls = new Array();
            for(i = 0; i < 8; i++)
            {
                var ball:Ball = new Ball(10, 0x00FF00);
                var xposition = centerX + Math.cos(i / 8 * Math.PI * 2) * radius;
                var yposition = centerY + Math.sin(i / 8 * Math.PI * 2) * radius;
                ball.x = xposition;
                ball.y = yposition;
                addChild(ball);
                balls.push(ball);
            }

            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }

        function onEnterFrame(e:Event):void
        {
            for(i = 0; i < balls.length; i++)
            {
                var ball:Ball = balls[i];
                var x1:Number = ball.x - stage.stageWidth / 2;
                var y1:Number = ball.y - stage.stageHeight / 2;
                var x2:Number = cos * x1 - sin * y1;
                var y2:Number = cos * y1 + sin * x1;
                ball.x = stage.stageWidth / 2 + x2;
                ball.y = stage.stageHeight / 2 + y2;
            }


        }

    }

}

有人可以解释这个公式的工作吗?:

var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;
如果我们像这样编辑它,我就无法理解:

var x2:Number = x1 - y1;
var y2:Number = x1 + y1;

所有的球都移动得如此之快并且超出了屏幕界限,这也是为什么我们改变它的原因:

var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;

or

var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;

它将起作用相同,据我所知,这里发生某种类型的simetry,如果我们在左侧或右侧,速度x == 0并且y处于其位置的最大速度,y减慢每当他靠近顶部或底部时,如果我们在顶部或底部,速度y == 0并且x处于其位置的最大速度,那么每次他靠近右侧或左侧时也会减速,我追查它,但我无法理解为什么我们必须乘以cos和罪,我已经追踪了这个时刻,但仍然无法弄清楚,有人可以解释这一刻吗?

1 个答案:

答案 0 :(得分:2)

这两个公式代表rotation matrix乘以向量。