Скачать презентацию Компьютерная геометрия и графика Лекция 4 Алгоритмы вычерчивания Скачать презентацию Компьютерная геометрия и графика Лекция 4 Алгоритмы вычерчивания

Компьютерная геометрия и графика 7 семестр_ 4.pptx

  • Количество слайдов: 39

Компьютерная геометрия и графика Лекция 4 Алгоритмы вычерчивания отрезков и окружностей Компьютерная геометрия и графика Лекция 4 Алгоритмы вычерчивания отрезков и окружностей

План лекции 1. 2. Генерация векторов a) ЦДА (обычный и несимметричный) b) Алгоритм Брезенхема План лекции 1. 2. Генерация векторов a) ЦДА (обычный и несимметричный) b) Алгоритм Брезенхема c) Улучшение качества изображения фильтрацией. Генерация окружностей

Генерация векторов Назначение генератора векторов - соединение двух точек изображения отрезком прямой. Основные алгоритмы: Генерация векторов Назначение генератора векторов - соединение двух точек изображения отрезком прямой. Основные алгоритмы: два алгоритма ЦДА - цифрового дифференциального анализатора (DDA - Digital Differential Analyzer) для генерации векторов обычный и несимметричный; алгоритм Брезенхема для генерации векторов; алгоритм Брезенхема для генерации ребер заполненного многоугольника с уменьшением ступенчатости.

Генерация векторов Общие требования к изображению отрезка: концы отрезка должны находиться в заданных точках; Генерация векторов Общие требования к изображению отрезка: концы отрезка должны находиться в заданных точках; отрезки должны выглядеть прямыми, яркость вдоль отрезка должна быть постоянной и не зависеть от длины и наклона.

Генерация векторов Точность выполнения условий: концы отрезка в общем случае располагаются на пикселах, лишь Генерация векторов Точность выполнения условий: концы отрезка в общем случае располагаются на пикселах, лишь наиболее близких к требуемым позициям; отрезок аппроксимируется набором пикселов и лишь в частных случаях они будут выглядеть прямыми; яркость для различных отрезков и даже вдоль отрезка в общем случае различна, так как, например, расстояние между центрами пикселов различно.

Генерация векторов Растровое представление различных векторов. Генерация векторов Растровое представление различных векторов.

Генерация векторов Простой пошаговый алгоритм позиция = начало шаг = приращение 1 if позиция Генерация векторов Простой пошаговый алгоритм позиция = начало шаг = приращение 1 if позиция - конец < точность then 4 if позиция > конец then 2 if позиция < конец then 3 2 позиция = позиция – шаг go to 1 3 позиция = позиция + шаг go to 1 4 finish

Цифровой дифференциальный анализатор ЦДА формирует дискретную аппроксимацию непрерывного решения дифференциального уравнения d. Y / Цифровой дифференциальный анализатор ЦДА формирует дискретную аппроксимацию непрерывного решения дифференциального уравнения d. Y / d. X = Py / Px , Py = Yk - Yn - приращение координат отрезка по оси Y, Px = Xk - Xn - приращение координат отрезка по оси X.

Цифровой дифференциальный анализатор Решение ДУ (рекурентное соотношение для последовательных значений вдоль нужного отрезка ): Цифровой дифференциальный анализатор Решение ДУ (рекурентное соотношение для последовательных значений вдоль нужного отрезка ): X 0 = Xn; Xi+1 = Xi + Px/N. Y 0 = Yn; Yi+1 = Yi + Py/N. Xn, Yn и Xk, Yk - концы разлагаемого отрезка, Xi, Yi - начальное значение для очередного шага. Большее из приращений Dx или Dy выбирается в качестве единицы растра (лучше смотрятся), количество узлов аппроксимации берется равным числу пикселов вдоль наибольшего приращения.

Цифровой дифференциальный анализатор Недостатки: точки могут прописываться дважды, что увеличивает время построения. нет предпочтительных Цифровой дифференциальный анализатор Недостатки: точки могут прописываться дважды, что увеличивает время построения. нет предпочтительных направлений из-за независимого вычисления обеих координат, поэтому построенные отрезки кажутся не очень красивыми.

