Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Алгоритм Ву для растеризации отрезка с антиалиасингом

Поиск:
Ранее были рассмотрены алгоритмы Брэзенхема генерации 4-х связной и 8-ми связной разверток отрезка. Общим недостатком этих алгоритмов явлется то, что они рисут отрезки с неровными, резкими краями. Для преодоления этого недостатка Wu Xiaolin создал алгоритм, рисующий "сглаженный" отрезок. Алгоритм Ву является одним из методов антиалиасинга (иногда это слово пишется, как анти-алиасинг).

Предыдущие алгоритмы рисовали отрезки одним цветом, этот алгоритм закрашивает разные участки отрезка в разные цвета, и за счет этого "сглаживает" неровности.

Также следует отметить, что этот алгоритм принимает не целые координаты концов отрезка, а вещественные. При изменении координат отрезок, нарисованный алгоритмом Брэзенхема, перемещается резко, скачками. Отрезок по алгоритму Ву будет перемещаться непрерывно. За счет этого можно обеспечивать плавную анимацию при рисовании движущихся изображений.

user posted image


Для рисования точки с координатами (x, y) вызывается процедура SetPixel, которая закрашивает пиксел с указанными координатами цветом со степенью полупрозрачности, заданной параметром Alpha. Значение параметра, равное 1, соответствует полностью прорисованному непрозрачному пикселю (например, белому, если мы рисуем белым по черному). Значение параметра, равное 0, соответствует полностью прозрачному пикселю (т.е. ничего не рисуется). Промежуточные значения соответствуют различным оттенкам серого, или же, в случае рисования цветных пикселей, определяются по формуле Cresult  = (1-α)·Cscreen  + α·Cpen  (формула применяется поочередно для каждой из трех компонент R, G и B).

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

Основная идея алгоритма - работа с парами пикселей, между центрами которых проходит наш отрезок. Здесь пиксели - это квадраты со стороной 1 и центрами, расположенными в узлах целочисленной решетки. Когда мы говорим "пиксель с координатами (x,y)", мы имеем в виду, что его центр расположен в этой точке.

На рисунках ниже показано, как мы выбираем из множества пикселей пары. В нашем случае прямая лежит ближе к оси OX, чем к OY, поэтому пары состоят из соседних по вертикали элементов. Если бы прямая была ближе к оси OY, то мы бы выбирали пары из соседей по горизонтали.

user posted image


user posted image

Суммарная яркость пары пикселей, соединенных красными линиями (второй рисунок), равна единице. Пропорция, в которой эта яркость распределяется внутри пары, зависит от близости отрезка к центру пикселя.

При всей своей простоте такой метод быстр и позволяет строить очень качественно сглаженные отрезки.







Файлы:
wuline.gif
wuline_1.gif
wuline_2.gif

Просмотров: 5975

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную