Elképesztő, és meg tudja csinálni, mindjárt sírok, utoljára 1993-ban csináltak ilyet, assemblerben, 4K-s demóba, jahaaaj, a történelem ismétli önmagát :)
//begin // // package { // // // import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.StageScaleMode; import flash.utils.*; import flash.events.TimerEvent; import flash.geom.Point; // // // public class MandelbrotSet extends Sprite { // // // private var mbCNT:Bitmap; private var mbBMP:BitmapData; private var moveTimer:Timer; // private var maxCycles:int = 32; // meddig pörgesünk egy adott pontot private var planeRot:Number = 0; // private var XCENTER:Number = -1.5; private var YCENTER:Number = 0; // private var LEFT:Number = -2; // a komplex számsík valós minimuma private var RIGHT:Number = 1; // a komplex számsík valós maximuma private var TOP:Number = 1; // a komlex számsík imaginárius maximuma private var BOTTOM:Number = -1; // a komplex számsík imaginárius minimuma // private var WTH:int = 200; // a rajzterünk szélessége private var HTH:int = 200; // a rajztér magassága // private var XSTEPPING:Number; // a valós rész lépésköze private var YSTEPPING:Number; // az imaginárius rész lépésköze // private var zr:Number; //a változó valós változónk private var zi:Number; // a változó imaginárius változónk private var cr:Number; // a fix pontunk valós része private var ci:Number; // a fix pontunk imaginárius része private var zrsq:Number; //zr négyzete private var zisq:Number; //zi négyzete // // // public function MandelbrotSet( ) { // stage.scaleMode = StageScaleMode.NO_SCALE; // mbBMP = new BitmapData( WTH , HTH , false , 0x110000 ); mbCNT = new Bitmap( mbBMP ); addChild( mbCNT ); // moveTimer = new Timer( 10 ); moveTimer.addEventListener( TimerEvent.TIMER , zoom ); moveTimer.start( ); // } // // // private function zoom ( eventOBJ:TimerEvent ):void { // LEFT += ( XCENTER - LEFT )/32; RIGHT += ( XCENTER - RIGHT )/32; BOTTOM += ( YCENTER - BOTTOM )/32; TOP += ( YCENTER - TOP )/32; // XSTEPPING = ( RIGHT - LEFT ) / WTH; // a valós rész lépésköze YSTEPPING = ( TOP - BOTTOM ) / HTH; // az imaginárius rész lépésköze // planeRot += Math.PI/32; // for ( var a:int = 0 ; a < WTH ; ++a ) for ( var b:int = 0 ; b < HTH ; ++b ) calcPoint( a , b ); // } // // // private function calcPoint( xp:int , yp:int ):void { // var length:Number = Math.sqrt( xp*xp + yp*yp ); var angle:Number = Math.atan2( yp , xp ) + planeRot; var newPos:Point = Point.polar( length , angle ); // zr = 0; //a komplex számnunk valós része zi = 0; //a komplex számunk imaginárius része cr = LEFT + XSTEPPING * newPos.x; //az aktuálisan vizsgált pontunk valós része ci = BOTTOM + YSTEPPING * newPos.y; //az aktuálisan vizsgált pontunk imaginárius része // zrsq = zr*zr; zisq = zi*zi; // for ( var a:int = 0 ; a < maxCycles ; ++a ) { // zi = zr * zi * 2 + ci; zr = zrsq - zisq + cr; // zrsq = zr * zr; zisq = zi * zi; // if ( zrsq + zisq > 4 ) // a végtelenbe tart { // var color:int = a*4 << 16 | ( a*4 + 50 ) << 8 | a*4 ; mbBMP.setPixel( xp , yp , color ); return; // } // } // mbBMP.setPixel( xp , yp , 0x000000 ); // } // // // } // // // } // // //end
A cikkhez kapcsolódó hozzászólásokat a fórum "Actionscript 3" topicjában várjuk.