Gumowski / Mira

[SWF(width = 600, height = 600)]
var a:Number = 0.02;
var b:Number = .9998;

var xn1:Number = 5;
var yn1:Number = 0;
var xn:Number, yn:Number;

var scale:Number = 10;
var iterations:Number = 20000;

function f(x:Number):Number{
	var x2:Number = x * x;
	return a * x + (2 * (1 - a) * x2) / (1 + x2);
}
 
var canvas:BitmapData = Bitmap(addChild(new Bitmap(new BitmapData(600,600,false,0xEFEFEF)))).bitmapData;
																	   
addEventListener(Event.ENTER_FRAME, onLoop);
function onLoop(evt:Event):void {
	
    canvas.fillRect(canvas.rect, 0xEFEFEF);
	a = mouseY / 1000;
	xn1 = mouseX / 30;
	yn1 = 0;
	for (var i:int = 0; i<iterations; i++){
		  xn = xn1;
		  yn = yn1;
		  
          xn1 = b * yn + f(xn);
          yn1 =  -xn + f(xn1);
		  canvas.setPixel( 280 + xn1 * scale, 300 + yn1 * scale, 0x000000);
	}
}

Notice the setup for this is very similar to yesterdays flames attractor post.

Back in october of last year I stumbled upon the excellent subblue website by Tom Beddard. I was REALLY impressed by a blog post about Gumowski / Mira patterns. If you haven’t seen it you should go take a look.

I’d never heard of Gumowski / Mira patterns before and made a mental note to go and try to read about them and maybe find an equation to port to actionscript or processing. Anyway, a few days ago I decided to go ahead and look up the math and… this is the result.

I got equation over at mathworld…

For simplicity I intentionally made the actionscript code look as much like the mathworld equation as possible. Using f for my function name and using xn1, yn1 etc… There are a few speed optimizations that could be made but I wanted this snippet to be very readable.

Here are a few examples of what this code will generate:

Leave a Reply

Your email address will not be published. Required fields are marked *