forked from: Sunflower Seed Spiral

by aobyrne forked from Sunflower Seed Spiral (diff: 35)
♥0 | Line 52 | Modified 2011-06-20 05:32:23 | MIT License
play

ActionScript3 source code

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

// forked from Quasimondo's Sunflower Seed Spiral
package {
    import flash.display.StageAlign;
    import flash.text.TextField;
    import flash.display.Graphics;
    import flash.display.Sprite;
    public class SunflowerSpiral extends Sprite {
        private const third:Number=222.492;
        private const second:Number=99.50078;
        private const first:Number=137.50776;
        private const phi:Number=0.5*(Math.sqrt(5)-1);
        private const tau:Number=1/phi;
        public function SunflowerSpiral() {
           
            stage.align = StageAlign.TOP_LEFT;
            renderSpiral( 300, 7, 4, 0);
            renderSpiral( 120, 10, 5, 1,0xff0000,3,600);
            renderSpiral( 120, 10, 5, 2,0x0000ff,3,200,600);
            this.scaleX = this.scaleY = 0.55;
            var tf:TextField = TextField(addChild(new TextField()));
            tf.border = true;
            tf.height = 200;
            tf.visible = false;
            tf.text = String(360-first);
            tf.appendText( '\n'+String(phi));
            tf.appendText( '\n'+String(360*phi));
            tf.appendText( '\n'+String(360*phi*phi));
            tf.appendText( '\n'+String('-'));
            tf.appendText( '\n'+String(tau));
            tf.appendText( '\n'+String(270-first));
            tf.appendText( '\n'+String(second+first));
            tf.appendText( '\n'+String(first-second));
            tf.appendText( '\n'+String(second/first));
            tf.appendText( '\n'+String(1/(second/first)));
            tf.scaleX = tf.scaleY=1/this.scaleY;
        }
        
        
        private function renderSpiral( count:int, radius:int, padding:int, magicAngleIndex:uint = 0 
        ,color:uint=0,lineThickness:Number=0
        ,_x:Number=200, _y:Number=200):void
        {
        
            var g:Graphics = graphics;
            g.lineStyle(lineThickness,color);
            
            var x:Number = _x;
            var y:Number = _y;
            
            var divergence:Number = [first,second,third][magicAngleIndex % 3] / 180 * Math.PI;
           
             for ( var i:int = 1; i <= count; i++ )
            {
                var r:Number = (radius + padding) * Math.sqrt( i ) - radius * 0.3;
                var a:Number = divergence * i;
                g.drawCircle( x + Math.cos( a ) * r, y + Math.sin( a ) * r, radius);
             }
            
            
        }

    }
}