flash on 2010-5-8

by Geo877
♥0 | Line 88 | Modified 2010-05-08 05:54:33 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.events.MouseEvent;
    import flash.utils.Timer;
    import flash.trace.Trace;
    public class FlashTest extends Sprite {
    	public var maxIter:Number =300;
    	public var radiusSq:Number =4;
    	public var offsetX:Number = -1400;
    	public var offsetY:Number = -400;
    	public var mandelbrotData:BitmapData = new BitmapData(400, 400,true,0xFFFFFFFF);
    public var display:Bitmap;	
    public var zoom:Number = 1600;
    	
    	/* -- MOUSE -- */
    	public var m_mouseDown:Boolean = false;
    	public var m_lastX:Number=-1;
    	public var m_lastY:Number=-1;
    	public var m_double_clicking:Boolean = false;
    	public var m_double_click_timer:Timer = new Timer(300,0);
    	/* /////////// */
        public function FlashTest() {

        		stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
        		stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMove);
        		stage.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
        		m_double_click_timer.addEventListener("timer", function():void{m_double_clicking = false;});
            // ARGB
           // var mandelbrotData:BitmapData = new BitmapData(400, 400,false,0xFF00FF00);
            drawMandel(mandelbrotData);
            display = new Bitmap(mandelbrotData);  
            this.addChild(display);
           display.width=500;
           display.height=500;
        }
        
        public function drawMandel(pixels:BitmapData):void{
        		//loop each pixel
        		for(var y:Number = 0;y<pixels.height;y++){
        			for(var x:Number = 0;x<pixels.width;x++){
        				var xp:Number =(pixels.width/2)-x+offsetX;
        				var yp:Number =(pixels.height/2)-y+offsetY;
        				//pixel at x,y
        				var a:Number = 0;
        				var b:Number = 0;
        				var iteration:Number = 0;
        				while(iteration<maxIter && (a*a)+(b*b)<=radiusSq){
        					if((xp)*(xp)+(yp)*(yp)<=0.5)iteration = maxIter;
        					var aOld:Number = a;
        					a = (a*a)-(b*b) + xp/(zoom);
        					b = 2*aOld*b + yp/(zoom);
        					iteration++;
        					
        				}
        				if(iteration==maxIter){
        					//pixels.setPixel(x,y,0x00FFFF*(a*a)+(b*b));
        					pixels.setPixel(x,y,0x000000*(xp+yp));
        				}else{
        					//not within mandelbrot!
        					pixels.setPixel(x,y,0x110000*iteration+0x000011*iteration+0x001100*iteration);
        				}
        			}
        		}
        	
        		
        }
        
        public function mouseMove(e:MouseEvent = null):void{
	        	if(m_mouseDown){
		        	if(m_lastX>-1){
		        		offsetX+=mouseX-m_lastX;
		        	}
		        if(m_lastY>-1){
		        		offsetY+=mouseY-m_lastY;
		        	}
		        	m_lastX = mouseX;
		        	m_lastY = mouseY;
		        	drawMandel(mandelbrotData);
		        	
	        	}
        }
        
        
        public function mouseDown(e:MouseEvent = null):void{
        	    m_mouseDown = true;
        }
        
        
        public function mouseUp(e:MouseEvent = null):void{
        		m_lastX = -1;
        			m_lastY = -1;
        		m_mouseDown = false;
        		if(!m_double_clicking){
        			m_double_clicking = true;
        			m_double_click_timer.reset();
        			m_double_click_timer.start();
        		}else{
        			offsetX = 0;
        			offsetY = 0;
        			zoom=180;
        			drawMandel(mandelbrotData);
        			m_double_clicking = false;
        		}
        }
  
        	
    }
}