Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Странный глюк при рисовании в цикле.
 
 автор: coloboc66   (17.04.2008 в 14:46)   письмо автору
 
 

Файл 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($img255255255);
imagefill($img,0,0,$white);    
$color imagecolorallocate($img00255); 
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 не искажается.
Как такое может быть???

   
 
 автор: coloboc66   (19.04.2008 в 23:37)   письмо автору
 
   для: coloboc66   (17.04.2008 в 14:46)
 

Неужели никто здесь не сможет с этим разобраться?! Ставлю пиво тому, кто разберётся, в чём дело. Деньги переведу по почте.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования