Скачиваний:
70
Добавлен:
16.04.2013
Размер:
3.38 Mб
Скачать

Композиция двумерных преобразований

Понятие композиции было введено в предыдущем разделе.

В данном разделе мы покажем, каким образом можно использовать композицию преобразований для объединения фундаментальных матриц 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)

Поворот


В этих случаях порядок перемножения матриц неважен.