LikeQuadraticFunction

by okoi
♥0 | Line 48 | Modified 2014-04-15 17:46:30 | MIT License
play

ActionScript3 source code

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

package 
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.events.Event;
    
    [SWF(width = "465", height = "465", frameRate = "60")]
    
    /**
     * 二次関数のような放物線の見え方を作る
     * オブジェクトを動かす時の制御とかで使うかんじ
     * @author okoi
     */
    public class Main extends Sprite 
    {
        public static const WIDTH:Number = 465;
        public static const HEIGHT:Number = 465;
        
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            var g:Graphics = this.graphics;
            g.beginFill(0);
            g.drawRect(0, 0, WIDTH, HEIGHT);
            g.endFill();
            
            drawParabola( 10, HEIGHT, 0xFFFFFF );
            drawParabola( 10, HEIGHT / 2, 0xFFFFFF );
            
            drawParabola( 20, HEIGHT, 0xFF0000 );
            drawParabola( 20, HEIGHT / 2, 0xFF0000 );
            
            drawParabola( 30, HEIGHT, 0x00FF00 );
            drawParabola( 30, HEIGHT / 2, 0x00FF00 );
            
            drawParabola( 40, HEIGHT, 0x5555FF );
            drawParabola( 40, HEIGHT / 2, 0x5555FF );
        }
        
        public function calc( currentFrame:int, maxFrame:int, maxValue:Number ) : Number
        {
            var a:Number = (maxFrame * maxFrame) / maxValue;
            return    (currentFrame * currentFrame) / a;
        }
        
        public function drawParabola( maxFrame:int, maxValue:Number, color:Number ) : void
        {
            var g:Graphics = this.graphics;
            g.lineStyle( 1, color );
            g.moveTo( 0, 0 );
            for ( var i:int = 0; i <= maxFrame; i++ ) {
                var value:Number = calc( i, maxFrame, maxValue );
                g.lineTo( 10 * i, HEIGHT - value );
            }
        }
        
    }
    
}