Ohjelma tekee kivan pascalin kolmion kopioimalla edellistä palaa kahteen kertaan aina yhtä kierrosta kohti. Tämän voisi laskea myös esim. käyttäen kahta boolean taulukkoa, mutta tein vaihteeksi tällaisen toteutuksen :)
Ei ole välttämättä kovin tehokas ratkaisu, mutta tulipahan tehtyä. Tuossa taitaa ilmentyä vielä yhden pikselin klappi, joka tulee ilmi, jos alkuneliöön piirtää sisäerunaan jotkut erottuvat borderit.
Jos $res on liian pieni, niin kuvaan tulee outoja mustia kuvioita, ilmeisesti sen takia, että yritetään kopioida pikseleitä kuvan ulkopuolelta.
http://msdos464.no-ip.com/php/gdlib/pkolm.php tuolla voi tarkastella.
<?php /* Tekee hienon pascalin kolmion, jossa parittomat luvut on varjostettu. Lienee myös eräänlainen fraktaali kuvio. */ $res = 1300; // kuvan sivun pituus $sivu = 10; // yhden ruudun sivun pituus $kierrokset = 7; // montako kertaa toistetaan $topmargin = ($res - pow(2, $kierrokset)*$sivu) / 2; // laitetaan kuva keskelle myös pystysuunnassa $im = @imagecreatetruecolor($res, $res) or die("Cannot Initialize new GD image stream"); // luodaan kuva imagefill($im, 0, 0, imagecolorallocate($im, 255, 255, 200)); // peitetään taustavärillä imagefilledrectangle($im, ($res - $sivu) / 2, $topmargin, ($res + $sivu) / 2, $sivu + $topmargin, imagecolorallocate($im, 0, 0, 0)); // tehdään alkuneliö $max = pow(2, $kierrokset); // lyhentää vähän koodia, kun erillistä looppimuuttujaa ei tarvita for ($p = 1; $p < $max; $p *= 2) // looppi, joka kopioi kuvaa itsensä päälle { imagecopy($im, $im, $res/2 - $p*$sivu, $p*$sivu + $topmargin, $res/2 - $p*$sivu/2, $topmargin, $p*$sivu, $p*$sivu); // vasen puoli imagecopy($im, $im, $res/2, $p*$sivu + $topmargin, $res/2 - $p*$sivu/2, $topmargin, $p*$sivu, $p*$sivu); // oikea puoli } header ("Content-type: image/png"); // png tulossa imagepng($im); // kuva ulos imagedestroy($im); // vapautetaan varmuuden vuoksi muistista ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.