Bonjour,
le programme ci-dessous fonctionne ,
mais quelque soit la précision des calcules(
'float' , 'double' et 'long double' )
le résulta est toujours le même.
Dés que le zoom atteint la valeur de 200000 ,
l'image commence à pixeliser.
J'aimerai savoir pourquoi le calcul ne se fait que sur des 'floats' et ignore les 'doubles'.
J'utilise code blocks v10.05 sous winxp sur un p4 32btis
avec les optimisations o,o1,o2 et o3.
Merci.
void Fractal_Mandelbrot(int image,float mx,float my,float zoom,float op1,float op2){
//mx=201
//my=257
//zoom=200000
//op1=0
//op2=0
//lg=800
//ht=600
image=teste_si_image_existe(image);
if (image==-1)return ;
int *pixel=(int*)mem_eax;
int lg=mem_ebx;
int ht=mem_ecx;
if (mx<0.0)mx=0.0;
if (my<0.0)my=0.0;
if (mx>lg)mx=lg;
if (my>ht)my=ht;
if (zoom<1.0)zoom=1.0;
long double zoomf=double(zoom);
long double mxf=double(mx);
long double myf=double(my);
long double lgf=double(lg);
long double htf=double(ht);
long double pxmin=-(2/zoomf)+(4.0*mxf/lgf)-2.0;
long double pymin=-(2/zoomf)+(4.0*myf/htf)-2.0;
long double pxmax=zoomf/4*lgf;
long double pymax=zoomf/4*htf;
int color,r,g,b;
long double cx,cy,zx,zy,tmp;
for (long double x=0;x<lg;x+=1.0){
for (long double y=0;y<ht;y+=1.0){
if ((op1==0)&&(op2==0)){
cx=(x/pxmax)+pxmin;
cy=(y/pymax)+pymin;
zx=0;
zy=0;
}else{
//zx=(4*x/(zoom*lg))+px;
//zy=(4*y/(zoom*ht))+py;
cx=op1;
cy=op2;
}
color=0;
while ((zx*zx+zy*zy)<4.0 && color<4096){
tmp=zx*zx-zy*zy+cx;
zy=2.0*zx*zy+cy;
zx=tmp;
color++;
}
*(pixel+int(x)+(int(y)*lg))=color*8*0x10000 + color*4*0X100 + color;
}
}
}