| Файл paintcik.php берёт из файла test.dat координаты вершин многоугольника и рисует на странице эти многоугольники:
<?
$items_arr=file('test.dat');
foreach($items_arr as $row)
{
$row=stripslashes(trim($row));
$row=explode('|',$row);
$str_coords=$row[1];
$arr_coords=array();
$arr_coords=explode(',',$str_coords);
//вычислить размеры рисунка
$arrcoords_x=array();
$xi=-1;
$arrcoords_y=array();
$yi=-1;
//Вытаскиваем иксовые координаты
for($i=0;$i<count($arr_coords);$i=$i+2){$xi++;$arrcoords_x[$xi]=$arr_coords[$i]*1;}
//Находим минимальную и максимальную иксовую координату
$x_min=min($arrcoords_x)*1;$x_max=max($arrcoords_x)*1;
$width=$x_max-$x_min;
//Вытаскиваем игрековые координаты
for($i=1;$i<count($arr_coords);$i=$i+2){$yi++;$arrcoords_y[$yi]=$arr_coords[$i]*1;}
//Находим минимальную и максимальную игрековую координату
$y_max=max($arrcoords_y)*1;
$y_min=min($arrcoords_y)*1;
$height=$y_max-$y_min;
//пересчитываем иксовые координаты под палитру
for($i=0;$i<count($arrcoords_x);$i++)
{$arrcoords_x_new[$i]=$arrcoords_x[$i]-$x_min; }
//пересчитываем игрековые координаты под палитру
for($i=0;$i<count($arrcoords_y);$i++)
{$arrcoords_y_new[$i]=$arrcoords_y[$i]-$y_min;}
//формируем новый массив координат под палитру
$arrcoords_new = getnewcoords($arrcoords_x_new,$arrcoords_y_new);
$angqvt=getangqvt($arrcoords_new);//получаем кол-во вершин многоугольника
$type='.png';
$name=$row[0].$type;
$src=$reg.'_png/'.$name;
$y_min=$y_min+$top;
createimage($width,$height,$arrcoords_new,$angqvt,$src);
// создаём рисунок
echo "<img src=$src style=position:absolute;left:$x_min;top:$y_min;opacity:.50 />";
}
function getnewcoords($arrcoords_x_new,$arrcoords_y_new)
{
foreach ($arrcoords_x_new as $key => $val)
{
$arrcoords_new[] = $val;
$arrcoords_new[] = $arrcoords_y_new[$key]*1;
}
return $arrcoords_new;
}
function getangqvt($arrcoords_new)
{
return count($arrcoords_new)/2;
}
function createimage($width,$height,$arrcoords_new,$angqvt,$name)
{
$img = imagecreatetruecolor($width,$height);
$white=imagecolorallocate($img, 255, 255, 255);
imagefill($img,0,0,$white);
$color = imagecolorallocate($img, 0, 0, 255);
imageColorTransparent($img,$white);
imagefilledpolygon($img,$arrcoords_new,$angqvt,$color);
if(file_exists("$name.png"))unlink("$name.png");
imagepng($img,$name);
imagedestroy($img);
}
?>
|
Но вот что совсем непонятно: если в файле test.dat строки записаны в такой очередности:
a|373,514, 362,502, 362,488, 370,476, 371,463,
357,469, 355,462, 336,447, 318,451, 314,461, 312,483,
320,502, 319,519, 322,540, 333,557, 331,567, 336,582,
360,591, 370,590, 349,575, 348,563, 353,557, 344,550,
353,537, 343,529, 356,529, 350,519, 364,519, 373,514
b|308,400, 321,394, 322,403, 340,413, 349,427, 352,438,
341,436, 336,447, 323,448, 321,452, 311,443, 311,432,
308,419, 308,400
|
,то рисунок b.png искажается, а если наоборот:
b|308,400, 321,394, 322,403, 340,413, 349,427,
352,438, 341,436, 336,447, 323,448, 321,452, 311,443,
311,432, 308,419, 308,400
a|373,514, 362,502, 362,488, 370,476, 371,463, 357,469,
355,462, 336,447, 318,451, 314,461, 312,483, 320,502,
319,519, 322,540, 333,557, 331,567, 336,582, 360,591,
370,590, 349,575, 348,563, 353,557, 344,550, 353,537,
343,529, 356,529, 350,519, 364,519, 373,514
|
,то b.png не искажается.
Как такое может быть??? | |