Цифровой дифференциальный анализатор Алгоритм обычного ЦДА для генерации отрезка из (x 1, y 1) Цифровой дифференциальный анализатор Алгоритм обычного ЦДА для генерации отрезка из (x 1, y 1) в (x 2, y 2): Integer - функция преобразования вещественного числа в целое. Sign - функция, возвращающая -1, 0, 1 для отрицательного, нулевого и положительного аргумента соответственно

Цифровой дифференциальный анализатор if abs(x 2 -x 1)>= abs(y 2 -y 1) then Длина=abs(x Цифровой дифференциальный анализатор if abs(x 2 -x 1)>= abs(y 2 -y 1) then Длина=abs(x 2 -x 1) Else Длина = abs(y 2 - y 1) end if Dx = (x 2 - x 1) / Длина Dy = (y 2 - y 1) / Длина x = x 1 + 0. 5 * Sign(Dx) y = y 1 + 0. 5 * Sign(Dy)

Цифровой дифференциальный анализатор Основной цикл: i =1 while (i <= Длина) Plot (Integer(x), Integer(y)) Цифровой дифференциальный анализатор Основной цикл: i =1 while (i <= Длина) Plot (Integer(x), Integer(y)) x = x + Dx y = y + Dy i=i+1 end while finish

Цифровой дифференциальный анализатор Алгоритм несимметричного ЦДА для генерации отрезка из (x 1, y 1) Цифровой дифференциальный анализатор Алгоритм несимметричного ЦДА для генерации отрезка из (x 1, y 1) в (x 2, y 2) в первом октанте: Px = x 2 – x 1 Py = y 2 – y 1 Plot (x 1, y 1) while (x 1 < x 2) x 1= x 1 + 1. 0 y 1= y 1 + Py/Px Put. Pixel (x 1, y 1) end while finish

Алгоритм Брезенхема. Алгоритм выбирает оптимальные растровые координаты для представления отрезка. В процессе работы одна Алгоритм Брезенхема. Алгоритм выбирает оптимальные растровые координаты для представления отрезка. В процессе работы одна из координат - либо x, либо y (в зависиимости от углового коэффициента) - изменяется на единицу. Изменение другой координаты (на 0 или 1) зависит от расстояния между действительным положением отрезка и ближайшими координатами сетки. Такое расстояние мы назовем ошибкой. Алгоритм построен так, что требуется проверить лишь знак этой ошибки.

Алгоритм Брезенхема. Если угловой коэффициент <0, 5, то следующая точка (1, 0), иначе - Алгоритм Брезенхема. Если угловой коэффициент <0, 5, то следующая точка (1, 0), иначе - (1, 1).

Алгоритм Брезенхема. Для принятия решения куда заносить очередной пиксел вводится величина отклонения Е точной Алгоритм Брезенхема. Для принятия решения куда заносить очередной пиксел вводится величина отклонения Е точной позиции от середины между двумя возможными растровыми точками в направлении наименьшей относительной координаты. Знак Е используется как критерий для выбора ближайшей растровой точки. Если Е < 0, то точное Y-значение округляется до последнего меньшего целочисленного значения Y, т. е. Y-координата не меняется по сравнению с предыдущей точкой. В противном случае Y увеличивается на 1.

Алгоритм Брезенхема разложения в растр отрезка для первого октанта: x = x 1 y Алгоритм Брезенхема разложения в растр отрезка для первого октанта: x = x 1 y = y 1 Dx = x 2 – x 1 Dy = y 2 - y 1 е = Dy/Dx - ½ for i = 1 to Dx plot (x, y) while ( e => 0 ) y=y+1 e=e-1 end while x = x + 1 e = e + Dy/Dx next i finish

Алгоритм Брезенхема. Выбор постоянно изменяющейся кооординаты зависит от квадранта и модуля углового коэффициента. Алгоритм Брезенхема. Выбор постоянно изменяющейся кооординаты зависит от квадранта и модуля углового коэффициента.

Алгоритм Брезенхема. Обобщенный целочисленный алгоритм Брезенхема квадрантов x = x 1 y = y Алгоритм Брезенхема. Обобщенный целочисленный алгоритм Брезенхема квадрантов x = x 1 y = y 1 Dx = abs(x 2 - x 1) Dy = abs(y 2 - y 1) s 1 = Sign(x 2 - x 1) s 2 = Sign(y 2 - y 1)

Алгоритм Брезенхема. обмен значений Dx и Dy в зависимости от углового коэффициента наклона отрезка Алгоритм Брезенхема. обмен значений Dx и Dy в зависимости от углового коэффициента наклона отрезка if Dy < Dx then Врем = Dx Dx = Dy Dy = Врем Обмен = 1 else Обмен = 0 end if e = 2*Dy - Dx

Алгоритм Брезенхема. for i = 1 to Dx Plot(x, y) while(e =>0) if Обмен Алгоритм Брезенхема. for i = 1 to Dx Plot(x, y) while(e =>0) if Обмен = 1 then x = x + s 1 else y = y + s 2 end if e = e - 2*Dx end while if Обмен = 1 then y = y + s 2 else x = x + s 1 end if e = e + 2*Dy next i finish

Алгоритм Брезенхема. Способы борьбы со ступенчатостью : увеличение пространственного разрешения за счет усовершенствования аппаратуры, Алгоритм Брезенхема. Способы борьбы со ступенчатостью : увеличение пространственного разрешения за счет усовершенствования аппаратуры, трактовка пиксела не как точки, а как площадки конечного размера, яркость которой зависит от размера площади пиксела, занятой изображением отрезка, "размывание" резкой границы, за счет частичной подсветки пикселов, примыкающих к формируемому отрезку.

Генерация векторов. Способы борьбы со ступенчатостью : увеличение пространственного разрешения за счет усовершенствования аппаратуры, Генерация векторов. Способы борьбы со ступенчатостью : увеличение пространственного разрешения за счет усовершенствования аппаратуры, трактовка пиксела не как точки, а как площадки конечного размера, яркость которой зависит от размера площади пиксела, занятой изображением отрезка, "размывание" резкой границы, за счет частичной подсветки пикселов, примыкающих к формируемому отрезку.

Модифицированный алгоритм Брезенхема. Основная идея алгоритма состоит в том, чтобы для ребер многоугольника устанавливать Модифицированный алгоритм Брезенхема. Основная идея алгоритма состоит в том, чтобы для ребер многоугольника устанавливать яркость пиксела пропорционально площади пиксела, попавшей внутрь многоугольника.

Модифицированный алгоритм Брезенхема. Алгоритма Брезенхема при 2 уровневом изображении С вычислением интесивности Модифицированный алгоритм Брезенхема. Алгоритма Брезенхема при 2 уровневом изображении С вычислением интесивности

Модифицированный алгоритм Брезенхема. При построении ребра могут захватываться либо один пиксел, либо два. Если Модифицированный алгоритм Брезенхема. При построении ребра могут захватываться либо один пиксел, либо два. Если один пиксел, то часть его площади внутри многоугольника dy + t/2. Если два пиксела, то часть площади нижнего пиксела внутри многоугольника равна 1 -[((1 dy)^2)/ 2 t], а верхнего - [((dy - 1 + t)^2)/ 2 t]. Суммарная площадь частей dy + t/2. В алгоритме Брезенхема замена E’=E+(1 -t). E' – значение части площади пиксела, которая находится внутри многоугольника.

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

Улучшение качества изображения фильтрацией Методы, основанные на Улучшение качества изображения фильтрацией Методы, основанные на "размывании" границы: Изображение строится с большим пространственным разрешением, чем позволяет дисплей. Усредняющая маска перемещается по изображению с шагами, равными ее размеру. Усреднении изображения без изменения его разрешения. Усредняющая маска перемещается по изображению с единичными шагами.

Улучшение качества изображения фильтрацией Маски для равномерного усреднения изображения Маски для взвешенного усреднения изображения Улучшение качества изображения фильтрацией Маски для равномерного усреднения изображения Маски для взвешенного усреднения изображения

Алгоритм Брезенхема для окружности. Окружность с центром в начале координат описывается уравнением: X^2 + Алгоритм Брезенхема для окружности. Окружность с центром в начале координат описывается уравнением: X^2 + Y^2 = R^2. Алгоритм Брезенхема пошагово генерирует очередные точки окружности, выбирая на каждом шаге для занесения пиксела точку растра Pi(Xi, Yi), ближайшую к истинной окружности, так чтобы ошибка: Ei(Pi) = (Xi^2 + Yi^2) – R^2 была минимальной.

Алгоритм Брезенхема для окружности. Алгоритм Брезенхема для окружности.

Алгоритм Брезенхема для окружности. Алгоритм выбирает пиксел, для которого минимален квадрат расстояния, т. е. Алгоритм Брезенхема для окружности. Алгоритм выбирает пиксел, для которого минимален квадрат расстояния, т. е. минимум из m. H = |(xi + 1)^2 + (yi)^2 –R^2| m. D = |(xi + 1)^2 + (yi -1)^2 –R^2| m. V = |(xi )^2 + (yi -1)^2 –R^2|

Алгоритм Брезенхема для окружности. В окрестности точки (xi, yi, ) возможны только пять типов Алгоритм Брезенхема для окружности. В окрестности точки (xi, yi, ) возможны только пять типов пересечений окружности и сетки растра.

Алгоритм Брезенхема для окружности. Разность между квадратами расстояний до диагонального пиксела (xi+1, уi-1) и Алгоритм Брезенхема для окружности. Разность между квадратами расстояний до диагонального пиксела (xi+1, уi-1) и до точки на окружности: Di = (xi + 1)^2 + (yi -1)^2 –R^2. При Di < 0 диагональная точка (xi+1, уi-1) находится внутри окружности, случаи 1 или 2. Для случая 1 проверим разность квадратов расстояний от окружности до пикселов: d=|(xi+1)^2+(yi )^2–R^2|-|(xi +1)^2+(yi-1)^2–R^2| При d <= 0 выбираем m. H в (xi + 1, уi - 1) ; при d > 0 выбираем m. D в (xi + 1, уi - 1). В случае 2 d<0, поэтому выбираем пиксел (xi+1, уi).

Алгоритм Брезенхема для окружности. Если Di > 0, то диагональная точка (xi+1, уi-1) находится Алгоритм Брезенхема для окружности. Если Di > 0, то диагональная точка (xi+1, уi-1) находится вне окружности, случаи 3 и 4. Для случая 3 разность между квадратами расстояний от окружности до диагонального m. D и вертикального m. V пикселов d’=|(xi+1)^2+(yi-1)^2–R^2|-|(xi)^2+(yi-1)^2–R^2| При d' <= 0 выбираем m. D в (xi+1, уi-1); при d' > 0 выбираем m. V в (xi, уi-1). Если Di = 0, то случай 5. Проверка d и d’ дает d>0 и d’<0, что является условием выбора правильного диагонального шага к (xi +1 , уi -1).

Алгоритм Брезенхема для окружности. Di < 0 d <= 0 выбираем пиксел (xi +1 Алгоритм Брезенхема для окружности. Di < 0 d <= 0 выбираем пиксел (xi +1 , уi ) - m. H d > 0 выбираем пиксел (xi +1 , уi -1) - m. D Di > 0 d' <= 0 выбираем пиксел (xi +1 , уi -1) - m. D d' > 0 выбираем пиксел (xi , уi -1)- m. V Di = 0 выбираем пиксел (xi +1 , уi -1) - m. D

Алгоритм Брезенхема для генерации окружности в первом квадранте. xi = 0 yi = R Алгоритм Брезенхема для генерации окружности в первом квадранте. xi = 0 yi = R Di = 2(1 - R) Предел = 0 1 Plot (xi, yi) if yi <= Предел then 4 if Di < 0 then 2 if Di > 0 then 3 if Di= 0 then 20 2 d = 2 Di + 2 уi - 1 if d <= 0 then 10 if d > 0 then 20

Алгоритм Брезенхема для генерации окружности в первом квадранте. 3 d = 2 Di + Алгоритм Брезенхема для генерации окружности в первом квадранте. 3 d = 2 Di + 2 хi - 1 if d <= 0 then 20 if d > 0 then 30 10 хi = хi + 1 Di = Di+ 2 хi + 1 gо to 1 20 хi = хi + 1 yi = yi + 1 Di = Di+ 2 хi - 2 уi+ 2 gо to 1 4 finish