Финансы, деньги

Преобразования координатных пространств. Аффинные преобразования с использованием однородных координат Прямоугольной системы координат

Сначала определимся, что такое преобразования? Допустим у нас есть модель (для простоты, пусть это будет треугольник). И три координатных пространства: объектное (в котором и описан этот треугольник), мировое и пространство камеры. Так вот, преобразование - это выражение координат объекта, находящегося в одной координатной системе (объектной), с помощью координат другой координатной системы (сначала мировой, а потом камерной).

Как я уже писал раньше, использование разных координатных пространств упрощает создание виртуального мира. В объектном пространстве создаются объекты, причём, у каждого объекта есть своё координатное пространство. Мировое пространство связывает все объекты виртуального мира и позволяет сделать очень трудные вещи - очень простыми (например, перемещение объектов). После того как сцена создана и все объекты передвинуты, происходит преобразования мировых координат в координатное пространство камеры. Мы будем использовать только одну камеру, но в реальных ситуациях можно создать несколько. Несколько камер, например, использовалось в гениальной игре Earth 2150: Escape from the blue planet.

Так о чём это я: преобразования необходимы для использования нескольких координатных пространств.

Для начала вспомним кое-что о векторах. В этом нам поможет следующий рисунок:

Что же мы здесь видим: мировое пространство координат образованное осями x, y, z. Единичные векторы i , j , k называются ортами или базисными векторами мирового координатного пространства. С помощью суммы этих векторов можно получить любой вектор в мировом координатном пространстве.

v - вектор, который соединяет начало мировых координат и начало объектных координат. Длина вектора v равна расстоянию между началом мировых координат и началом объектных. Рассмотрим векторную форму v =(5,2,5):

v = x*i + y*j + z*k = 5*i + 2*j + 5*k

Как я уже писал выше, с помощью базисных векторов можно представить любую точку (вектор) данного пространства, что и демонстрирует данное уравнение.

Векторы p ,q ,r - базисные векторы объектного пространства. Заметьте, что i ,j ,k не обязательно будут равны p ,q ,r .

На данном рисунке я опустил ряд деталей: в объектном координатном пространстве заданы три точки, которые образуют треугольник. Кроме того, я не обозначил камеру, которая направлена в сторону треугольника.

Линейные преобразования координат с помощью матриц

Для начала давайте рассмотрим единичные векторы i ,j ,k , которые по направлению совпадают с координатными осями мирового пространства и называются ортами или базисными векторами мирового пространства.

Запишем эти векторы в координатной форме в виде матриц:

i = [ i x i y i z ] = [ 1 0 0 ] j = [ j x j y j z ] = [ 0 1 0 ] k = [ k x k y k z ] = [ 0 0 0 ]

Здесь векторы представлены матрицами размером 1x3 (матрицами-строками).

Эти базисные векторы мы можем записать с помощью одной матрицы:

И даже, что намного важнее, можем записать эти векторы вот так:

Как видим, получилась единичная матрица размером 3x3 или 4x4.

Казалось бы, что тут такого? Подумаешь, есть возможность записать какие-то дурацкие базисные векторы пространства в одной матрице. Но нет, не "подумаешь"!!! Именно здесь сокрыта одна из самых страшных тайн трёхмерного программирования.

Как я уже писал выше, любая точка, которая присутствует в виртуальном мире, может быть записана в векторной форме:

v = x*i + y*j + z*k

Где v - точка в пространстве, x,y,z - координаты точки v , а i ,j ,k - базисные векторы пространства. Заметьте, здесь мы говорим о точке, но рассматриваем вектор. Надеюсь вы помните, что вектор и точка - это по сути одно и то же.

Формула выше называется векторной формой вектора. Есть ещё одно название - линейная комбинация векторов. Это так, к слову.

Теперь ещё раз посмотрим на вектор v . Запишем его в матрице-строке: v = [ 5 2 5 ]

