|
|
|
| Так как никаких ответов никто не прислал, все лавры забираю себе :))) и публикую свой вариант решения задачи
<?php
// Файл данных
$filename = "data.txt";
// Высота изображения
$height = 300;
// Ширина изображения
$width = 500;
// Жирность точки
$point = 3;
if (!is_file($filename)) exit("Отсутсвует файл данных");
// Читаем содержимое файла
$arr = file($filename);
foreach($arr as $line)
{
$num = preg_split("|[\s]+|",$line);
$graph[$num[0]] = $num[1];
}
// Вычисляем минимальное и максимальное значения
// по оси ординат
$height_min = min($graph);
$height_max = max($graph);
// Вычисляем минимальное и максимальное значения
// по оси абсцисс
$width_key = array_keys($graph);
$width_min = min($width_key);
$width_max = max($width_key);
// Рисуем диаграмму
$img = imagecreatetruecolor($width + 10,$height + 10);
if (!$img) exit("Не удалось создать изображение");
// Формируем цвета
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
// Фон делаем белым
imagefill($img, 1, 1, $white);
// Выводим график
foreach($graph as $x => $y)
{
// Вычисляем положение точки на графике
$image_x = (int)($width*($x - $width_min)/($width_max - $width_min)) + 5;
$image_y = (int)($height*($height_max - $y)/($height_max - $height_min)) + 5;
// Рисуем точку
imagerectangle($img,
$image_x - $point,
$image_y - $point,
$image_x + $point,
$image_y + $point,
$black);
}
// Отправляем изображение в окно браузера
header ("Content-type: image/jpeg");
imagejpeg($img);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.05.2006 в 11:24)
| |
$graph[$num[0]] = $num[1];
|
подразумевает функциональную зависимость. Все повторяющиеся иксы здесь будут перекрыты последним.
А меж тем автор задачи сделал акцент на том, что обрабатываться должна не функция, а отношение общего случая.
.... НО это не график (2, 3, 4, 5...), а диаграмма, т.е. значения по горизонтальной оси могут повторяться сколько угодно раз, а по вертикальной быть разными и наоборот (это одна из тонкостей, на которые надо было обратить внимание). | |
|
|
|