forked from: Restricting range of circulating value

by Quasimondo forked from Restricting range of circulating value (diff: 22)
♥0 | Line 115 | Modified 2011-02-08 23:18:45 | MIT License
play

ActionScript3 source code

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

// forked from Fumio's Restricting range of circulating value
package {
    import flash.display.Sprite;
    import flash.utils.getTimer;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    [SWF(width = "240",height = "180")]
    public class RangeRestriction extends Sprite {
        static private const MAX_NUMBER:uint = 10000000;
        static private const HALF:Number = 180;
        static private const FULL:Number = HALF * 2;
        private var my_txt:TextField = new TextField();
        private var label_txt:TextField = new TextField();
        private var my_fmt:TextFormat = new TextFormat();
        public function RangeRestriction() {
            // Creating a TextField for display
            createTextField();
            // Starting Test
            test_modulo();
            test_modulo2();
            test_division();
            test_conditional_operator();
            test_modulo3();
        }
        private function test_modulo():void {
            var begin:int =  -MAX_NUMBER / 2;
            var end:int = MAX_NUMBER + begin;
            var started:int = getTimer();
            for (var i:int = begin; i < end; i++) {
                var temp:Number = use_modulo(i);
            }
            xTrace("modulo with if",getTimer() - started);
        }
        
        
        private function test_modulo2():void {
            var begin:int =  -MAX_NUMBER / 2;
            var end:int = MAX_NUMBER + begin;
            var started:int = getTimer();
            for (var i:int = begin; i < end; i++) {
                var temp:Number = use_modulo2(i);
            }
            xTrace("modulo with ?:",getTimer() - started);
        }
        private function test_division():void {
            var begin:int =  -MAX_NUMBER / 2;
            var end:int = MAX_NUMBER + begin;
            var started:int = getTimer();
            for (var i:int = begin; i < end; i++) {
                var temp:Number = use_division(i);
            }
            xTrace("division",getTimer() - started);
        }
        private function test_conditional_operator():void {
            var begin:int =  -MAX_NUMBER / 2;
            var end:int = MAX_NUMBER + begin;
            var started:int = getTimer();
            for (var i:int = begin; i < end; i++) {
                var temp:Number = use_conditional_operator(i);
            }
            xTrace("conditional operator",getTimer() - started);
        }
         private function test_modulo3():void {
            var begin:int =  -MAX_NUMBER / 2;
            var end:int = MAX_NUMBER + begin;
            var started:int = getTimer();
            for (var i:int = begin; i < end; i++) {
                var temp:Number = use_modulo3(i);
            }
            xTrace("modulo3",getTimer() - started);
        }
        private function use_modulo(nAngle:Number):Number {
            nAngle +=  HALF;
            nAngle %=  FULL;
            if ((nAngle < 0)) {
                nAngle +=  HALF;
            } else {
                nAngle -=  HALF;
            }
            return nAngle;
        }
        private function use_modulo2(nAngle:Number):Number {
            var nHalf:Number = HALF;
            nAngle +=  nHalf;
            nAngle %=  FULL;
            // nAngle += (nAngle < 0) ? HALF : -HALF;
            nAngle = (nAngle < 0) ? nAngle + nHalf : nAngle - nHalf;
            return nAngle;
        }
        private function use_division(nAngle:Number):Number {
            nAngle = nAngle - FULL * Math.floor(0.5 + nAngle / FULL);
            return nAngle;
        }
        private function use_conditional_operator(nAngle:Number):Number {
            var nAngle : Number = (nAngle < 0)
                                ? HALF - (-nAngle + HALF) % FULL
                                : (nAngle + HALF) % FULL - HALF;
            return nAngle;
        }
         private function use_modulo3(angle:Number):Number {
           
           var nHalf:Number = HALF;
            angle += ((angle = ( angle + nHalf ) % FULL) < 0) ? nHalf : - nHalf;
            return angle;
        }
        
        
        
        private function createTextField():void {
            addChild(my_txt);
            addChild(label_txt);
            my_fmt.align = TextFormatAlign.RIGHT;
            my_txt.x +=  50;
            my_txt.defaultTextFormat = my_fmt;
            my_txt.autoSize = TextFieldAutoSize.RIGHT;
            label_txt.autoSize = TextFieldAutoSize.LEFT;
        }
        private function xTrace(_str:String,n:int):void {
            my_txt.appendText((String(n) + "\n"));
            label_txt.appendText(((_str + ":") + "\n"));
        }
    }
}

Forked