- •Элементы интерактивной компьютерной графики
- •Класс 2: двухуровневые или представляемые в нескольких «цветах» изображения
- •Структура графического изображения
- •Блок-схема графической системы
- •Методы кодирования графической информации
- •Позиционные методы кодирования ги. Рецепторный метод кодирования
- •Метод тетрарного дерева
- •Структурные методы кодирования Цепной метод кодирования
- •Кусочно – линейная аппроксимация контура изображения
- •Аппроксимация группы точек окружностью
- •Аналитические методы кодирования
- •Методы структурно – символического кодирования
- •Типичная система команд дисплейного процессора
- •Форматы дисплейных команд
- •А) Команды, управляющие лучом гд.
- •Геометрические преобразования
- •Двумерные преобразования Перенос (сдвиг)
- •Масштабирование
- •Поворот изображения
- •Однородные координаты и матричное представление двумерных преобразований
- •Композиция двумерных преобразований
- •Вопросы эффективности
- •Матричное представление трехмерных преобразований
- •Видовая операция (отсечение части изображения по прямоугольному окну)
- •Высокопроизводительные графические преобразования
- •Алгоритмы растровой графики
- •Алгоритм Брезенхэма для отрезков прямых
- •Растровая развертка окружностей
- •Алгоритм брезенхема для генерации окружности
- •Типы графических дисплеев Векторный дисплей
- •Организация памяти в растровых графических дисплеях
- •Организация дисплейного файла
Композиция двумерных преобразований
Понятие композиции было введено в предыдущем разделе.
В данном разделе мы покажем, каким образом можно использовать композицию преобразований для объединения фундаментальных матриц R, S и M с целью получения желаемых общих результатов.
Основное преимущество объединенных преобразований состоит в том, что к точке более эффективно применять одно результирующее преобразование, чем ряд преобразований друг за другом.
Рассмотрим, например, поворот объекта относительно некоторой произвольной точки Р1. Поскольку поворот производится вокруг начала координат, разобьем исходную (трудную) задачу на три более легкие задачи.
Таким образом, чтобы произвести поворот относительно точки Р1, необходимо выполнить последовательно три элементарных преобразования:
1. Перенос, при котором точка Р1 перемещается в начало координат.
2. Поворот объекта вокруг начала координат.
3. Перенос, при котором точка из начала координат возвращается в первоначальное положение Р1.
Эта последовательность показана на рис., на котором вокруг точки P1(x, у) поворачивается контур домика. Первый перенос производится на (—х —y), в то время как последующий — на (x y) — является обратным ему. Результат существенно отличается от того, который получился бы, если бы применялся один только поворот.
Результирующее преобразование имеет вид
1 0 0 cosΘ sinΘ 0 1 0 0
0 1 0 * - sinΘ cosΘ 0 * 0 1 0
-x -y 1 0 0 1 x y 1
cosΘ sinΘ 0
- sinΘ cosΘ 0
x* ( 1 – cosΘ ) + y * sinΘ y* (1 – cosΘ ) – x * sinΘ 1
Эта композиция преобразований путем умножения матриц служит примером того, как применение однородных координат упрощает задачу.
Используя аналогичный подход, можно промасштабировать объект относительно произвольной точки Р1: перенести Р1 в начало координат, промасштабировать, перенести назад в точку Р1. Результирующее преобразование в этом случае будет иметь вид
1 0 0 Sx 0 0 1 0 0
0 1 0 * 0 Sy 0 * 0 1 0 =
-x1 -y1 1 0 0 1 x1 y1 1
Sx 0 0
= 0 Sy 0
x1 * (1 – Sx) y1 * (1 – Sy) 1
Предположим, что нам необходимо промасштабировать, повернуть и расположить в нужном месте изображение, где центром поворота и масштабирования является произвольная точка Р1.
Последовательность преобразований:
- перенести точку Р1 в начало координат,
- провести масштабирование,
- провести поворот,
перенести точку Р1 из начала координат в новую позицию Р2, в которой должно оказаться изображение.
В структуре данных, в которой содержится это преобразование, могут находиться масштабный множитель (множители), угол поворота и величины переноса или может быть записана матрица результирующего преобразования:
M(-x1 - y1) * S(Sx Sy) * R(Θ) * M(x2 y2)
Если известно, что М1 и М2 представляют собой элементарные перенос, масштабирование или поворот, то при каких условиях М1 и М2 коммутативны?
В общем случае умножение матриц некоммутативно. Однако в следующих частных случаях коммутативность имеет место:
М1 |
М2 |
Перенос |
Перенос |
Масштабирование |
Масштабирование |
Поворот |
Поворот |
Масштабирование (при Sx=Sy) |
Поворот |
В этих случаях порядок перемножения матриц неважен.