Заметьте, что длина вектора v - это расстояние от начала мирового координатного пространства к началу объектного координатного пространства.

Давайте попробуем умножить этот вектор на матрицу в которой записаны базисные векторы мирового пространства (надеюсь вы помните формулу перемножения матриц):

В итоге мы получим следующее уравнение:

v M = [ (xi x + yj x + zk x) (xi y + yj y + zk y) (xi z +yj z + zk z) ]

Мы получили вектор. Т.е. результатом перемножения вектора на матрицу, является вектор. В данном случае, вектор не изменился. Но если элементами матрицы будут не единицы (на главной диагонали) и нули (все остальные элементы), а какие-нибудь другие числа, то вектор изменится. Поэтому можно говорить, что матрица M выполняет преобразование координатных пространств. Рассмотрим общую формулу:

a, b - векторы, M - матрица преобразования координатных пространств. Формулу можно прочитать так: "матрица M преобразовывает точку a в точку b".

Для наглядности давайте рассмотрим пример. Нам нужно преобразовать координаты из объектного пространства (p,q) в мировое (i,j):

i ,j - базисные векторы мирового пространства, p ,q - базисные векторы объектного пространства. На картинке можно увидеть, что объектное координатное пространство повёрнута на -45 градусов вокруг оси z (на рисунке её не видно). Кроме того, векторы q ,p в 1,5 раза больше векторов i ,j , а это значит, что объекты определённые в объектном пространстве, в мировом пространстве будут выглядеть в полтора раза меньше.

Чтобы наглядно представить, как модель объектного пространства будет выглядеть после преобразования можно дорисовать рамку для векторов i ,j :

Можно такую же рамку нарисовать и для p ,q , но я не стал загромождать рисунок.

Теперь, допустим, в объектном пространстве у нас нарисован треугольник (рис. а). В мировом пространстве этот треугольник будет повёрнут на 45 градусов и уменьшен на одну треть (рис. б):

Теперь соберём все элементы мозайки: как мы знаем, преобразование можно сделать с помощью матрицы. Строками матриц являются базисные векторы. Координаты базисных векторов мирового координатного пространства в объектном пространстве следующие:

i = [ 0.473 0.473 ] j = [ -0.473 0.473 ]

Как мы узнали координаты? Во-первых, мы знаем, что координатные пространства повёрнуты друг относительно друга на 45 градусов. Во-вторых, базисные векторы объектного пространства в 1,5 раза длинее базисных векторов мирового пространства. Зная это, мы легко вычислили координаты векторов i ,j .

В итоге у нас получается вот такая матрица преобразования (в данном случае - поворота или вращения):

Или в трёхмерном пространстве:

Все значения - приблизительные.

Это матрица преобразования координат из объектного пространства в инерционное (напоминаю, что базисные векторы инерционного пространства совпадают с базисными векторами мирового пространства). Чтобы преобразовать треугольник из объектного пространства в инерционное, нужно умножить все точки (векторы) треугольника на матрицу преобразования.

В последнем примере мы повстречались с двумя преобразованиями: поворот и масштабирование. Оба этих преобразовиния являются линейными.

Теперь, когда мы рассмотрели примеры линейных преобразования, можно познакомиться и с определением:

Линейные преобразования - это преобразования координат, при которых не происходит искажения пространств. Т.е. все параллельные прямые остаются параллельными (есть правда одно исключение). Или совсем по простому: при линейных преобразованиях треугольник никогда не превратится в круг или в квадрат, а всегда будет оставаться треугольником.

Теперь, когда мы приблизительно понимаем, что такое линейные преобразования, рассмотрим конкретные формулы:

Масштабирование (Scale)

k 1 ,k 2 ,k 3 - коффициенты масштабирования. Если k 1, происходит увеличение объектов.

Поворот или вращение (Rotation)

Поворот вокруг оси x:

Поворот вокруг оси y:

Поворот вокруг оси z:

Кстати, именно эту матрицу (поворота вокруг оси z) мы использовали выше.

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

