Последовательное применение нескольких преобразований

Если записать последовательное применение нескольких преобразований, то можно обнаружить удобную вещь. Запишем первое преобразование, обозначим его М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-х мерной графики хранят в какой-то своей канонической системе координат. И для того, чтобы осуществить рендеринг модели на плоском экране, к каждой модели прилагается матрица преобразований, которым подвергают все точки модели, и они оказываются в том месте, где им надлежит быть, где это требовалось в задаче.

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

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

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

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

 

0, 0
β
β
а, b
v Т (- а - b) v R (β) v T (a b)

 

 


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

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

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

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

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

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

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

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

5 Обратное преобразование -(Слайд 11).

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

Т ∙ Т־¹ = 1.

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

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

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

Т־¹ = или

возвращаясь к ранее принятым обозначениям, можно записать в свернутом виде:

И в развернутом

 

6 Что может подвергаться преобразованиям в геометрических моделях?

 

Выделим три опорных момента. Подвергать преобразованиям можно

1. Точки. Они задают геометрическую модель как таковую.

 

2. Направление. Например, надо задать (определить) направление быстро движущегося объекта к точке, находящейся вне поля зрения наблюдателя (за пределом экрана, в большой удалённости от места действия, в ∞-и). На направление влияют только коэффициенты a, b, c и d. Коэффициенты l и m в преобразовании не участвуют, нет точки, которую надо переносить (Слайд 12).

 

3. Нормали. Это векторы направления перпендикулярные некоторому другому заданному направлению Их преобразование в одной и той же системе координат отличается от преобразования вектора, к которому эта нормаль перпендикулярна. Содержание слайда 12 приведено ниже


 

· точка (радиус-вектор) (p):

 

· вектор (v) и нормаль (n)

(только направление, w=0)


 

 

Преобразования точек, векторов и нормалей можно соответственно записать так

 

Вернемся к нормалям. С нормалями всё не так. Это видно из изображения (рис. выше), слайд 12. Базовый объект промасштабирован по оси x в 2 раза и все точки переместились по оси x также в 2 раза. Если это распространить на нормаль, то она станет почти параллельна оси x. А это совсем неверно (на слайде выше показана зелёной стрелкой). В этом частном случае надо нормаль оттянуть назад к оси y. И надо понять – какую матрицу преобразования следует применить к нормали, чтобы выполнить прямое преобразование объекта, сохранив! требуемое направление нормали. На слайде 13 (ниже приведено его содержание) дан вывод соответствующего преобразования..

Первые три уравнения – есть постановка задачи: а) что известно из теории - скалярное произведение перпендикулярных друг другу векторов равно 0; б) требуется найти матрицу Q преобразования нормали n, если матрица преобразования вектора v – Mtransformизвестна

 

 

Решение задачи:

 

 

Поясним.

Скалярное произведение двух перпендикулярных векторов равно нулю. И оно должно оставаться таким и после преобразования,т.е.:

n ∙ v = 0 и

n' ∙ v' = 0,

 

Задача состоит в нахождении матрицы преобразования направления нормали, если известна матрица преобразования вектора, к которому эта нормаль перпендикулярна. Известно, что скалярное произведение двух взаимно перпендикулярных векторов равно нулю.

Так как

n'= n ∙ Q transform, а v'= v∙ M transform,

то (n ∙ Q transform) ∙ (v ∙ MТ transform) = 0

Зададим значения координат для нормали n и вектора v: пусть n = (A, B), а v = (x, y), здесь А и В – координаты вектора нормали; внесем их значение в последнюю формулу и тогда из этой формулы можно составить уравнение, в котором в силу ассоциативности скалярного произведения переставлены скобки

 

(A B 0) ∙ (Q transform ∙ MТ tranмsform) ∙ (x y 0)Т = 0.

 

Это уравнение справедливо, а так как Qtransform ∙ MТtransform = E = 1, то из него и найдём

 

Q transform = (M־¹transform)Т.

 

Таким образом, для преобразования нормали n одновременно с преобразованием вектора v надо к нормали применить не прямую матрицу M преобразования, а ей обратную транспонированную.

 

Замечание. Варианты нотации записи.Слайд 14. Матрица – это способ хранения информации и в КГ, в программных продуктах уравнения преобразования записывают как вектор-строка умноженная скалярно на матрицу преобразования.

Математики традиционно используют запись через вектор-столбец. Это надо иметь ввиду. С точки зрения логики КГ удобнее писать формулы преобразования как для вектора-строки. Машине же безразлично как эти матрицы составлены.

Если выполняется одно преобразование, то для вектор-строки соответствует первая запись из приведенных ниже, а для вектора-столбца – вторая.

 

 

Если выполняется композиция преобразований, то соответственно этому записи имеют вид:

Во второй записи последовательность преобразования обратная действительной последовательности.