- •Виды представления изображения на плоскости
- •Что есть растр, пиксел и растровое изображение; связность.
- •Примитивы растровой графики и их представление на экране. Алгоритмы растровой графики
- •Разложение в растр отрезков прямых.
- •Разложение на основе параметрического уравнения прямой
- •Алгоритм Брезенхема отрисовки отрезка. Слайд 12.
- •Отрисовка окружности
- •5.1. Алгоритм Брезенхема для окружности.
- •Типы пространств и системы координат их.
- •Алгоритмы отсечения
- •7.1. Постановка задачи. Решение «в лоб»
- •Побитовые бинарные операции.
- •1 Побитовые логические операции
- •2 Битовые сдвиги
- •3 В языках программирования
- •4 Связь с другими науками
- •5 Практические применения
- •Алгоритм Коэна – Сазерленда
- •Тема: Матрицы и операции над ними
- •Основные определения
- •Транспонирование матриц
- •Обратная матрица
- •Формат 32-битного целого числа со знаком
- •Список операторов
- •Разбор операторов
- •Операторы битового сдвига
- •Применение побитовых операторов
Алгоритм Брезенхема отрисовки отрезка. Слайд 12.
Недостатки алгоритма ДДА устранены в алгоритме Брезенхема. В алгоритме используют только целые числа и операции сложения, вычитания и сдвига.
Суть алгоритма: выбор наилучшей растровой координаты для представления отрезка. Одна из координат x или y (в зависимости от величины углового коэффициента k) на каждом шаге увеличивается на единицу (1). Изменение другой координаты равно либо 0, либо 1 и зависит от расстояния между действительным положением точки отрезка и ближайшими координатами сетки. Это расстояние называют ошибкой. Выбор пиксела определяется по знаку разности ошибок.
Будем считать: 0 ≤ k = = ≤ 1, т. е. наклон отрезка к оси x ≤ 45°. Отрезок задан начальной точкой x1, y1 и конечной x2, y2.
Преобразуем параллельным переносом положение отрезка так, чтобы начало отрезка совпало с началом координат, слайд 13.
Тогда начальной точкой отрезка стала точка (0, 0), а конечной (dx, dy), где dx = x2 – x1 и dy = y2 – y1; уравнение прямой принимает вид y = kx = · x.
Обозначим координаты точки Pi-1 после переноса отрезка в начало координат через (r, q), т. е. xi-1 = r, yi-1 = q; тогда Si = (r+1, q), а T = (r+1, q+1), Слайд 13. Из подобия треугольников найдём .
Выразим S: S = (r+1) – q.
Так как приращение по “y” может быть либо 0, либо 1, то
Σ (T+S) = 1 и T = 1-S = 1 - (r+1) – q.
Разность S -T = 2 (r+1) – 2q – 1.
Умножим обе части последнего уравнения на dx:
dx(S - T) = 2(rdy - qdx) + 2dy – dx.
Приращение dx всегда больше нуля, поэтому dx(S - T) можно применять для определения ближайшего к отрезку пиксела, который будет закрашен. Если dx(S-T) < 0, то выбирается точка Si, в противном случае Тi. Введём обозначение: di = dx(S - t), тогда di = 2(rdy - qdx) + 2dy – dx.
Так как r = xi-1, а q = yi-1, то
di = 2xi-1dy – 2yi-1dx + 2dy – dx (A)
Прибавим единицу ко всем индексам, получим
di+1 = 2x1dy -2y1dx + 2dx – dx,
а разность
di+1 – di = 2dy(xi –xi-1) – 2dx(yi – yi-1).
Тогда, так как xi – xi-1 = 1, то
di+1 = di +2dy – 2dx(yi – yi-1) (B)
Это есть рекуррентная формула управления выбором ближайшего пиксела к отрезку прямой под закраску.
Если di ≥ 0, то выбирается Ti:
yi = yi-1 + 1; di+1 = di +2(dy - dx).
Если di < 1, то выбирается Si:
yi = yi-1; di+1 = di + 2dy.
Осталось найти начальные значения di: (x0, y0) = (0, 0).
Внесем значения координат (x0, y0) в формулу (А), тогда
d1 = 2dy – dx.
Если dy > dx, то пошагово увеличивают y и вычисляют х.
Отрисовка окружности
Окружность нетрудно построить по её математическому представлению R2 = x2 + y2, y = ± , 0 ≤ x ≤ R.
Задавая значения x будем получать значение y и ставить точку. Но быстро обнаружатся артефакты в отрисовке – неравномерное распределение пикселов по окружности. Другой недостаток – сложные вычисления – извлечение квадратного корня. Первый недостаток можно устранить, если представить окружность в полярных координатах
x = R cosθ, y = R sinθ.
Подбирая подходящий шаг θ изменения угла θ в заданном интервале его значений, например 0 ≤ θ ≤ , будем определять требуемые координаты пиксела и записывать их. А что плохо? Вычисление sinθ и cosθ.