Wadlschrat
Mitglied
Den ganzen Tag wühle ich mich schon durch's Netz, weil ich versuche Fraktale in PHP darzustellen. Die Lösung lag bei wikipedia. Danke an Thomas Darimont, der mich mit seinem Beitrag darauf gestoßen hat.
Das Ergebnis liegt bei. Hier der Quelltext:
Mein Laptop braucht übrigens 15,971755981445 Sekunden für das Bild aus dem Quelltext.
Inzwischen habe ich an den Parametern rumgeschraubt und z.B. die Farbpalette verändert. Das zweite Bild brauchte knapp drei Minuten.
Das Ergebnis liegt bei. Hier der Quelltext:
PHP:
<?php
// die Berechnung kann je nach Einstellungen dauern
set_time_limit(600);
// mandelbrot.php als Benchmark ;)
$startzeit=microtime(true);
// function punkt_iteration liefert bei den momentanen Einstellungen Werte bis 1000 zurück
// die $wertN sind die Schwellenwerte für die 6 eingesetzten Farben
$wert1=30;
$wert2=100;
$wert3=300;
$wert4=500;
$wert5=800;
$wert6=1000;
// $max_x und $max_y geben Hoehe/Breite des Bildes an
$max_x=700;
$max_y=700;
$max_iterationen=1000;
$punkt_abstand_x=0.001;
$punkt_abstand_y=0.001;
$min_cx=0.1;
$min_cy=0.5;
$max_betrags_quadrat=100000;
$image = imagecreatetruecolor($max_x, $max_y);
$bg = imagecolorallocate($image, 0, 0, 0);
function punkt_iteration($cx, $cy, $max_betrag_quadrat, $max_iter)
{
$betrag_quadrat = 0;
$iter = 0;
$x = 0;
$y = 0;
while ( $betrag_quadrat <= $max_betrag_quadrat and $iter < $max_iter )
{
$xt = $x * $x - $y * $y + $cx;
$yt = 2 * $x * $y + $cy;
$x = $xt;
$y = $yt;
$iter = $iter + 1;
$betrag_quadrat = $x * $x + $y * $y;
}
return($iter);
}
for($pix_x = 1; $pix_x<=$max_x;$pix_x++)
{
for($pix_y = 1; $pix_y<=$max_y;$pix_y++)
{
$cx = $min_cx + $pix_x * $punkt_abstand_x;
$cy = $min_cy + $pix_y * $punkt_abstand_y;
$iteration=punkt_iteration ( $cx, $cy, $max_betrags_quadrat, $max_iterationen );
if($iteration>=0 and $iteration <$wert1)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,0,0,0));
if($iteration>=$wert1 and $iteration <$wert2)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,255,255,0));
if($iteration>=$wert2 and $iteration <$wert3)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,0,0,255));
if($iteration>=$wert3 and $iteration <$wert4)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,0,255,0));
if($iteration>=$wert4 and $iteration <$wert5)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,255,255,0));
if($iteration>=$wert5 and $iteration <=$wert6)imagesetpixel($image,$pix_x,$pix_y,ImageColorAllocate($image,125,0,0));
}
}
imagejpeg($image,"./fraktal.jpg",100);
echo'<img src="./fraktal.jpg">';
echo'<br/>Dauer: '.(microtime(true)-$startzeit).' Sekunden.';
?>
Mein Laptop braucht übrigens 15,971755981445 Sekunden für das Bild aus dem Quelltext.
Inzwischen habe ich an den Parametern rumgeschraubt und z.B. die Farbpalette verändert. Das zweite Bild brauchte knapp drei Minuten.
Anhänge
Zuletzt bearbeitet: