Новосибирский Государственный Технический Университет. Факультет автоматики и вычислительной техники Кафедра вычислительной техники (специальность 220100). учебное пособие

Вид материалаУчебное пособие
0.1.3  Композиция двумерных преобразований
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   44

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


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

Рассмотрим сдвиг точки P0 на расстояние (Tx1, Ty1) в точку P1, а затем сдвинем точку P1 на расстояние (Tx2, Ty2) в точку P2. Обозначая через T1 и T2 матрицы сдвига, в соответствии с (9) получим:


P1 = P0 ·T1;  P2 = P1 ·T2   =   (P0 ·T1) ·T2   =   P0 ·(T1 ·T2)   =  P0 ·T.



Понятно, что сдвиг аддитивен, т.е. последовательное выполнение двух сдвигов должно быть эквивалентно одному сдвигу на расстояние (Tx1+Tx2, Ty1+Ty2). Для доказательства этого рассмотрим произведение матриц сдвига T1 и T2, равное


T =












1




0




0




0




1




0




Tx1




Ty1




1
















·












1




0




0




0




1




0




Tx2




Ty2




1
















=





















1




0




0




0




1




0




Tx1+Tx2




Ty1+Ty2




1
















.



Итак, получили, что результирующий сдвиг есть (Tx1+Tx2, Ty1+Ty2), т.е. суммарный сдвиг, вычисленный как произведение матриц, как и ожидалось, аддитивен.

Рассмотрим теперь последовательное выполнение масштабирований, первое с коэффициентами (Sx1, Sy1), второе с коэффициентами (Sx2, Sy2). Следует ожидать, что суммарное масштабирование будет мультипликативным. Обозначая через S1 и S2 матрицы масштабирования, в соответствии с (10) получим


P1 = P0 ·S1,   P2 = P1 ·S2   =  (P0 ·S1) ·S2   =   P0 ·(S1 ·S2) = P0 ·S.



Найдем значения элементов матрицы S


S =












Sx1




0




0




0




Sy1




0




0




0




1
















·












Sx2




0




0




0




Sy2




0




0




0




1
















=












Sx1 ·Sx2




0




0




0




Sy1 ·Sy2




0




0




0




1
















.



Итак, получили, что результирующее масштабирование есть (Sx1 ·Sx2,  Sy1 ·Sy2), т.е. суммарное масштабирование, вычисленное как произведение матриц, как и ожидалось, мультипликативно.

Аналогичным образом можно показать, что два последовательных поворота аддитивны.

Рассмотрим выполнение часто используемого поворота изображения на угол  относительно заданной точки P(X,Y). Это преобразование можно представить как перенос начала координат в точку (X,Y), поворот на угол  относительно начала координат и обратный перенос начала координат:


Pn = P ·T(-X,-Y) ·R() ·T(X,Y).



С использованием преобразований в однородных координатах, суммарное преобразование будет иметь простой вид:
















1




0




0




0




1




0




-X




-Y




1
















·












cos




sin




0




-sin




cos




0




0




0




1
















·












1




0




0




0




1




0




X




Y




1
















.