flash on 2010-5-8
♥0 |
Line 88 |
Modified 2010-05-08 05:54:33 |
MIT License
archived:2017-03-29 12:36:45
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;
}
}
}
}