Самое важное, что вы должны запомнить из вышеизложенного, следующее: строки матрицы преобразования содержат базисные векторы нового координатного пространства, выраженные через координаты старого координатного пространства. .

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

И последнее:
С помощью линейных преобразований нельзя перемещать объекты. Т.е. объекты могут быть увеличены/уменьшены, их можно вращать, но они останутся неподвижными.

Аффинные преобразования

Аффинные преобразования - это линейные преобразования с переносом. С помощью аффинных преобразований можно передвигать объекты.

Формула очень простая:

A = bM + v;

Где b - исходная точка, M - матрица линейного преобразования, a - преобразоавнная точка и v - вектор, соединяющий два пространства. Или другими словами, это вектор, длина которого равна расстоянию между двумя координатными пространствами.

На картинке в начале урока необходимо именно аффинное преобразование: сначала линейное преобразование из объектного пространства в инерционное, а затем перенос всех точек объектного пространства в мировое с помощью вектора v.

Для упрощения вычислений в программировании трёхмерной графики используются четырёхмерные векторы, матрицы размером 4x4 и так называемые однородные координаты. Четвёртое измерение не играет никакой роли, оно вводится только лишь для упрощения вычислений.

В четырёхмерном векторе, как вы возможно догадались, используются четыре компоненты: x, y, z и w. Четвёртая компонента вектора назывется однородной координатой.

Геометрически представить однородную координату очень сложно. Поэтому мы рассмотрим трёхмерное однородное пространство с координатами (x,y,w). Представим что двухмерная плоскость определа в точке w=1. Соответственно двухмерная точка представлена в однородном пространстве следующими координатами (x,y,1). Все точки пространства, которые не находятся в плоскости (они находятся в плоскостях, где w != 1) можно вычислить спроецировав на двухмерную плоскость. Для этого нужно разделить все компоненты этой точки на однородную. Т.е. если w!=1, в "физической" (там где мы работаем и там где w=1) плоскости координаты точки будут следующими: (x/w,y/w,w/w) или (x/w,y/w,1). Посмотрите на рисунок:

Координаты векторов следующие:

V 1 = [ 3 3 3 ] v 2 = [ 3 1 0 ] v 3 = [ 3 -2 -2 ]

Эти векторы спроецируются в "физическую" плоскость (w=1) следующим образом:

V 1 = [ 1 1 1 ] v 3 = [ -1.5 1 1 ]

На рисунке видно три вектора. Обратите внимание, что когда точка лежит в плоскости w=0, то эту точку нельзя спроецировать в физическую плоскость (вектор v 2).

Для каждой точки физической плоскости существует бесконечное количество точек в однородном пространстве.

В четырёхмерном пространтстве всё точно так же. Мы работаем в физическом пространстве где w = 1: (x,y,z,1). Если в результате вычислений w != 1, значит нужно все координаты точки разделить на однородную: (x/w,y/w,z/w,w/w) или (x/w,y/w,z/w,1). Существует ещё особый случай, когда w = 0. Мы его рассмотрим попозже.

Теперь перейдём к практике: для чего же чёрт возьми нужна однородная координата?

Как мы уже выяснили, матрица размером 3x3 представляет линейное преобразование, т.е. в ней не содержится переноса (перемещения). Для переноса используется отдельний вектор (а это уже аффинное преобразование):

V = aM + b

Т.е. мы умножаем все точки (векторы) объекта на матрицу преобразования M, чтобы перейти в инерционную систему координат (базисные векторы которой совпадают с базисными векторами мировой системы координат), а затем добираемся до мирового пространства с помощью вектора b. Напоминаю, что вектор b соединяет начало объектного пространства и начало мирового пространства.

Так вот, используюя четыре измерения можно в одну матрицу запихать как линейные преобразования (вращение, масштабирование), так и перенос.

Представим, что четвёртая компонента всегда равна единице (хотя, мы уже выяснили что это не так). Теперь линейное преобразование можно представить с помощью матрицы размером 4x4:

