Buddhabrot Buddhabrot 終了まで一分 ref. http://en.wikipedia.org/wiki/Buddhabrot naraba forked:3favorite:2lines:75license : MIT License modified : 2009-11-28 15:04:46 Embed Tweet // Buddhabrot // 終了まで一分 // ref. http://en.wikipedia.org/wiki/Buddhabrot package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.utils.Timer; import flash.events.TimerEvent; [SWF(width="465", height="465")] public class Buddhabrot extends Sprite { private static const SIZE:Number = 465; private static const POINTS:uint = 3000000; private static const ITERATIONS:uint = 1000; private static const TO_INFINITY:Number = 4; private var counters:Array; private var bitmap:Bitmap; private var canvas:BitmapData; private var timer:Timer = new Timer(200); public function Buddhabrot():void { Wonderfl.capture_delay(60); counters = new Array(SIZE*SIZE).map(function():* { return 0; }); canvas = new BitmapData(SIZE, SIZE); bitmap = new Bitmap(canvas); addChild(bitmap); timer.addEventListener(TimerEvent.TIMER, step); timer.start(); } private function step(e:TimerEvent):void { if (timer.currentCount*10000 >= POINTS) { timer.stop(); } render(10000); } private function render(points:uint):void { for (var i:uint = 0; i < points; i++) { var cx:Number = Math.random()*3-2; var cy:Number = Math.random()*3-1.5; if (iterate(cx, cy, true)) { iterate(cx, cy, false); } } for (var x:uint = 0; x < SIZE; x++) { for (var y:uint = 0; y < SIZE; y++) { var col:uint = counters[x+y*SIZE]; canvas.setPixel(y, x, Math.min(col, 0xFF)); } } } private function iterate(cx:Number, cy:Number, isFirst:Boolean):Boolean { var x:Number = 0; var y:Number = 0; for (var i:uint = 0; i < ITERATIONS; i++) { var nx:Number = x*x-y*y+cx; var ny:Number = 2*x*y+cy; var px:uint = int(SIZE*(nx+2)/3); var py:uint = int(SIZE*(ny+1.5)/3); if (!isFirst && px >= 0 && px < SIZE && py >= 0 && py < SIZE) { counters[px+py*SIZE] += 1; } if (nx*nx+ny*ny > TO_INFINITY) { return true; } x = nx; y = ny; } return false; } } } Code Fullscreen Preview Fullscreen greentec oreore mandelbrot currentCount stop addEventListener TimerEvent map start Math.min Boolean TimerEvent.TIMER Timer addChild uint Array Math.random Sprite int Number sort new page view favorite forked pv29 forked from: Buddhabrot ovikholt forked:0 favorite:0lines:75 (diff:1) pv224 forked from: Buddhabrot ovikholt forked:0 favorite:0lines:77 (diff:14) pv352 forked from: Buddhabrot roboto forked:1 favorite:0lines:75 (diff:72)