大家都知道Julia集是一种迭代算法,即不断将运算所得结果再投入算法计算,使得结果不断接近真实值
例如我们计算π,e都是用这个算法。
Julia集有很多形式,都需要消耗大量资源才能得出结果。而我们可以使用这个算法测试计算机性能。
因为使用BitmapData支持,所以请使用FlashPlayer8.0播放。
/**
ActionScriptSourceFile--CreatedwithSAPIENTechnologiesPrimalScript3.1
@classTest.as
@package
@authortcper@163.comLoki_tang
@codehint
@example:importTest;
varsomeObject:Test=newTest;
someObject.tester(.01);
@tooltip
*/
importflash.display.BitmapData;
classTestextendsMovieClip{
privatevarn:Number;
privatevarcx:Number;
privatevarcy:Number;
privatevarx2:Number;
privatevary2:Number;
privatevarrgb:Number;
privatevartimeGot:Number;
privatevarrgbOffset:Number;
privatevarpixelPos:Number;
privatevarmc:MovieClip;
privatevarmcOrigin:MovieClip;
privatevarmyBitmapData:BitmapData;
//a,b都是Julia集的参数
privatestaticvara:Number=.5;
privatestaticvarb:Number=.55;
privatestaticvarpixelNum:Number=0;
privatestaticvartimeLimitation:Number=4000;//计算时间限制
functionTest(){
bitmapCreator();
}
privatefunctionbitmapCreator():BitmapData{
myBitmapData=newBitmapData(400,400,false,0xcccccccc);
returnmyBitmapData;
}
privatefunctionmcCreator():MovieClip{
mcOrigin=this.createEmptyMovieClip("mc",this.getNextHighestDepth());
returnmcOrigin;
}
privatefunctiongetRGB(i:Number,u:Number):Number{
rgb=(i-u)*200;
returnrgb;
}
privatefunctiongetPixelPos(i:Number):Number{
pixelPos=Math.floor((i+1.5)*133.3);
returnpixelPos;
}
privatefunctiontimeCheck(i:Number):Boolean{
if((getTimer()-i)returntrue;
}else{
returnfalse;
}
}
//publicMethod;
publicstaticfunctionpixelStatistic():Number{
returnpixelNum;
}
publicfunctiontester(u:Number):Void{
rgbOffset=Math.floor(100*Math.random());
timeGot=getTimer();
varmc=mcCreator();
mc.attachBitmap(bitmapCreator(),this.getNextHighestDepth());
mc._x=mc._y=-200;
//以下是Julia算法.
for(vari=-1.5;i<=1.5;i+=u){
for(varj=-1.5;j<=1.5;j+=u){
cx=i;
cy=j;
for(varn=1;n<=100;n++){
pixelNum++;
x2=cx*cx-cy*cy+a;
y2=2*cy*cx+b;
cx=x2;
cy=y2;
if(cx*cx+cy*cy>4){
break;
}
if(!timeCheck(timeGot)){
return;
}
}
bitmapCreator().setPixel(getPixelPos(i),getPixelPos(j),getRGB(n,rgbOffset));
}
}
}
}