Посмотрим на формулу умножения векторов на матрицу преобразования в четырёхмерном пространстве:

V x = (xi x + yj x + zk x + w*0) v y = (xi y + yj y + zk y + w*0) v z = (xi z + yj z + zk z + w*0) v w = (x*0 + y*0 + z*0 + w*1) Как видим, компоненты преобразованного вектора с помощью матрицы размером 4x4, равны компонентам преобразованного вектора с помощью матрицы размером 3x3. Четвёртая же компонента, как мы условились, всегда будет равна единице, поэтому её можно просто отбросить. Следовательно, можно сказать, что преобразования осуществляемые матрицами размером 3x3 и 3x4 - эквиваленты.

Теперь посмотрим на матрицу переноса:

Умножьте любой вектор из объектного пространства (смотрите рисунок в начале урока) на данную матрицу и вы сможете выразить этот вектор в мировом координатном пространстве (это если базисные векторы объектного и мирового пространств равны).

Обратите внимание, что это тоже линейное преобразование, только в четырёхмерном пространстве.

С помощью произведения матриц мы можем объединить матрицу вращения и матрицу переноса:

Вот эта последняя матрица именно то, что нам было нужно с самого начала. Вы должны хорошо понимать что именно значат все её элементы (за исключением 4-ого столбца).

Задача преобразования координат состоит в следующем: зная координаты нового начала и новых координатных векторов в старой системе:

, , , (3)

выразить координаты х,у точки М в старой системе координат, через координаты этой точки в новой системе.

Из формул (3) следует, что

; ; . (4)

(по правилу треугольника).

Так как , , то по определению координат точки , , т.е. ; .

Тогда, используя формулы (4), получим:

откуда находим:

(5)
;

Так выражаются координаты х,у произвольной точки М в старой системе через ее координаты в новой системе .

Формулы (5) называются формулами преобразования аффинной системы координат .

Коэффициенты , при - координаты нового вектора в старой системе ; коэффициенты , при - координаты нового вектора в старой системе, свободные члены , - координаты нового начала в старой системе:

Координаты точки М

в новой системе

х
у
=
=
+
+
+
+

Таблица называется матрицей перехода от базиса , к базису , .

Частные случаи преобразования аффинной

Системы координат

1. Перенос начала .

При этом преобразовании , , а (рис. 40).

Найдем координаты векторов и в старой системе, т.е. , , и :

Þ Þ , ;

Þ Þ , .

Тогда формулы (5) примут вид:

О"
Рис. 40
(7)

Формулы (7) называются формулами замены координатных векторов .

Понятие направленного угла между векторами.

Преобразование прямоугольной системы координат

Понятие направленного угла между векторами вводится на ориентированной плоскости.

Пусть и - ненулевые векторы, заданные в определенном порядке ( - первый вектор, - второй вектор).

Если || , то направленным углом между вектором и вектором называется

величина , если базис , - правый;

величина , если базис , - левый.

Если , то направленный угол между ними считается равным , если , то (рис. 42).


Рассмотрим две прямоугольные декартовы системы координат и . Пусть М(х;у) в , в . Так как прямоугольная система координат - частный случай аффинной, то можно пользоваться формулами (5) из §12, но коэффициенты , , , уже не могут быть произвольными .

Найдем координаты векторов , в старой системе . Рассмотрим два случая.

1) Базисы , и , одинаково ориентированы (рис. 43).

А 1
А
В
В 1
О"
Рис. 44
a
a

Прямоугольные треугольники и равны по гипотенузе и острому углу (
, ), следовательно, и .

Из находим:

Следовательно, .

Следовательно, . Тогда формулы (5) примут вид:

Заметим, что определитель матрицы перехода от базиса , к базису ,

.

2) Базисы , и , противоположно ориентированы (рис. 45).

О
О"
Рис. 45

