Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Геом. преобразов.Часть2.doc
Скачиваний:
14
Добавлен:
16.09.2019
Размер:
1.62 Mб
Скачать
  1. Последовательное применение нескольких преобразований.

Если записать последовательное применение нескольких преобразований, то можно обнаружить удобную вещь. Запишем первое преобразование, обозначим его М1, второе преобразование М2 и т. д. над одним и тем же объектом: (Слайд 10)

(x' y' 1) = (x y 1)∙M1

(x' y' 1) = (x y 1) ∙M2

(x' y' 1) = (x y' 1) ∙M3

Объединим эти уравнения

(x' y' 1) = (((x y 1) ∙M1) ∙M2) ∙M3

И в силу ассоциативности умножения перепишем их, раскрыв скобки

(x' y' 1) = (x y 1)∙ (M1 ∙M2 ∙M3)

или

(x' y' 1) = (x y 1) ∙M transform

В результате получена одна матрица преобразования, т. е. сложное аффинное преобразование можно задать одной матрицей. Это используют во всех программах, как дискретных, так и анимационных.

Базовые модели 3-х мерной графики хранят в какой-то своей канонической системе координат. И для того, чтобы осуществить рендеринг модели на плоском экране, к каждой модели прилагается матрица преобразований, которым подвергают все точки модели, и они оказываются в том месте, где им надлежит быть, где это требовалось в задаче.

Это позволяет избежать потерь в точности позиционирования модели. В машине отдельно хранят модель и отдельно матрицу преобразований, этим достигают требуемую точность.

Так как произведение матриц, задающих АП, также задаёт Аффинное преобразование, то произвольный набор действий можно задать одной матрицей.

Важный вопрос – как можно комбинировать преобразования? Произвольный набор действий можно задать одной матрицей, но произвольно комбинировать матрицы преобразования нельзя, т. к. они некоммутативны.

Рассмотрим пример. Пусть требуется осуществить поворот некоторой точки на плоскости относительно другой, заданной координатами (а, в) – см. рис.

  • Т (- а - b)

  • R (β)

  • T (a b)

Для выполнения этого преобразования необходимо правильно применить набор известных нам элементарных (базовых) преобразований и их последовательность, чтобы получить требуемый результат. Мы можем пользоваться параллельным переносом, сдвигом, поворотом и т. д. относительно начала координат.

Все действия разобьём на 3 части (шага):

  1. Вначале выполним параллельный перенос Т (- а - b) точки (а, b) в начало координат;

  2. Теперь можно повернуть вектор на угол β => R(β);

  3. Третье действие – вернуть точку на прежнее место, т. е. выполнить обратное действие первому - из начала координат перенести точку в прежнее положение, выполнив преобразование - Т(а, b).

С точки зрения принятой нотации все эти действия можно записать в виде скалярного произведения так:

Т(-а, -b)∙R(β)∙T(a, b).

В этой последовательности, чтобы получить требуемый результат, нельзя менять сомножители местами, т. к. скалярное произведение матриц некоммутативно. А перенос стартовой точки в начало координат определяется матрицей поворота, которая получена преобразованием радиус-вектора с началом его в нулевой точке СК.

  1. Обратное преобразование

(Слайд 11).

Выполнив прямое преобразование, бывает нужно вернуть объект назад. В общем случае это осуществляют посредством обратной матрицы. Если определитель квадратной матрицы не равен нулю, то такая матрица имеет и обратную ей, причём справедливо

Т ∙ Т־¹ = 1.

Обратная матрица считается по известной формуле

А־¹ = , здесь |А| - определитель матрицы А, число; а матрица преобразования составлена из алгебраических дополнений матрицы А и затем транспонирована.

Для нашего примера матрица обратного преобразования в свёрнутом виде запишется так:

Т־¹ = или

слайд 11 – Обратные аффинные преобразования.

Его содержание: