Title: 2D IFS Viewer in Flash
Post by: Serisium on March 26, 2010, 03:39:31 AM
I made this a while ago, and I thought I might post it. http://www.truimagz.com/host/serisium/flash/IFS_engine.swf Here's the source code in AS3: import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; var bmd:BitmapData=new BitmapData(800,800,false,0x6666ff); var bm:Bitmap=new Bitmap(bmd); bm.x=100; bm.y=100; this.addChild(bm); var p:Point = new Point(); var fractals:Array = new Array(9); fractals[0]={name:"Sierpinski Triangle",desc:"...",rules:new Array({a:.5,b:0,c:0,d:.5,e:0,f:0,p:1/3},{a:.5,b:0,c:0,d:.5,e:.25,f:.5,p:1/3},{a:.5,b:0,c:0,d:.5,e:.5,f:0,p:1/3})}; fractals[1]={name:"Sierpinski Carpet",desc:"...",rules:new Array({a:1/3,b:0,c:0,d:1/3,e:0,f:0,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:1/3,f:0,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:0,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:0,f:1/3,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:1/3,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:0,f:2/3,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:1/3,f:2/3,p:1/8},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:2/3,p:1/8})}; fractals[2]={name:"Barnsley's fern",desc:"...",rules:new Array({a:0.00,b:0.00,c:0.00,d:0.16,e:0.00,f:0.00,p:.01},{a:0.85,b:0.04,c:-0.04,d:0.85,e:0.00,f:1.6,p:.85},{a:0.20,b:-0.26,c:0.23,d:0.22,e:0.00,f:1.6,p:.07},{a:-.15,b:0.28,c:0.26,d:0.24,e:0.00,f:0.44,p:.07})}; fractals[3]={name:"Cantor maze",desc:"...",rules:new Array({a:1/3,b:0,c:0,d:1/3,e:1/3,f:2/3,p:1/7},{a:0,b:1/3,c:1,d:0,e:2/3,f:0,p:3/7},{a:0,b:-1/3,c:1,d:0,e:1/3,f:0,p:3/7})}; fractals[4]={name:"5-sided crystal",desc:"...",rules:new Array({a:.382,b:0,c:0,d:.382,e:.3072,f:.6190,p:.2},{a:.382,b:0,c:0,d:.382,e:.6033,f:.4044,p:.2},{a:.382,b:0,c:0,d:.382,e:.0139,f:.4044,p:.2},{a:.382,b:0,c:0,d:.382,e:.1253,f:.0595,p:.2},{a:.382,b:0,c:0,d:.382,e:.4920,f:.0595,p:.2})}; fractals[5]={name:"Diagonal X",desc:"...",rules:new Array({a:1/3,b:0,c:0,d:1/3,e:0,f:0,p:1/5},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:0,p:1/5},{a:1/3,b:0,c:0,d:1/3,e:0,f:2/3,p:1/5},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:2/3,p:1/5},{a:1/3,b:0,c:0,d:1/3,e:1/3,f:1/3,p:1/5})}; fractals[6]={name:"Koch curve",desc:"...",rules:new Array({a:1/3,b:0,c:0,d:1/3,e:0,f:0,p:1/4},{a:1/6,b:-1/3.5,c:1/3.5,d:1/6,e:1/3,f:0,p:1/4},{a:1/6,b:1/3.5,c:-1/3.5,d:1/6,e:1/2,f:1/3.5,p:1/4},{a:1/3,b:0,c:0,d:1/3,e:2/3,f:0,p:1/4})}; fractals[7]={name:"Tree #1",desc:"...",rules:new Array({a:0,b:0,c:0,d:.5,e:0,f:0,p:.05},{a:.42,b:-.42,c:.42,d:.42,e:0,f:.2,p:.4},{a:.42,b:.42,c:-.42,d:.42,e:0,f:.2,p:.4},{a:.1,b:0,c:0,d:.1,e:0,f:.2,p:.15})}; fractals[8]={name:"Tree #2",desc:"...",rules:new Array({a:.195,b:-.488,c:.344,d:.443,e:.4431,f:.2452,p:.1699},{a:.462,b:.414,c:-.252,d:.361,e:.2511,f:.5692,p:.1811},{a:-.058,b:-.07,c:.453,d:-.111,e:.5976,f:.0969,p:.2161},{a:-.035,b:.07,c:-.469,d:-.022,e:.4884,f:.5069,p:.2198},{a:-.637,b:0,c:0,d:.501,e:.8562,f:.2513,p:.2131})}; var index:int=0; btn_reset.addEventListener(MouseEvent.CLICK, reset); btn_prev.addEventListener(MouseEvent.CLICK,prevfractal); btn_next.addEventListener(MouseEvent.CLICK,nextfractal); addEventListener(Event.ENTER_FRAME, ifs); function prevfractal(event:MouseEvent):void { index-=1; if(index==-1) index=8; bmd.fillRect(bmd.rect,0x006666ff); } function nextfractal(event:MouseEvent):void { index+=1; if(index==9) index=0; bmd.fillRect(bmd.rect,0x006666ff); } function reset(event:Event):void { bmd.fillRect(bmd.rect,0x6666ff); } function ifs(event:Event):void { for (var j:Number = 0; j < 1000; j++) { var rand:Number=Math.random(); for (var i:Number = 0; i < fractals[index].rules.length; i++) { if (rand<fractals[index].rules[i].p) { var rule:Object=fractals[index].rules[i]; break; } else { rand-=fractals[index].rules[i].p; } } var newp:Point = new Point((rule.a*p.x)+(rule.b*p.y)+(rule.e),(rule.c*p.x)+(rule.d*p.y)+(rule.f)); bmd.setPixel(800*newp.x,800*(1-newp.y),0x443322); p=newp; } }
Title: Re: 2D IFS Viewer in Flash
Post by: Timeroot on March 26, 2010, 05:27:36 AM
Nice applet. I see it just uses the regular affine transforms; that tree #2, I must say, looks like of the most realistic fractal trees I've ever seen! Very nice little thing! :thumbsup1:
|