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

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 18

Warning: Trying to access array offset on false in /home/u98739/softtime.ru/www/utils/currentforum.php on line 19

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Ответ 002 на задачу N 15

Сообщения:  [1-3] 

 
 автор: Андрюха.   (20.04.2006 в 14:08)   письмо автору
 
   для: cheops   (19.04.2006 в 16:03)
 

Ну конечно 16.
Имеется в виду этот блок?

<?php
for ($i=0;$i<=count($LEGEND1);$i++)
{
$r=rand(0,255);
$g=rand(0,255);
$b=rand(0,255);
// Зададим цвета элементов
$COLORS[$i] = imagecolorallocate($im, $r, $g, $b);
($r<=10)? $r=0: $r-=10;
($g<=10)? $g=0: $g-=10;
($b<=10)? $b=0: $b-=10;
// Зададим цвета теней элементов
$SHADOWS[$i] = imagecolorallocate($im, $r, $g, $b);
}
?>

   
 
 автор: cheops   (19.04.2006 в 16:03)   письмо автору
 
   для: Андрюха.   (18.04.2006 в 12:21)
 

Вероятно имеется ввиду задача N 16. Хм... у меня скрипт выдаёт ошибку
Parse error: syntax error, unexpected ')' in d:\main\test2\index.php on line 178

   
 
 автор: Андрюха.   (18.04.2006 в 12:21)   письмо автору
 
 

Я не рано...

<?php
// $im - идентификатор изображения
// $VALUES - массив со значениями
// $LEGEND - массив с подписями

  function win2uni($s)        //перекодировка
  {
    $s = convert_cyr_string($s,'w','i');
    for ($result='', $i=0; $i<strlen($s); $i++) {
      $charcode = ord($s[$i]);
      $result .= ($charcode>175)?"&#".(1040+($charcode-176)).";":$s[$i];
    }
    return $result;
  }

function Diagramm($im,$VALUES2,$LEGEND2) {
        GLOBAL $COLORS,$SHADOWS,$qw1,$pr;

        $black=ImageColorAllocate($im,0,0,0);

        // Получим размеры изображения
        $W=ImageSX($im);
        $H=ImageSY($im);

        //минимум процентов, если более 15 данных процент выводится автоматом
        $percent=2;
        $percent1=round((100*$qw1)/array_sum($VALUES2),0);
        $percent=($percent1>$percent) ? $percent1 : $percent;

        $qw=0;
        $totall=array_sum($VALUES2);
        $all=count($VALUES2);
        for ($i=0;$i<$all;$i++)
        {
                        if (floor((100*$VALUES2[$i])/$totall)<$percent)
                        {
                                $qw=+$qw1+$VALUES2[$i];
                                unset($VALUES2[$i]);
                                unset($LEGEND2[$i]);
                        }
        }

         //отсутствие товаров менее $percent проценов
        if($qw<>0):
                $VALUES2[]=$qw; //меньше $percent процентов - заккоментировать обе строки, если не надо выводить
                $LEGEND2[]="меньше $percent%";
        endif;
           foreach($VALUES2 as $value) $VALUES[]=$value;
           foreach($LEGEND2 as $value) $LEGEND[]=$value;

        // Вывод легенды #####################################

        // Посчитаем количество пунктов, от этого зависит высота легенды
        $legend_count=count($LEGEND);

        // Посчитаем максимальную длину пункта, от этого зависит ширина легенды
        $max_length=0;
        foreach($LEGEND as $v) if ($max_length<strlen($v)) $max_length=strlen($v);

        // Номер шрифта, котором мы будем выводить легенду

        $FONT=8;
        $font_w=ImageFontWidth($FONT);
        $font_h=ImageFontHeight($FONT);

        // Вывод прямоугольника - границы легенды ----------------------------

        $l_width=($font_w*$max_length)+$font_h+$FONT*13;
        $l_height=$font_h*$legend_count+$FONT*1.5;


        // Получим координаты верхнего левого угла прямоугольника - границы легенды
        $l_x1=$W-$FONT-$l_width;
        $l_y1=($H-$l_height)/2;

        // Вывод прямоугольника - границы легенды
        ImageRectangle($im, $l_x1, $l_y1, $l_x1+$l_width, $l_y1+$l_height, $black);

        // Вывод текст легенды и цветных квадратиков
        $text_x=$l_x1+$FONT*2+$font_h;
        $square_x=$l_x1+$FONT;
        $y=$l_y1+$FONT;

        $i=0;
        $mf = imageloadfont('myfont.phpfont');
        foreach($LEGEND as $v) {
                $dy=$y+($i*$font_h);
                $v1[] = round(((100*$VALUES[$i])/$pr),2);
                (strlen($VALUES[$i])==1)? $space="  " : $space=" ";
                ($v<=$max_length)? $space1="  " : $space1=" ";
                $vs = win2uni($VALUES[$i]);
                $vs1 = win2uni("шт - $v $v1[$i]%");
//                imagettftext($im, $FONT, 0, $text_x, $dy+$FONT, $black, 'arial.ttf', "$vs$space$vs1");  // или этот шрифт
                ImageString($im, $mf, $text_x, $dy, $VALUES[$i]."".$space."шт.-".$v."- ".$v1[$i]."%", $black);
                ImageFilledRectangle($im,
                             $square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1,
                             $COLORS[$i]);
                ImageRectangle($im,
                       $square_x+1,$dy+1,$square_x+$font_h-1,$dy+$font_h-1,
                       $black);
                $i++;
                }
        // Вывод круговой диаграммы #####################################
        $total=array_sum($VALUES);
        $anglesum=$angle=Array(0);
        $i=1;

        // Расчет углов
        while ($i<count($VALUES))
        {
                $part=$VALUES[$i-1]/$total;
                $angle[$i]=floor($part*360);
                $anglesum[$i]=array_sum($angle);
                $i++;
        }
        $anglesum[]=$anglesum[0];

        // Расчет диаметра
        $diametr=$l_x1-20;

        // Расчет координат центра эллипса
        $circle_x=($diametr/2)+10;
        $circle_y=$H/2-10;

        // Поправка диаметра, если эллипс не помещается по высоте
        if ($diametr>($H*2)-20) $diametr=($H*2)-80;

        // Вывод тени
      for ($j;$j>0;$j--)
              for ($i=0;$i<count($anglesum)-1;$i++)
              ImageFilledArc($im,$circle_x,$circle_y+$j, $diametr,$diametr/2,$anglesum[$i],$anglesum[$i+1],$SHADOWS[$i],IMG_ARC_PIE);

              // Вывод круговой диаграммы
         for ($i=0;$i<count($anglesum)-1;$i++)
ImageFilledArc($im,$circle_x,$circle_y, $diametr,$diametr/2, $anglesum[$i],$anglesum[$i+1], $COLORS[$i],IMG_ARC_PIE);
}

