[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]
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" }}
}