Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Как рисовать графики ?


Автор: Icaros 2.6.2006, 13:25
Есть некое уравнение y=f(x). Решив его мы получим массив точек (x, y). Как нарисовать такой график с помощью PHP ? Функция ImageLine() не годится, т.к. график получается ломаный, а нужен сглаженный как в Excel'е. 
Есть ли готовые классы или решения данной проблемы ? jpgraph не поддерживает рисование подобных графиков (вроде...)  smile  

Автор: skyboy 2.6.2006, 14:59
Icaros, напиши класс, аппроксимирующий данные... скажем, кубическими сплайнами...Круто будет  smile  

Автор: Mal Hack 2.6.2006, 23:40
Цитата(Icaros @  2.6.2006,  13:25 Найти цитируемый пост)
т.к. график получается ломаный

Ты графики в консоли в Паскале или на Си или в Делфе на канве рисовал?
Надо интервал брать меньше и делать промежуточные вычисления. 

Автор: BobiKK 3.6.2006, 00:16
Может быть по сабжу: http://phpclub.ru/detail/article/dynamic_image 

Автор: skyboy 3.6.2006, 10:08
Касательно сглаживания и "красивых" графиков:
http://alglib.sources.ru/interpolation/spline3.php 

Автор: Mal Hack 3.6.2006, 14:02
skyboy, интерполяция тут нафиг не нужна. Строить надо просто дифференцированно. 

Автор: skyboy 3.6.2006, 14:18
Mal Hack, зависит от того, что у него "на руках" - функция или только точки. Из "Есть некое уравнение y=f(x). Решив его мы получим массив точек (x, y)" неясно(мне, по крайней мере), что же вопрошающий имеет - только набор точек или всё же может запрограммировать функцию. Впрочем, скорее всего, я просто сам придумываю трудности smile 

Автор: Icaros 3.6.2006, 18:13
Есть ограниченное число точек (например 10). К сожалению я не могу увеличить число точек, т.к. это вызовет рост времени выполнения скрипта. Скрипт и так долго вычисляет эти 10 значений.  

Автор: skyboy 3.6.2006, 21:48
Icaros, что за функция? там параметры ограничены? может, стОит рассчитать разово и хранить результаты рассчёта в базе? Что за функция? 

Автор: Mal Hack 3.6.2006, 23:47
Если только точки, то надо все равно остальные добирать через интерполяцию.

Icaros, как говорит препод в универе, при уменьшении кол-ва итерационных прохождений, мы теряем характер функции (графика). 

Автор: Icaros 8.6.2006, 13:56
Вот что получилось после использования метода интерполяции (см. рисунок). Довольно сильно округлено, особенно переход через нуль. Красные точки - заданные значения, синяя кривая - кривая после сглаживания.     

Автор: skyboy 8.6.2006, 14:47
Icaros, какой метод использовал? Кста, это аппроксимация - при интерполяции график проходит через все заданные точки. 

Автор: Icaros 8.6.2006, 15:12
Использовал "Геометрическое сглаживание В-сплайнами", а посоветованный уважаемым skyboy метод "Интерполяция функции кубическими сплайнами" я не понял. 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)