// Зададим значение и подписи из файла
//3 вишня,26 груши,12 апельсины,3 персики,8 сливы,5 бананы,2 киви,34 яблоки,8 разное
  ($file =  fopen ("data.dat","r")) or die("Ошибка открытия файла!");
while ($data = fgets ($file, 4096))
  {
  list ($kol, $name) = split(" ", $data);
       $VALUES1[]=$kol;
       $LEGEND1[]=$name;
  }
  fclose ($file);
  arsort($VALUES1);
  foreach($VALUES1 as $index => $val)
  $LEGEND[$index]=$LEGEND1[$index];
  foreach($VALUES1 as $value) $VALUES2[]=$value;
  foreach($LEGEND as $value) $LEGEND2[]=$value;
  $qw1=0;
  $pr = array_sum($VALUES2);
  if (count($VALUES2)>15)
  {
      for ($i=count($VALUES2);$i>14;$i--)
      {
         $qw1=+$VALUES2[$i];
         unset($LEGEND2[$i]);
         unset($VALUES2[$i]);
      }
  }

// Создаем изображения
$im=ImageCreate(500,300);

// Зададим цвет фона
$bgcolor=ImageColorAllocate($im,255,255,200);

for ($i=0;$i<=count($LEGEND1);$i++)
{
$r=rand(0,255);
$g=rand(0,255);
$b=rand(0,255);
// Зададим цвета элементов
$COLORS[$i] = imagecolorallocate($im, $r, $g, $b);
($r<)? $r=0: $r-;
($g<)? $g=0: $g-;
($b<)? $b=0: $b-;
// Зададим цвета теней элементов
$SHADOWS[$i] = imagecolorallocate($im, $r, $g, $b);
}
// Вызов функции рисования диаграммы
Diagramm($im,$VALUES2,$LEGEND2);

// Генерация изображения
ImagePNG($im)
?>

код не мой, но переработанный... В первый ответ и не смотрел. Хотелось себя проверить.

   

Сообщения:  [1-3] 

Форум разработан IT-студией SoftTime