войти зарегистрироваться

PHPИнтерполяция: рисуем гладкие графики средствами PHP и GD

Распространенной задачей для программиста является рисование графиков. Входными данными является массив точек (xi;yi). Как правило, мы знаем только некоторые значения — в определенных точках графика. Чтобы построить непрерывный график кривой необходимо прибегнуть к интерполяции или аппроксимации.



Интерполяция — построение кривой, проходящей через заданные точки.
Аппроксимация — приближение кривой к исходной, но не обязательно проходящей через заданные точки.

В этом топике я хочу продемонстрировать свою библиотеку для PHP, которая производит интерполяцию с помощью многочлена Лагранжа, C-сплайна и сплайна Акимы, а также аппроксимацию кривой Безье. Дополнительно в ней реализована отрисовка отрезка со сглаживанием (антиалиасингом).

Кратко рассмотрим методы интерполяция и аппроксимации.

Разработка под Apple iOSOpenGL. Антиалиасинг на устройствах его не поддерживающих

Делая новую игру под iPad и впервые запустив ее на устройстве, был очень неприятно удивлен.
Оказалось, что iPad/iPhone не поддерживают антиалиасинг линий рисуемых программно. Быстрый поиск в гугле только подтвердил опасения – действительно антиалиасинга нет. Что странно, симулятор iOS наглым образом обманывает наивных разработчиков, демонстрируя сглаживание линий во всей красе.


Ребята из 2DBoy — создатели World of Goo гениальны во всем кроме антиалиасинга

Учитывая, что игра довольно специфическая и около 50% видимой картинки рисуется линиями и заливками проблема была критической. Выбор был простой:
me.tryToImplementAntialiasing();
If( !antialisingImplementedManualy )
{
me.forgetAboutGameDev();
me.goAndKillYourself();
}
else
{
me.postOnHabrAboutManualAA();
me.finishTheGame();
}

Для непрограммистов поясню — “Make Antialising or die trying”.
НЛО прилетело и опубликовало эту надпись здесь.

Haiku OSПохоже, в Haiku будет лучший антиалиасинг

Благодаря Google Summer of Code, Андрей Шпильман, словацкий студент, в настоящее время занимается реализацией субпиксельного сглаживания для Haiku OS и добился значительных успехов.

Технология субпиксельного сглаживания основана на том факте, что RGB пиксели на мониторе не совпадают геометрически, то есть составляющие три базовых цвета каждой точки расположены немного в разных местах. Используя это, можно добиться в три раза большего разрешения, в результате графика будет выглядеть более гладкой и приятной для глаз, однако это будет сделано ценой появления цветовых артефактов, которые могут быть очень заметными. Например, в запатентованной технологии Microsoft ClearType, используемой в Windows, у вертикальных чёрных линий образуется розовый ореол слева и синий справа, кроме того сами линии получаются размытыми. Андрей придумал, как избежать этого, в результате чего текст выглядит более чётким и читаемым.