
- •Элементы интерактивной компьютерной графики
- •Класс 2: двухуровневые или представляемые в нескольких «цветах» изображения
- •Структура графического изображения
- •Блок-схема графической системы
- •Методы кодирования графической информации
- •Позиционные методы кодирования ги. Рецепторный метод кодирования
- •Метод тетрарного дерева
- •Структурные методы кодирования Цепной метод кодирования
- •Кусочно – линейная аппроксимация контура изображения
- •Аппроксимация группы точек окружностью
- •Аналитические методы кодирования
- •Методы структурно – символического кодирования
- •Типичная система команд дисплейного процессора
- •Форматы дисплейных команд
- •А) Команды, управляющие лучом гд.
- •Геометрические преобразования
- •Двумерные преобразования Перенос (сдвиг)
- •Масштабирование
- •Поворот изображения
- •Однородные координаты и матричное представление двумерных преобразований
- •Композиция двумерных преобразований
- •Вопросы эффективности
- •Матричное представление трехмерных преобразований
- •Видовая операция (отсечение части изображения по прямоугольному окну)
- •Высокопроизводительные графические преобразования
- •Алгоритмы растровой графики
- •Алгоритм Брезенхэма для отрезков прямых
- •Растровая развертка окружностей
- •Алгоритм брезенхема для генерации окружности
- •Типы графических дисплеев Векторный дисплей
- •Организация памяти в растровых графических дисплеях
- •Организация дисплейного файла
Поворот изображения
Точки могут быть повернуты на угол Θ относительно начала координат, как показано на рис. 7.5 для точки Р (6, 1) и угла Θ=30°.
Как и в случае масштабирования, поворот производится относительно начала координат. Поворот относительно произвольной точки рассмотрен в одном из последующих разделов.
Положительными считаются углы, измеряемые против движения часовой стрелки от х к у. В случае отрицательных (по часовой стрелке) углов для модификации выражений и можно воспользоваться тождествами
cos( - Θ) = cosΘ и sin (- Θ) = - sin Θ.
Точка Р (х, у) переводится в точку Р' (х', у') поворотом на угол Θ. Поскольку поворот производится относительно начала координат, расстояния от него до Р и Р' равны. Они обозначены на рисунке через r. Из простых тригонометрических соотношений следует, что при начальном угле φ и повороте точки на угол Θ получим
x = r * cos φ, y = r * sin φ и тогда
х' = r * cos (φ + Θ) = r * cos φ* cos Θ —r* sin φ* sin Θ,
у' = r * sin (φ + Θ) =r * cos φ * sin Θ + r * sin φ cos Θ.
Теперь подставим значения x и y в два последних уравнения
х' = x * cos Θ — у * sin Θ,
у' = х * sin Θ + у * cos Θ.
Или в матричной форме
cos Θ sin Θ
[x' y'] = [x y] * - sin Θ cos Θ
или
P' = P * R,
где через R обозначена матрица поворота.
Однородные координаты и матричное представление двумерных преобразований
Преобразования переноса, масштабирования и поворота в матричной форме записываются в виде
P' = P + М,
P'=P * S,
P' = P * R.
К сожалению, перенос реализуется отдельно (с помощью сложения) от масштабирования и поворота (c помощью умножения). Хотелось бы представить их таким способом, чтобы все эти три элементарных преобразования можно было легко объединять вместе.
Ниже в этом разделе показано, как это можно сделать.
Если мы выразим точки в однородных координатах, то все три преобразования можно реализовать с помощью умножений. Однородные координаты были введены в геометрии и впоследствии использованы в графике. С однородными координатами и преобразованиями над ними работают многие пакеты графических подпрограмм. В одних случаях эти координаты используются прикладной программой непосредственно при задании параметров для графического пакета, в других — применяются лишь внутри самого пакета и недоступны для программиста.
В однородных координатах точка Р(х, у) записывается как P(W*x, W*y, W) для любого масштабного множителя W0. При этом если для точки задано ее представление в однородных координатах Р(Х, Y, W), то можно найти ее двумерные декартовы координаты как x=X/W и y=Y/W.
Считаем, что W всегда будет равно 1, поэтому операция деления не требуется. Однородные координаты можно представить как вложение промасштабированной с коэффициентом W двумерной плоскости в плоскость z=W (здесь z = 1) в трехмерном пространстве.
Точки теперь описываются трехэлементными вектор-строками, поэтому матрицы преобразований, на которые умножается вектор точки, чтобы получить другой вектор точки, должны иметь размер 3X3.
Уравнения переноса записываются в виде матрицы преобразования однородных координат следующим образом:
[ x' y' 1] = [x y 1] *
или
P' = P * М (mx my),
где M (mx my) =
матрица переноса
Что будет, если точку Р перенести в точку Р' на расстояние (mx1 my1,), а затем в Р" на расстояние (mx2 my2)? Интуитивно ожидаемый результат в этом случае представляет собой суммарный перенос на расстояние (mx1+mx2, mу1+mу2). Чтобы доказать это, запишем данные в виде
P' = P * М(mx1 my1), (
P" = P' * М(mx2 my2).
Теперь, подставляя второе выражение в первое, получим
P'' = (P * М(mxl my1)) * М(mx2 my2)) = P * (М(mx1 my1) * М(mx2 my2)).
Матричное произведение М(mxl my1) * М(mx2 my2) есть
1 0 0 1 0 0 1 0 0
0 1 0 * 0 1 0 = 0 1 0
mx1 my1 1 mx2 my2 1 mx1 + mx2 my1 + my2 1
Действительно, результирующий перенос есть (mx1 + mx2 my1 + my2). Матричное произведение в разных случаях называют объединением, соединением, конкатенацией и композицией матриц М(mxl my1) и М(mx2 my2).
То-есть, переносы аддитивны.
Уравнения масштабирования в однородных координатах записываются в следующем виде:
Sx
0 0
[x' y' 1] = [x y 1] * 0 Sy 0
0 0 1
или P' = P * S (Sx Sy )
Пример. Покажем, что двойное масштабирование мультипликативно.
Если задано P' = P * S(Sx1 Sy1) и P" = P' * S(Sx2 Sy2). Тогда
P" = P * [S(Sx1 Sy1) * S(Sx2 Sy2)].
Матричное произведение выражения, стоящего в скобках, равно
Sx1 0 0 Sx2 0 0 Sx1 * Sx2 0 1
0 Sy1 0 * 0 Sy2 0 = 0 Sy1 * Sy2 0
0 0 1 0 0 1 0 0 1
Уравнения поворота аддитивны и их можно представить в виде:
cosΘ
sinΘ 0
[x' y' 1] = [x y 1] * -sinΘ cos Θ 0
0 0 1
или P' = P * R (Θ )