Не текстом единым

Никита Кислицин

Xakep, номер #060, стр. 060-094-4


Пишем софтину

Я долго думал, какую бы написать программу, чтобы наглядно проиллюстрировать описанные выше возможности библиотеки GD. Сразу захотелось написать графопостроитель - программу, которая строила бы определяемые пользователем математические функции. Правда потом подумал, что неблагодарное это дело - возни много, задача тривиальная, а толку - ну решительно никакого :). Хотел также написать очередной скрипт-шутку, печатающий передаваемую GET'ом строку на майке красивой девушки после слов "i love ...", но тоже раздумал. Ну не знаю я ни одного человека, имеющего отношение к компьютерам, который бы на такое повелся - года три назад такое, может, и прокатило бы... В итоге вернулся к графопостроителю, но уже с более осмысленной задачей.

Определимся. У нас есть некоторый массив чисел. Требуется построить ломаную - "график" - соединяющую соответствующие точки в декартовой системе координат. Причем одна координата ("X") является индексом элемента, а другая ("Y") - его значением. Задача довольно проста, но взята не из воздуха - например, графики посещаемости сайтов за некоторый период строятся примерно такой же функцией. Сказано - сделано, так что смотри врезку с кодом, там все подробно прокомментировано. От тебя лишь требуется разобраться в этом коде и использовать его в своих целях.

На этом все. Удаче тебе и оревуар.

Кусок кода PHP

<?

function BiuldGraf($array) {

$graf=ImageCreate(333, 333); /* Создаем изображение */

/* Получаем индекс черного цвета */

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

/* Рисуем ось "X" толщиной 3 пиксела */

ImageLine($graf, 0, 303, 333, 303, $black);

ImageLine($graf, 0, 302, 333, 302, $black);

ImageLine($graf, 0, 301, 333, 301, $black);

/* Рисуем ось "Y" толщиной 3 пиксела */

ImageLine($graf, 30, 0, 30, 333, $black);

ImageLine($graf, 31, 0, 31, 333, $black);

ImageLine($graf, 32, 0, 32, 333, $black);

$sa = sort($array);

$n = round(300/count($array));

for($i=0; $i<count($array); $i++) {

ImageLine($graf, 32+$n*$i, 301, 32+$n*$i, 291, $black);

ImageString($graf, 5, 5+$n*$i, 318, "$i", $black);

$sum += $array[$i];

}

$nn = round(300/$sum);

ImageLine($graf, 32, 333, 42, 333, $black);

for($i=1; $i<count($array); $i++) {

ImageLine($graf, 32, 333-$nn*$sa[$i], 42, 333-$nn*$sa[$i], $black);

ImageString($graf, 5, 20, 333-$nn*$sa[$i], "$sa[$i]", $black);

}

/* Рисуем график */

for($j=0; $j<count($sa)-1; $j++)

ImageLine($graf, 32+$i*$n, $array[$i], 32+($i+1)*$n, $array[$i+1], $black);

}

?>

WWW

GD либа

www.boutell.com/gd/

PHP клуб

www.phpclub.net

Info-ZIP

www.info-zip.org

FreeType

www.freetype.org

CD

На нашем диске ты найдешь последние версии используемых библиотек для различных ОС, а также описание API-функций по работе с графикой в PHP.

Назад на стр. 060-094-3  Содержание