Nickolay.info. PHP. Статьи. Рисуем звёзды на PHP

Рисовать красные (необязательно красные) звёзды - и алгоритмически полезное, и политически правильное упражнение для начинающего программиста на PHP. Небольшой скрипт, опубликованный на этой странице, возвращает картинку в формате GIF, содержащую нужную нам звёздочку, таким образом, скрипт может быть указан в качестве атрибута src тега img:

<img src="http://scripts.kislenko.net/star.php?r=100&back=-1&fill=FF0000">

Этот код нарисует вот что:

Скрипт проверяет наличие библиотеки GDLib, если нужно, пытается загрузить её. Выставляет русскую локаль.

Параметры передаются только через URL, то есть, методом GET. При вызове без параметров выдаются информация о скрипте и ссылки.

Список параметров скрипта следующий:

Большинство ограничений на параметры достаточно произвольны, при желании их можно поменять.

Всю основную работу по рисованию контура звезды выполняет функция draw_lines, её параметр $img обозначает ресурс рисунка, созданный стандартной функцией imagecreatetruecolor, параметры $w и $h - высота и ширина рисунка в пикселах, остальные параметры обозначены так же, как в списке выше. Соответственно, код этой функции можно считать алгоритмом рисования звезды с произвольным количеством лучей.

function draw_lines ($img,$n,$w,$h,$r,$k,$lines) { //Процесс отрисовки
 $a0 = 90/$n; //Начальный угол
 $da = 2 * $a0; //Шаг по углу
 $a = $a0; //Переменная для измерения угла
 $x0 = $w/2; $y0 = $h/2; //Центр отрисовки = центр рисунка
 $x = $x0 + round($r*cos($a*pi()/180));
 $y = $y0 - round($r*sin($a*pi()/180));
 for ($i=1; $i<$n+1; $i++) {
  $a+=$da;
  $x2=$x0+round($r*$k*cos($a*pi()/180));
  $y2=$y0-round($r*$k*sin($a*pi()/180));
  imageline ($img, $x, $y, $x2, $y2, $lines);
  $a+=$da;
  if ($a>360) $a=$a0;
  $x=$x2; $y=$y2;
  $x2=$x0+round($r*cos($a*pi()/180));
  $y2=$y0-round($r*sin($a*pi()/180));
  imageline ($img, $x, $y, $x2, $y2, $lines);
  $x=$x2; $y=$y2;
 }
}

 Скачать скрипт Star ("Звездец") в архиве ZIP (2 Кб)

 Скрипт в работе

Ещё примеры вызова скрипта:

 32-лучевое "солнышко в небе"

 Самая маленькая "звездочка"

 И самая большая (по ссылке создастся большая картинка!)

 А при построении вот этой звездени использовано отношение золотого сечения

 Но не между радиусами окружностей, между радиусами будет страшнее

Рейтинг@Mail.ru

вверх гостевая; E-mail