О
О"
В
В 1
А
А 1
a
Рис. 46
Пусть . Приведем векторы и к общему началу О (рис. 46).

Рассуждая аналогично случаю 1), получим:

Следовательно, ; .

Тогда формулы (5) примут вид:

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

Формулы (8) и (9) можно объединить:

, где

.

Частные случаи преобразования

Прямоугольной системы координат

1. Перенос начала: , .

Полярные координаты

Если указано правило, по которому положение точек плоскости можно определить с помощью упорядоченных пар действительных чисел, то говорят, что на плоскости задана система координат. Кроме аффинной системы координат, которая была рассмотрена в §10, в математике часто применяют полярную систему координат на плоскости.

Система полярных координат вводится на ориентированной плоскости.

Пара, состоящая из точки О и единичного вектора , называется полярной системой координат и обозначается или . Направленная прямая называется полярной осью , точка О - полюсом (рис. 48).

Таким образом, . Если М совпадает с О , то . Для любой точки М ее полярный радиус

Если М совпадает с полюсом О , то j - неопределенный. Из определения направленного угла между векторами (см. §13) следует, что полярный угол

Р
Рис. 51
М
j
М 1

Выведем формулы перехода от полярных координат к прямоугольным декартовым и обратно.

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

, .

Пусть М(х;у) в . Тогда ; (рис. 51).

Получили формулы перехода от полярных координат к прямоугольным :

Возведем обе части этих равенств в квадрат и сложим:

, откуда (корень берется со знаком «+», т.к. ). Þ Þ
;
.

a
О
в
Рис. 52
Замечание . При решении задач на переход от прямоугольных декартовых координат к полярным недостаточно найти только или только , т.к. по одной тригонометрической функции определить полярный угол однозначно невозможно: в промежутке существуют два угла с одинаковыми косинусами (два угла с одинаковыми синусами) (рис. 52). Поэтому правильно найти полярный угол j вы сможете, только если одновременно вычислите и .

М 1 =(x 1 ,y 1), М=(x,y). Так как точка М делит отрезок М 0 М 1 в отношении λ, то

; (1)

При данном аффинном преобразовании точки М 0 ,М 1 ,М перейдут в точки М 0 ′,М 1 ′, М′ с теми же координатами, что и у точек М 0 ,М 1 ,М, но только в координатной системе О"е" 1 е" 2 . Эти координаты по-прежнему связаны соотношениями (1), из которых следует, что М′ делит отрезок М 0 ′М 1 ′ в отношении λ. Этим теорема доказана.

3.Аналитическое выражение аффинных преобразований (формулы перехода).

Задача: Как зная параметры одной системы относительно другой можно определить положение точки в обеих системах координат(т.е. как найти формулы переходе от одной системы(старой) к другой новой системе.

Рассмотрим случаи преобразования для аффинных систем координат.

1) Пусть дана система R={О, (е 1 , е 2)} и пусть в ней задана М=(x,y) R , О(0,0) R - координаты начала. е 1 (1,0) R , е 2 (0,1) R – координаты базисных векторов.

2) Пусть задана вторая система координат R′={О, (е 1 ′, е 2 ′)}, причем известны параметры, определяющие новый базис и новое начало координат через старую систему координат, т.е. О′(x 0 ,y 0) R , е 1 ′(С 11 ,С 12) R , е 2 ′(С 12 ,С 22) R

Поставим задачу найти координаты точки М в новой системе координат(М(x′,y′) R ′). Обозначим неизвестные координаты точки М(x′,y′).

Для трех точек О,О′,М: О′М=О′О +ОМ. О′М – радиус вектор точки М в новой системе координат, значит, его координаты будут совпадать с координатами вектора О′М в системе R′ (О′М↔М R ′)=>О′М(x′,y′) R ′ => О′М=x′e 1 ′+y′e 2 ′ (1) ; О′О - радиус вектор точки О′ в системе R′, т.е. его координаты будут совпадать с координатами О′О↔ О′ R => О′О(x 0 ,y 0) R => О′О= x 0 e 1 +y 0 e 2 (2) ; ОМ↔ М R => ОМ=xe 1 +ye 2 (3). Т.о. вектор О′М=ОМ −ОО′ после подстановки в данное векторное равенство разложения (1),(2) и (3) будет иметь вид:

