alternating paper-folding labyrinth

by forresto forked from paper-folding labyrinth (diff: 68)
Inspired by Britney Gallivan's math
* http://www.pomonahistorical.org/12times.htm
♥0 | Line 61 | Modified 2010-09-08 21:49:44 | MIT License
play

ActionScript3 source code

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

/*
 * Inspired by Britney Gallivan's math
 * http://www.pomonahistorical.org/12times.htm
 */

package 
{
    import flash.display.*;
    import flash.events.*;
    
    import frocessing.display.*;
    
    [SWF(frameRate="3", backgroundColor="#FFFFFF")] 
    public class FoldingPaperAlternating extends F5MovieClip2D
    {
        
        private var _w:Number;
        private var _h:Number;
        private var _y:int;
        private var current:int = 0;
        private var max:int = 7;

        private var thickness:int = 20;

        public function FoldingPaperAlternating() 
        {
            _w = stage.stageWidth;
            _h = stage.stageHeight;
            _y = _h/3;
            noFill();
        }

        public function draw():void
        {
            if( isMousePressed ) {
                current = 0;
                thickness = 20;
            }
            
            if (current < max)
                current++;
            
            fold(current);
        }
        
        public function fold(folds:int):void {
            var numArcs:int = Math.pow(2, folds-1);
            thickness = Math.round(_w/numArcs/2);
            drawArcs(numArcs*thickness, _y, numArcs);
            
            var _x:int = 0;
            var _x2:int = numArcs*thickness*2;
            var left:Boolean = true;
            for (var i:int=numArcs/2; i>=1; i=i/2) {
                if (left) {
                    _x += thickness*i;
                    drawArcs(_x, _y, i, true);
                    _x += thickness*i;
                    left = false;
                } else {
                    _x2 -= thickness*i;
                    drawArcs(_x2, _y, i, true);
                    _x2 -= thickness*i;                    
                    left = true;
                }
            }
        }
        
        public function drawArcs(centerX:Number, centerY:Number, numArcs:int, upper:Boolean=false):void {
            var updown:Number = upper ? -1 : 1;
            for (var i:int=numArcs; i>0; i--) {
                var radius:Number = thickness*i;
                arc(centerX, centerY, radius*2, radius*2, 0, PI*updown);
            }
        }
    }
}