Задать вопрос
@idg_dima

Помогите найти алгоритм растеризации эллипса

Никак не могу найти понятного объяснения алгоритма растеризации закрашенного эллипса, желательно с антиаллиазингом. Единственная статья на эту тему, которую я нашел, была крайне трудна для меня в математическом плане и там было только про круг, у эллипса было написано что-то типа «делается на подобии круга, поэтому оставим вывод алгоритма читателям в качестве задания».
На одном сайте видел упоминание алгоритма Ву, мол он самый крутой и быстрый для этих целей, но само описание алгоритма найти не удалось. В википедии только алгоритм Ву для линии имеется.
  • Вопрос задан
  • 4778 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@idg_dima Автор вопроса
Удалось!

Основную часть кода Алгоритма Ву я нашел тут: create.stephan-brumme.com/antialiased-circle/
Заполнение однородным цветом пришлось делать самому. Особенно долго я бился над полупрозрачностью — некоторые пиксели при закраске обрабатывались 2 раза, из-за чего они становились менее прозрачными. Но в итоге удалось сделать с одним прохождением по каждому пикселю!

Как это выглядит
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Suvitruf
@Suvitruf
Java/node.js/game-dev
Что-то подобное когда-то видел на alglib.sources.ru, но почему-то сейчас нету.

Но, если покопаться в архиве, то:
Алгоритм Ву для растеризации круга с антиалиасингом
Алгоритм Ву для растеризации эллипса с антиалиасингом

Оно?
Ответ написан
turboNOMAD
@turboNOMAD
Нарисовать эллипс очень просто.
Идем построчно, для каждой строки Х известен, решаем уравнение эллипса относительно Y.
Получится два корня, это левая и правая граница закрашиваемой линии на строке Х.

Только нужно помнить, что эти координаты (X, Y) рассчитаны, принимая за начало координат центр эллипса.
Т.е. прежде чем рисовать линию, прибавляем к ним (X0, Y0) — центр эллипса.
Ответ написан
lesobrod
@lesobrod
Если предполагается градиентная растеризация, то есть простор для творчества.
Ведь можно вести градиент от центра к контуру (простейший случай),
можно от отрезка, соединяющего фокусы.
А можно от фокусов по отдельности. Это будет очень красиво, но наверное сложно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы