«Знание — могущество».

22 марта 2009

Рисуем графики функций на PHP

написал Figaroo в рубрике Web-разработка @ 18:54
php grafiki sin exp cos 300x175 Рисуем графики функций на PHP

y = sin(exp(cos(x)))

Пример нестандартного программирования на PHP. Программа на PHP, позволяющая владельцу рисовать графики функций и выводить результат в браузер. Может пригодиться школьникам и студентам, а также изучающим основы графики в PHP.

Исходник под катом.

<?php
/*
Автор - Figaroo
http://blogfigaroo.ru/
*/
// настройки
$x0 = 600; // абсцисса точки начала отсчёта
$y0 = 350; // ордината точки начала отсчёта
$ks = 0.01; // точность рисования (бОльшая точность - меньшая скорость)
$m = 5; // масштаб (1|2.5|5)
function grafiki ($x) { // функция, график которой рисуем
	// $x - значение аргумента функции
	// возвращаемое значение - значение функции от данного аргумента
	// поддерживаются все математические PHP-функции
	return sin(exp(cos($x)));
}
// начало программы
set_time_limit(90);
$m = $m * 10;
// создаём изображение
$img = imagecreate($x0 * 2 + 1, $y0 * 2 + 1);
// настраиваем цвета
$bgColor = ImageColorAllocate($img, 245, 245, 245); // цвет фона
$lnColor = ImageColorAllocate($img, 230, 230, 230); // цвет сетки
$odColor = ImageColorAllocate($img, 0, 0, 0); // цвет осей
$grColor = ImageColorAllocate($img, 0, 0, 255); // цвет графика
// фон
ImageFill($img, 0, 0, $bgColor);
// рисуем координатную сетку
for ($i = 0; $i <= $x0 * 2; $i++) {
	// линии
	ImageLine($img, $i * $m, 0, $i * $m, $y0 * 2, $lnColor);
	ImageLine($img, 0, $i * $m, $x0 * 2, $i * $m, $lnColor);
	// чёрточки
	ImageLine($img, $i * $m, $y0 - 2, $i * $m, $y0 + 2, $odColor);
	ImageLine($img, $x0 - 2,  $i * $m, $x0 + 2, $i * $m, $odColor);
}
// рисуем циферки
for ($i = 0; $i <= $x0 * 2; $i++) {
	if ($i - ($x0 / $m) != 0) imagettftext($img, 6, 270, $i * $m - 1, $y0 + 5, $odColor, "arial.ttf", $i - ($x0 / $m));
	if (- ($i - ($y0 / $m)) != 0) imagettftext($img, 6, 0, $x0 + 5, $i * $m + 2, $odColor, "arial.ttf", - ($i - ($y0 / $m)));
}
// рисуем координатные оси
ImageLine($img, $x0, 0, $x0, $y0 * 2, $odColor);
ImageLine($img, 0, $y0, $x0 * 2, $y0, $odColor);
// рисуем график функции
for ($x = -$x0; $x < $x0; $x += $ks) {
	if (
		/* ФУНКЦИЯ, начало */
			$y = grafiki($x)
		/* ФУНКЦИЯ, конец */
	) {
		if ($x >= 0) $d = 1;
		else $d = 0;
		$qx = $x * $m;
		$y = $y * $m;
		ImageLine($img, $x0 + $d + $qx, $y0 - $y, $x0 + $d + $qx, $y0 - $y, $grColor);
	}
}
// пишем копирайт
imagettftext($img, 11, 0, 9, 20, $odColor, "times.ttf", "Figaroo.Grafiki (www.figaroo.ru)");
imagettftext($img, 11, 0, 9, 40, $odColor, "arial.ttf", "y = sin(exp(cos(x)))");
// выводим изображение в браузер
header("Content-type: image/png");
ImagePng($img);
ImageDestroy($img);
// завершаем программу
exit();
?>

Положите в папку со скриптом шрифты times.ttf и arial.ttf.

Скачать архив с исходником и шрифтами: figaroo-php-grafiki.rar.

Комментарии (3) »

  1. Спасибо за материал,очень долго искала материал по построению мат.функций в PHP!Ваш оказался наиболее читабельным!

    Комментарий by Марина — 9 февраля 2011 @ 17:43


  2. Спавибо, итересно, только вот как вывести график на старницу на которой уже что-то написан? Тоесть если выводить картинку на страницу то виводится только кубики квадратики (текстовый вариант картинки). header("Content-type: image/png"); не помагаэт поскольку на старнице уже выведен текст.

    Комментарий by Poltergeist — 15 июня 2011 @ 18:17


  3. Использовать два скрипта, один вставлять в другой через тэг img.

    Комментарий by Figaroo — 18 июня 2011 @ 12:33


RSS-лента комментариев к этой записи

Оставить комментарий

Пожалуйста, заполните все поля.

© Валерий 'Figaroo' Киркиж, 2008-2012 гг.