|
Pers.narod.ru. PHP. Статьи. Рисуем звёзды на PHP |
Рисовать красные (необязательно красные) звёзды - и алгоритмически полезное, и политически правильное упражнение для начинающего программиста на PHP.
Небольшой скрипт, опубликованный на этой странице,
возвращает картинку в формате GIF, содержащую нужную нам звёздочку, таким образом, скрипт может быть указан в качестве
атрибута src тега img:
<img src="http://scripts.kislenko.net/star.php?r=100&back=-1&fill=FF0000">
Этот код нарисует вот что:
Скрипт проверяет наличие библиотеки GDLib, если нужно, пытается загрузить её. Выставляет русскую локаль.
Параметры передаются только через URL, то есть, методом GET. При вызове без параметров выдаются информация о скрипте и ссылки.
Список параметров скрипта следующий:
n - количество лучей звезды, ограничения от 3 до 36, по умолчанию 5
r - радиус окружности, в которую вписана звезда, ограничения от 10 до 1000, по умолчанию 100. Ширина и высота рисунка, содержащего звезду, будут 2*r+4, 4 пискела по краям добавляются, чтоб компенсировать неизбежные ошибки счёта с вещественными числами
k - коэффициент, влияющий на длину лучей звезды, вещественное число из диапазона ]0,1[ (не включая границы), по умолчанию k=0.5. Чем ближе значение k к 1, тем короче лучи по отношению к радиусу вписанной в звезду окружности. При близости k к 1 звезда может превратиться в многоугольник или рисунок "солнышка"
back - цвет фона рисунка, должен быть передан в виде RRGGBB, где RR, GG, BB - 16-ричные Интенсивности красного, зелёного и синего от 00 до FF (от 0 до 255 десятичного) включительно, то есть, используется типовая система записи цвета. Если передано любое значение back меньше 0, фон будет прозрачным. По умолчанию белый
lines - цвет контура звезды, также в виде RRGGBB, если передано число меньше 0, линии обрамления не рисуются, по умолчанию чёрный
fill - цвет заливки звезды в виде RRGGBB, если передано число меньше 0, заливки нет, также её нет по умолчанию. Получается, передав back=lines=fill=-1, можно вообще ничего не рисовать :)
debug - если параметр включён, видны вписанная и описанная окружности, нарисованные цветом lines
angle - если передан целым числом, задаст угол поворота рисунка. Это будет работать только на хостинге, где PHP скомпилирован со встроенной библиотекой GD. У меня эта возможность отключена, так что вращение картинок не работаетБольшинство ограничений на параметры достаточно произвольны, при желании их можно поменять.
Всю основную работу по рисованию контура звезды выполняет функция 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 Кб)
Ещё примеры вызова скрипта:
И самая большая (по ссылке создастся большая картинка!)
А при построении вот этой звездени использовано отношение золотого сечения
Но не между радиусами окружностей, между радиусами будет страшнее
|
|