x′e 1 ′+y′e 2 ′= xe 1 +ye 2 −(x 0 e 1 +y 0 e 2) (4); т.к. в условии заданы параметры, определяющие координаты новых базисных векторов через старый базис, получим для новых базисных векторов следующие векторные равенства:

е 1 ′(С 11 ,С 12) R => е 1 ′= С 11 e 1 +С 21 e 2 ;

е 2 ′(С 12 ,С 22) R => е 2 ′= С 12 e 1 +С 22 e 2 ; (5)

Подставим (5) в левую часть (4) и сгруппируем относительно базисных векторов е 1 и е 2 .

x′(C 11 e 1 +C 21 e 2)+y′(C 12 e 1 +C 22 e 2)- xe 1 -xe 2 +x 0 e 1 -ye 2 +x 0 e 1 +y 0 e 2 =0.
(x′C 11 + y′C 12 e 1 -x+x 0)e 1 + (x′C 21 +y′ C 22 -y+y 0)e 2 =0.

Т.к. (е 1, е 2) образуют базис, то это линейнонезависимая система, для которой последнее векторное равенство выполняется при условии, что все коэффициенты левой части равны нулю, т.е. при условии

(6);

(6)- формулы перехода от старой системы R к новой системе R′ при переменных x′ и y′.

Т.к столбцы определителя- это координаты базисных векторов е 1 ′ и е 2 ′, то данный определитель никогда не обращается в ноль, т.е. система (6) однозначно разрешима относительно переменных х′ и у′, что всегда позволяет найти формулу обратного перехода от R′ к R.

Для формул (6) существуют два частных случая

1. замена базиса;

2. перенос начала.

1.Система R′, полученная из системы Rпутем замены базиса с сохранением того же начала координат R={О, (е 1 , е 2)}→ R′={О, (е 1 ′, е 2 ′)}, т.е. О′(х 0 ,у 0)=О(0,0)=>х 0 =у 0 =0,тогда формулы замены базиса примут вид:

(7)

2. Пусть система R′ получена из R путем переноса начала из т.О в точку О′ с сохранением того же базиса:
R={О, (е 1 , е 2)}→ R′={О′, (е 1 , е 2)}=> е 1 ′(1,0), е 2 ′(0,1),т.о. формулы примут вид.

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

Геометрический смысл однородных координат состоит в следующем (рис.6). произвольная точка на прямой

Рис. 6. Геометрическая интерпретация однородных координат

Тем самым между производительной точкой с координатами (x, y) и множеством троек чисел вида (W×x, W×y, W), W≠0 устанавливается взаимно однозначное соответствие, позволяющее считать числа W×x, W×y, W новыми координатами этой точки. Таким образом, однородные координаты можно представить как вложение промасштабированной с коэффициентом W двухмерной плоскости в плоскость z = W (здесь z = 1) в трехмерном пространстве.

Применение однородных координат оказывается удобным при решении даже простейших задач.

Если устройство отображения работает только с целыми числами (или если необходимо работать только с целыми числами), то для произвольного значения W (например, W=1) точку с однородными координатами (0,5; 0,1; 2,5) представить нельзя. Однако при разум, ном выборе W можно добиться того, чтобы координаты этой точки были целыми числами. В частности, при W=10 для рассматриваемо­го примера имеем (5; 1; 25).

Другой случай. Чтобы результаты преобразования не приводили к арифметическому переполнению, для точки с координатами (80000; 40000; 1000) можно взять, например, W=0,001. В результате получим (80; 40; 1).

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

Как известно, преобразования переноса, масштабирования и по­ворота в матричной форме записываются в виде

Р’ = Р × S;

