Vandaag aan het spelen geweest met Mandelbrots. Dat is best ingewikkeld voor iemand met MAVO Wiskunde D. Met hulp van Wikipedia en een voorbeeldje op internet is het nog best wat geworden.
Mijn probleem is alleen dat het niet zo heel snel is. Nu begrijp ik dat er ook veel berekend moet worden, maar toch moet er nog meer snelheid te halen zijn. Mijn idee was al om het aantal iteraties te verlagen, maar dan word het plaatje denk erg korrelig. Dat gaan we zo eens uit proberen. Dit is de code in ieder geval:
header("content-type: image/png"); $xRealMin = -1.5; $xRealMax = 0.5; $yImaginaryMin = -1; $yImaginaryMax = 1; $iMaxIterations = 200; $iImageWidth = 500; $iImageHeight = 500; $iImageHeightHalf = Round( $iImageHeight / 2, 0); $rImage = imagecreatetruecolor($iImageWidth, $iImageHeight); $xFixedPos = (( $xRealMax - $xRealMin ) / ($iImageWidth - 1) ); $yFixedPos = (( $yImaginaryMax - $yImaginaryMin ) / ($iImageHeight - 1) ); $aColours = array(); $aColours['inside'] = imagecolorallocate($rImage, 0, 0, 0); $palette = imagecreatefrompng("palette.png"); for ($i=0; $i<imagesx($palette); $i++) { $rgb = imagecolorat($palette, $i, 0); $aColours[$i] = imagecolorallocate($rImage, ($rgb >> 16) & 0xFF, ($rgb >> 8) & 0xFF, $rgb & 0xFF); } for( $xPos = 0; $xPos <= $iImageWidth; $xPos++ ) { for( $yPos = 0; $yPos <= $iImageHeightHalf; $yPos++ ) { $calculatedXPos = $xRealMin + $xPos * $xFixedPos; $calculatedYPos = $yImaginaryMin + $yPos * $yFixedPos; $iterations = 0; $aComplexComponent = array(0,0); $x2 = 0; $y2 = 0; while( $iterations <= $iMaxIterations && $x2+$y2 <= 4) { $aComplexComponent[1] = 2 * $aComplexComponent[0] * $aComplexComponent[1]; $aComplexComponent[0] = $x2 - $y2; $aComplexComponent[0] = $aComplexComponent[0] + $calculatedXPos; $aComplexComponent[1] = $aComplexComponent[1] + $calculatedYPos; $x2 = $aComplexComponent[0] * $aComplexComponent[0]; $y2 = $aComplexComponent[1] * $aComplexComponent[1]; $iterations++; } if( $iterations == $iMaxIterations ) { imagesetpixel( $rImage, $xPos, $yPos, $aColours['inside']); imagesetpixel( $rImage, $xPos, $iImageHeightHalf - $yPos, $aColours['inside']); } else { imagesetpixel( $rImage, $xPos, $yPos, $aColours[$iterations]); imagesetpixel( $rImage, $xPos, $iImageHeight - $yPos, $aColours[$iterations]); } } } ImagePng( $rImage ); imagedestroy( $rImage );
Bijbehorende kleurenpalet: palette.png
Recent Comments