Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп_граф.doc
Скачиваний:
22
Добавлен:
07.05.2019
Размер:
729.09 Кб
Скачать

З адание на лабораторную работу № 1 "Генерация векторов"

1. Центр отрезка находится в середине экрана.

1.1. Разложить в растр отрезок по методу цифрового дифференциального анализатора (ЦДА) с произвольными координатами.

1.2. Разложите в растр отрезок, используя алгоритм Брезенхема с произвольными координатами.

2. Используя разные цвета, разложите в растр отрезок на одной системе координат с помощью метода ЦДА и Брезенхема. Сравните полученные результаты. Сделайте выводы.

3. Нарисуйте "настоящий" отрезок и сравните результаты работы алгоритмов.

4. Сравните алгоритмы ЦДА и Брезенхема. Приведите примеры их сходства и различия.

2. Фильтрация. М одифицированный алгоритм Брезенхема

Ц ель: Изучить алгоритмы фильтрации: модифицированный алгоритм Брезенхема и масочную фильтрацию

2 .1. Модифицированный алгоритм Брезенхема

Основная идея алгоритма состоит в том, что для ребер многоугольника устанавливать яркость пиксела пропорционально площади пиксела, попавшей внутрь многоугольника. На рис. 2.1 приведена иллюстрация построения ребра многоугольника с тангенсом угла наклона 11/21.

Рис. 2.1. Устранение ступенчатости ребер многоугольника:

а) генерация ребер без устранения ступенчатости;

б) точное вычисление интенсивности пикселов границы;

в) формирование пикселов границы по модифицированному методу Брезенхема

На рис. 2.1 а) показан результат генерации многоугольника с использованием ранее рассмотренного алгоритма Брезенхема при двухуровневом изображении (пиксел или закрашен или не закрашен). На рис. 2.1 б) показан результат генерации многоугольника с вычислением интенсивности пикселов, через которые проходит ребро многоугольника. Интенсивность вычисляется пропорционально площади части пиксела, попавшей внутрь многоугольника. На рис. 2.1 в) показан результат генерации многоугольника с вычислением интенсивности пиксела, через который проходит ребро многоугольника в соответствии с модифицированным алгоритмом Брезенхема. Суммарная площадь частей для двух пикселов, попавшая внутрь многоугольника, равна (dy + t) / 2, где t – тангенс угла наклона (рис. 2.2). Если теперь в исходном алгоритме Брезенхема заменить отклонение E на E' = E + (1 – t), то 0  E'  1) и значение E' будет давать значение той части площади пиксела, которая находится внутри многоугольника.

Рис. 2.2. Устранение ступенчатости за счет учета площади пикселов, пересекаемых ребром многоугольника

Выполняя преобразование над значением отклонения для первого шага (рис. 2.1), получим, что начальное значение станет равным 1/2.

Максимальное значение отклонения , при превышении которого производится увеличение Y-координаты занесения пикселов, станет равным (1 – t).

Для того чтобы оперировать не дробной частью максимальной интенсивности, а непосредственно ее значениями достаточно домножить на полное число уровней интенсивности I тангенс угла наклона (t), начальное ( ) и максимальное ( ) значения отклонения.

В результате получается следующий алгоритм, пригодный для случая 0 dY dX:

X = x1; Y = y1; Px = x2 – x1; Py = y2 – y1; t = I*Py / Px; E' = I / 2; i = Px; PutPixel(X, Y, t/2); /* Первая точка вектора */ while (i = i – 1 0) { if ( ) { X= X + 1; Y= Y + 1; } else X = X + 1; E' = E' + t; PutPixel(X, Y, E'); /* Очередная точка вектора */ }

Для избавления от вещественной арифметики при манипулировании с можно помножить уже упомянутые величины на 2*Px.