※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : toyoshim's マンデルブロ高速化 [diff(6)]

FORKED

forked from: マンデルブロ高速化 Random Mandelbrot-like set [diff(32)]

  1. // forked from makc3d's forked from: マンデルブロ高速化
  2. // forked from toyoshim's マンデルブロ高速化
  3. // forked from toyoshim's マンデルブロ @ Frocessing
  4. package {
  5.     import flash.display.*;
  6.     import flash.text.*;
  7.     import flash.events.*;
  8.     import frocessing.color.ColorHSV;
  9.     import net.hires.debug.Stats;
  10.     import com.bit101.components.*;
  11.     [SWF(width="465", height="465", frameRate="30", backgroundColor="0x00000000")]
  12.     public class Mandelbrot extends Sprite {
  13.         private var bmp:Bitmap;
  14.         private var img:BitmapData;
  15.         private var txt:TextField;
  16.         
  17.         private var offset_x:Number = 100.0;
  18.         private var offset_y:Number = 0.0;
  19.         private var zoom:Number = 0.6;
  20.         private var coefs:Array;
  21.         public function Mandelbrot() {
  22.             // width x height, no transparent, ARGB=0x00000000
  23.             img = new BitmapData(stage.stageWidth, stage.stageHeight, false0);
  24.             bmp = new Bitmap(img);
  25.             var bmph:Sprite = new Sprite;
  26.             bmph.addChild (bmp);
  27.             stage.addChild(bmph);
  28.             
  29.             // add mouse event listener
  30.             bmph.addEventListener(MouseEvent.CLICK, onClick);
  31.             // add debug status window
  32.             stage.addChild(new Stats());
  33.             // make sliders for 37 iteration coefs
  34.             coefs = [];
  35.             for (var n:int = 0; n <= 36; n++) {
  36.                 var slider:HUISlider = new HUISlider (null30012 * (n + 1), n.toString (), draw);
  37.                 slider.minimum = -1;
  38.                 slider.maximum = +1;
  39.                 slider.value = 1;
  40.                 slider.alpha = 0.5;
  41.                 coefs [n] = slider;
  42.                 stage.addChild (slider);
  43.             }
  44.             
  45.             // draw initial image
  46.             draw();
  47.         }
  48.         public function onClick(event:MouseEvent):void {
  49.             offset_x = (offset_x + stage.mouseX - img.width / 2.0)
  50.                         / zoom;
  51.             offset_y = (offset_y + stage.mouseY - img.height / 2.0)
  52.                         / zoom;
  53.             zoom *= event.shiftKey ? 1 / 1.2 : 1.2;
  54.             offset_x *= zoom;
  55.             offset_y *= zoom;
  56.             draw();
  57.         }
  58.         
  59.         private function calcDepth(x:int, y:int):int {
  60.             var cx:Number = (x + offset_x - img.width * 2.2 / 3.0)
  61.                         / (img.width / 2.0) / zoom;
  62.             var cy:Number = (y + offset_y - img.height / 2.0)
  63.                         / (img.height / 2.0) / zoom;
  64.             var r:Number = 0.0;
  65.             var i:Number = 0.0;
  66.             var n:int;
  67.             for (n = 0; n <= 36; n++) {
  68.                 var cn:Number = HUISlider (coefs [n]).value;
  69.                 var nr:Number = r * r - i * i + cn * cx;
  70.                 var ni:Number = 2.0 * r * i + cn * cy;
  71.                 r = nr;
  72.                 i = ni;
  73.                 if ((r * r + i * i) > 4break;
  74.             }
  75.             return 360 - n * 10;
  76.         }
  77.         
  78.         private function calcColor(n:int):int {
  79.             var hsv:ColorHSV = new ColorHSV(n, n, n);
  80.             return hsv.value32;
  81.         }
  82.         private function draw(e:Event = null):void {
  83.             img.lock();
  84.             for (var y:int = 0; y < img.height; y++) {
  85.                 for (var x:int = 0; x < img.width; x++) {
  86.                     img.setPixel32(x, y, calcColor(calcDepth(x, y)));
  87.                 }
  88.             }
  89.             img.unlock();
  90.         }
  91.     }
  92. }
noswf
Get Adobe Flash Player