回転行列

by Ryogo_Quberey
♥0 | Line 68 | Modified 2011-04-02 17:52:11 | MIT License
play

ActionScript3 source code

/**
 * Copyright Ryogo_Quberey ( http://wonderfl.net/user/Ryogo_Quberey )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/tmMh
 */

//http://blog.azzip-azzip.com/ より
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.*;
 
    /**
     * ...
     * @author 
     * 
     * 回転行列の勉強
     * 
     */
    public class Test06 extends Sprite  
    {
        //回るスピード
        private const _ANGLE:Number = 0.01;
        //半径
        private const _RADIUS:uint = 180;
        //ballの数
        private const _NUM:uint = 20;
        //ballクラスからインスタンスの生成
        private var ball:Ball;
        //配列用のVector
        private var _ballList:Vector.<Ball>;
 
        private var tf:TextField;
        private var tfmt:TextFormat;
 
        /**
         * コンストラクタ
         */
        public function Test06():void
        {        
            init();
        }
 
      
 
        /**
         * init
         */
        private function init():void
        {
            _ballList = new Vector.<Ball>();
            for (var i: int = 0; i < _NUM; i++) 
            {
                //オブジェクトを円環状にならべて配列に格納
                var angle:Number = (360 * (i / 20)) * Math.PI/180;
                ball = new Ball(8,Math.random() * 0xFFFFFF);
                ball.x = stage.stageWidth / 2 + _RADIUS * Math.cos(angle);
                ball.y = stage.stageHeight / 2 + _RADIUS * Math.sin(angle);
                addChild(ball);
                _ballList.push(ball);
            }
            //enterFrame
            addEventListener(Event.ENTER_FRAME, enterHandler);
        }
 
        /**
         *  回転行列の公式
         */
        private function enterHandler(e:Event):void 
        {
            //角度の計算
            var cos:Number = Math.cos(_ANGLE); 
            var sin:Number = Math.sin(_ANGLE); 
            for (var i: int = 0; i < _NUM; i++) 
            {
                //回転させる円の中心点からオブジェクトの距離を計算
                var dx:Number = _ballList[i].x - stage.stageWidth / 2;
                var dy:Number = _ballList[i].y - stage.stageHeight / 2;
                //回転行列
                var x1:Number = cos * dx - sin * dy;
                var y1:Number = cos * dy + sin * dx; 
                //プロパティに割り当てる
                _ballList[i].x = stage.stageWidth / 2 + x1;
                _ballList[i].y = stage.stageHeight / 2 + y1;
 
            }
        }
    }
}
import flash.display.Sprite;

class Ball extends Sprite
{
    public var rot:Number =0;
    public var vx:Number = Math.cos(rot * Math.PI / 180)*40 ;
    public var vy:Number = Math.sin(rot* Math.PI / 180)*40 ;
    public var mass:Number = 3;
    public var radius:Number = 30
    public var color:uint = 0xFF0000;
    
    public function Ball(r:Number = 10, c:uint = 0x11FFCC)
    {
        radius = r;
        color = c;
        
        graphics.beginFill(c);
        graphics.drawCircle(0, 0, r);
        graphics.endFill();
    }

}