- •Компьютерная графика
- •Направления компьютерной графики
- •Приложения компьютерной графики
- •2. Геометрическое моделирование и решаемые ими задачи
- •Элементы моделей
- •Методы построения моделей
- •Типы моделей
- •Полигональные сетки
- •3. Графические объекты, примитивы и их атрибуты
- •4. Представление видеоинформации и ее машинная генерация.
- •Обработка видеоинформации
- •5. Графические языки, метафайлы.
- •Архитектура графических терминалов и графических рабочих станций.
- •7. Реализация аппаратных модулей графической системы. Разрешающая способность устройств
- •Графические адаптеры и акселераторы История
- •Устройство современной графической платы
- •Устройства визуального отображения
- •Основные технические характеристики мониторов
- •Стандарты на мониторы
- •Некоторые разработки ведущих фирм
- •Печатающие устройства Технология печати
- •Технические характеристики
- •Типы принтеров
- •Сканеры Аппаратное обеспечение
- •Программное обеспечение
- •8. Базовые растровые алгоритмы компьютерной графики
- •Генерация векторов
- •Цифровой дифференциальный анализатор
- •Алгоритм Брезенхема
- •Улучшение качества аппроксимации векторов
- •Модифицированный алгоритм Брезенхема
- •Улучшение качества изображения фильтрацией
- •Генерация окружности
- •Алгоритм Брезенхема
- •9. Методы и алгоритмы пространственной графики
- •Современные стандарты компьютерной графики.
- •11. Графические диалоговые системы. (Классификация графических систем 2d и 3d. Компас, AutoCad, SolidWorks, bCad и др.)
- •1.2. Краткий обзор зарубежных cad-систем
- •Технологические модули в pt/Products. Интеграция процессов проектирования и изготовления.
- •Работа со стандартными библиотеками посредством pt/LibraryAccess и pt/Library
- •12. Применение интерактивных графических систем
- •394026 Воронеж, Московский проспект, 14
Улучшение качества аппроксимации векторов
Выше было отмечено, что растровая генерация отрезков имеет следующие недостатки:
неточное расположение начала и конца,
ступенчатый вид отрезка,
яркость зависит от наклона и длины.
Ясно, что первый недостаток не может быть устранен программным путем. Неравномерность яркости обычно не слишком заметна и может быть скомпенсирована очевидным образом, требующим, в общем случае, вещественной арифметики, но в связи с реально небольшим количеством различимых уровней яркости достаточно обойтись целочисленным приближением, причем очень грубым.
Наиболее заметно ухудшает качество изображения ступенчатость. Имеется следующие способы борьбы со ступенчатостью :
увеличение пространственного разрешения за счет усовершенствования аппаратуры,
трактовка пиксела не как точки, а как площадки конечного размера, яркость которой зависит от размера площади пиксела, занятой изображением отрезка,
"размывание" резкой границы, за счет частичной подсветки пикселов, примыкающих к формируемому отрезку. Понятно, что при этом ухудшается пространственное разрешение изображения.
В данном пункте мы рассмотрим модифицированный алгоритм Брезенхема, трактующий пиксел как конечную площадку. В следующем пункте будет рассмотрен общий подход, использующий низкочастотную фильтрацию для "размывания" границ изображения.
Модифицированный алгоритм Брезенхема
Основная идея алгоритма состоит в том, чтобы для ребер многоугольника устанавливать яркость пиксела пропорционально площади пиксела, попавшей внутрь многоугольника.
При построении ребра многоугольника с тангенсом угла наклона t (0 t 1) могут захватываться либо один пиксел (пикселы (0,0), (2,1), (4,2), (6,8)) либо два пиксела (пикселы (1,0) и (1,1), (3,1) и (3,2), (5,2) и (5,3)). Если захватывается один пиксел, то часть его площади, попавшая внутрь многоугольника, равна dy + t/2 (рис. a).
Если же захватывается два пиксела, то часть площади нижнего пиксела, попавшая внутрь многоугольника равна 1 - [((1 - dy)2)/ 2t], а верхнего - [((dy - 1 + 2)2)/ 2t]. Суммарная площадь частей для двух пикселов, попавшая внутрь многоугольника, равна dy + t/2.
Если теперь в исходном алгоритме Брезенхема заменить отклонение E на E' = E + (1-t), то 0 E' 1) и значение E' будет давать значение той части площади пиксела, которая находится внутри многоугольника.
Выполняя преобразование над значением отклонения для первого шага получим, что начальное значение станет равным 1/2. Максимальное значение отклонения E'max, при превышении которого производится увеличение Y-координаты занесения пикселов, станет равным (1 - t).
Для того, чтобы оперировать не дробной частью максимальной интенсивности, а непосредственно ее значениями достаточно домножить на полное число уровней интенсивности I тангенс угла наклона (t), начальное (E') и максимальное (E'max) значения отклонения.
В результате получается следующий алгоритм, пригодный для случая 0 dY dX:
X= x1;
Y= y1;
Px= x2 - x1;
Py= y2 - y1;
t= IPy / Px;
E'= I/2;
E'max= I - IPy / Px;
i= Px;
PutPixel(X, Y, t/2); /* Первая точка вектора */
while (i = i - 1 0) {
if (E' E'max) {
X= X + 1;
Y= Y + 1;
E' = E'- E'max;
} else
X= X + 1;
E' = E'+ t;
PutPixel(X, Y, E'); /* Очередная точка вектора */}
Для избавления от вещественной арифметики при манипулировании с E' можно домножить уже упомянутые величины на 2Px. Но в этом случае при занесении пикселов потребуется деление E' на 2Px.
В Приложении 2 приведена процедура V_BreM, реализующая модифицированный алгоритм Брезенхема для генерации ребра заполненного многоугольника и пригодная для любого октанта.