PHP bug - imageellipse(); a velké poloměry
Po delší době jsem opět narazil na něco, co by stálo za zveřejnění. Při programování grafu ulovených mafiánů, přesněji jeho úpravy pro tisk na A3 za účelem použití na sraze po skončení společensky nespolečenské hry Mafie jsem objevil podivné chování PHP v krajních situacích...
Problém jsem odhalil ve své verzi PHP - PHP Version 5.0.3 s grafickými knihovnami - GD Version: bundled (2.0.28 compatible). A o co tedy jde? Funkce imageellipse();, která se používá i na kreslení kružnic se začíná chovat podivně, když po ní žádáte kružnici větší než zhruba 2060 pixelů (průměr), tak jakoby na všech "pólech" (i západní a východní) krůžnici zkresluje. Jak, to je vidět z obrázku. Proč k tomu dojde zrovna při uvedeném průměru, netuším - patrně to bude způsobené ztrátou přesnosti funkcí sin/cos pro hodně malé úhly. Zajímavý je rozdíl nepravidelností mezi severním/jižním (jsou symetricky shodné) pólem a západním/východním (opět shodné).
A použitý testovací script:
header("Content-type:
image/png");
$w=$h=2400;
$im = imagecreate($w,$h);
$white = imagecolorallocate($im, 255, 255, 255);
$orange =
imagecolorallocate($im, 255, 210, 60);
$red = imagecolorallocate($im, 255,0,0);
$green = imagecolorallocate($im, 0,255,0);
$black = imagecolorallocate($im, 0,0,0);
for ($i=2400; $i>1800; $i-=20) {
switch ($i) {
case 2020:
$col
= $red;
break;
case 2040:
$col
= $red;
break;
case 2060:
$col
= $green;
break;
case 2080:
$col
= $black;
break;
default:
$col
= $orange;
break;
}
imageellipse($im, $w/2, $h/2, $i, $i, $col);
}
imagepng($im);
imagedestroy($im);
?>
Gimli2 | Vyšlo: 26. 6. 2006 - 12:07:15 | Zobrazení: 3541
Články podobné
- Hromadný převod obrázků do PDF a sloučení do jednoho souboru v linuxu (19. 1. 2010)
- užitečné příkazy a poznámky pro práci s RAID polem (22. 7. 2009)
- MySQL a číselné řady (21. 9. 2007)
- Překlad programu A-note (30. 11. 2005)
- České fonty pro FPDF knihovnu pro PHP již bez problému (15. 9. 2005)
- PHP klient pro odběr počasí z měřící stanice na http://pocasi.barak.cz (18. 6. 2005)
- Závod matematických funkcí a operací na 1 000 000 kol (29. 1. 2005)
Podobnost je určována triviální cestou shody některého ze slov z nadpisu článku. Jsem zvědavej, co to tu bude nabízet za asociace ;-)