frattali: insieme di mandelbrot

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
[copio spudoratamente il post di alchiappone fu FH :emba: ]

generare l'insieme di Mandelbrot nell'intervallo [-2, 2][-2, 2]. La regola per disegnarlo è la seguente:

Prendiamo il pixel in posizione (x, y) e consideriamolo come se fosse un numero complesso x+iy. Chiamiamo questo numero Z e facciamo la seguente successione:

Succ_0 = Z
Succ_1 = Succ_0*Succ_0+Z
Succ_2 = Succ_1*Succ_1+Z
.
.
.
Succ_n = Succ_n-1*Succ_n-1+Z

Arriviamo per comodità fino a 256.

Se il modulo (abs) di Succ_n ad un certo punto diventa maggiore di 2 coloriamo il pixel di bianco, altrimenti coloriamolo di nero. Ancora meglio sarebbe colorare il pixel, anziché di bianco di un colore che dipende dal numero di iterazioni che si sono fatte.


[perl]
Codice:
#!/usr/bin/perl -w
use Math::Complex;

print "larghezza = "; $larghezza = <stdin>; chomp $larghezza;	
print "altezza = "; $altezza = <stdin>; chomp $altezza;		
$precisione = 256;	#definition

open FILE,">mandelbrot.ppm";
print FILE "P3\n$larghezza $altezza\n255\n";

$X0 = -2;	
$Y0 = -2;
$X1 = 2;
$Y1 = 2;

for ($x=0;$x<$larghezza;$x++) {		
$r = $X0+($x*($X1-$X0))/$larghezza;	
for ($y=0;$y<$altezza;$y++) {		
$i = $Y0+($y*($Y1-$Y0))/$altezza;	
$point = Math::Complex->make($r,$i);	
$value = $point;	

for ($cnt=0;$cnt<$precisione;$cnt++) {	
$value = $value*$value+$point;	
$modulo = abs($value);	
print "$modulo\n";	
if ($modulo>2) {last;}	
}
if ($modulo<=2) {	
print FILE "0 0 0\n"	
}
else {		
$a=int(100+$cnt/4);
$b=int($cnt/2); 
$c=int(4*$cnt); 
if ($a>128) {$a=128}; 
if ($b>128) {$b=128}; 
if ($c>255) {$c=255};
print FILE "$a $b $c\n"	}}
}
 
Stato
Discussione chiusa ad ulteriori risposte.