Перенос реализуется отдельно (с помощью сложения) от масшта­бирования и поворота (с помощью умножения). Если выразить точ­ки в однородных координатах, то все три преобразования можно реализовать с помощью умножений. Здесь мы рассмотрим двухмерные преобразования.

Уравнения переноса записываются в виде матрицы преобразования однородных координат следующим образом:

Р’ = Р × T(dx, dy),

.

Иногда подобные выражения записываются следующим образом:

Рассмотрим, например, двойной перенос точки. Пусть необходи­мо перенести точку Р в точку Р’ на расстояние (dx1, dy1), а затем в P’’ на расстояние (dх2, dу2). Суммарный перенос должен быть равен расстоянию (dх1+d2, dу1+dу2). Запишем данные в виде

P’ = P × T (dx1, dy1);

P’’ = P’ × T (dx2, dy2).

Подставляя первую формулу во вторую, получим

P’’ = P × (T (dx1, dy1) × T (dx2, dy2)).

Матричное произведение T (dx1, dy1) ∙ T (dx2, dy2) есть

Таким образом, результирующий перенос есть (dx1+dx2, dy1+dy2), т.е. последовательные переносы являются аддитивными.

Уравнения масштабирования в матричной форме с использованием однородных координат записываются в виде

,

.

P’ = P’ × S(Sx, Sy).

Матричное произведение S(Sx1, Sy1) × S(Sx2, Sy2) есть

Таким образом, последовательные масштабирования мультипликативны.

И наконец, уравнение поворота (в правосторонней системе) можно представить в виде

.

Последовательные повороты являются аддитивными.

Композиция двухмерных преобразований с помощью однородных координат . Матричное произведение в разных случаях называют объединением, соединением, конкатенацией и композицией . Будем пользоваться последним из перечисленных терминов.

Рассмотрим, например, поворот объекта относительно некоторой произвольной точки P1. Поскольку нам известно лишь как поворачивать вокруг начала координат, разобьем исходную задачу на три подзадачи:

Перенос, при котором точка P1 перемещается в начало координат;

Поворот;

Перенос, при котором точка из начала координат возвращается в первоначальное положение P1.

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

Рис. 7.1 . Поворот объекта относительно некоторой произвольной точки

Результирующее преобразование имеет вид

Используя аналогичный подход, можно промасштабировать объект относительно произвольной точки P1: перенести P1 в начало координат, промасштабировать, перенести назад в точку P1. Результирующее преобразование в этом случае будет иметь вид

Рассмотрим более сложное преобразование. Предложим, что нам необходимо промасштабировать, повернуть и расположить в нужном месте объект (домик на рис. 7.2), где центром поворота и масштабирования является точка P1.

Рис. 7.2 . пример последовательности преобразования

Последовательности преобразований заключается в переносе точки P1 в начало координат, проведении масштабирования и поворота, а затем переносе из начала координат в новую позицию P2. В структуре данных прикладной программы, в которой содержится это преобразование, могут находиться масштабный множитель (множители), угол поворота и величины переноса или может быть записана матрица результирующего преобразования:

T (-x1, -y1) × S (Sx, Sy) × R (A) × T (x2, y2).

В общем случае перемножение матриц некоммутативно. Если М1 и М2 представляют собой элементарные перенос, масштабирование или поворот, в следующих частных случаях коммутативность имеет место:

M1 M2
Перенос Масштабирование Поворот Масштабирование (при Sx=Sy) Перенос Масштабирование Поворот Поворот

Композиция наиболее общего вида, составленная из операций R, S и T, имеет матрицу

Ее верхняя часть размером 2 × 2 является объединенной матрицей поворота и масштабирования, в то время как tx и ty описывают суммарный перенос. Для вычисления Р∙М как произведения вектора на матрицу размером 3 × 3 требуются 9 операций умножения и 6 операций сложения. Структура последнего столбца обобщенной матрицы позволяет упростить фактически выполняемые действия.