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.






