какое линейное преобразование задает данная матрица
Матрица преобразования
Будем рассматривать двумерный случай.
В каком-то смысле, любое линейное преобразование одновременно является матрицей, так же как точка — это набор координат.
Посмотрим как меняются координаты при преобразовании.
То есть новые координаты как-то линейно зависят от старых.
Рассмотрим частные случаи преобразований.
Содержание
Базовые преобразования [ править ]
Параллельный перенос [ править ]
[math] T_ <(t_x, t_y)>= \left(\begin
Решение: [math] T_ <(a, b)>(\left(\begin
Вполне ожидаемый ответ.
Масштабирование вдоль осей [ править ]
[math] S_
Задача: Найдите новые координаты точки [math] (3, 5) [/math] после масштабирования по оси [math] O_x [/math] с коэффициентом 2 (по оси [math] O_y [/math] масштаб остаётся таким же).
Решение: [math] S_ <2, 1>(\left(\begin
Поворот относительно начала координат [ править ]
Пример Задача: Найдите новые координаты точки [math] (5, 1) [/math] после поворота плоскости на [math] 90 [/math] °.
Тождественное преобразование [ править ]
Это преобразование, оставляющее все точки неподвижными.
Его матрица: [math] I = \left(\begin
Композиция преобразований [ править ]
[math] (g \circ f) x = g (f (x)) [/math]
Посчитаем двумя способами.
2) Воспользуемся ассоциативностью умножения матриц (сочетательный закон)
Получается, при композиции преобразований их матрицы перемножаются.
Линейные операторы
1. Понятие линейного оператора
Пусть R и S линейные пространства, которые имеют размерность n и m соответственно. Оператором A действующим из R в S называется отображение вида , сопоставляющее каждому элементу x пространства R некоторый элемент y пространства S. Для этого отображения будем использовать обозначение y= A(x) или y= Ax.
Определение 1. Оператор A действующий из R в S называется линейным, если для любых элементов x1 и x2 пространства R и любого λ из числового поля K выполняются соотношения
Если пространство S совпадает с пространством R, то линейный оператор, который действует из R в R называют линейным преобразованием пространства R.
Пусть заданы два векторных пространства n-мерный R и m-мерный S, и пусть в этих пространствах заданы базисы и соответственно. Пусть задано отображение
, | (2) |
. |
Покажем теперь обратное, т.е. что для любого линейного оператора A, отображающего пространство R в S и произвольных базисов и в R и S соответственно, существует такая матрица A с элементами из численного поля K, что определяемое этой матрицей линейное отображение (1) выражает координаты отображенного вектора y через координаты исходного вектора x.
Пусть x − произвольный элемент в R. Тогда
(3) |
является разложением x в по базису .
Применим оператор A к базисным векторам :
(4) |
где aij − координаты полученного вектора в базисе .
Тогда применяя оператор A к элементу x и учитывая (3) и (4), имеем
Сделаем следующее обозначение:
(6) |
Тогда равенство (5) примет следующий вид:
(7) |
Из равенства (7) следует, что любой элемент из пространства R при отображении оператором A, в пространстве S и в базисе имеет координаты yi, i=1,2. m. В свою очередь, из (6) следует, что этим координатам соответствуют линейные комбинации координатов элемента xj, j=1,2. n с коэффициентами aij i=1,2. m; j=1,2. n.
Построим матрицу A с элементами aij:
(8) |
Тогда выражение (6) можно записать в матричном виде:
Матрица A называется матрицей линейного оператора в заданных базисах и .
2. Сложение линейных операторов
Определение 2. Суммой линейных операторов A и B называется оператор C, определяемый равенством
где x∈R означает, что x принадлежит пространстве R.
Сумма линейных операторов обозначается так C=A+B. Легко убедится, что сумма линейных операторов также является линейным оператором.
Применим оператор C к базисному вектору ej, тогда:
Cej= Aej+ Bej= | n | (aij+bij) ej |
∑ | ||
j= 1 |
Следовательно оператору C отвечает матрица ,где i=1,2. m, j=1,2. n, т.е.
3. Умножение линейных операторов
Пусть заданы три линейных пространства R, S и T. Пусть линейный оператор B отображает R в S, а линейный оператор A отображает S в T.
Определение 3. Произведением операторов A и B называется оператор C, для которого выполняется следующее равенство при любом x из R:
Произведение линейных операторов обозначается C=AB. Легко убедится, что произведение линейных операторов также является линейным оператором.
Таким образом оператор C отображает пространство R в T. Выберем в пространствах R, S и T базисы и обозначим через A, B и C матрицы операторов A, B и C соответствующие этим базисам. Тогда отображения линейных операторов A, B, C
можно записать в виде матричных равенств
где x, y, z − векторы x, y, z − представленные в виде координатных столбцов. Тогда
Учитывая произвольность х, получим
Следовательно произведению операторов C=AB соответствует матричное произведение C=AB.
4. Умножение линейного оператора на число
Пусть задан линейный оператор A отображающий R в S и некоторое число λ из поля K.
Определение 4. Произведением оператора A на число λ называется оператор C, для которого выполняется следующее равенство при любом x из R:
Таким образом оператор C отображает пространство R в S. Выберем в пространствах R и S базисы и обозначим через A матрицу оператора A соответствующее этим базисам векторные равенства
можно записать в виде матричных равенств
где x, y, z − векторы x, y, z − представленные в виде координатных столбцов. Тогда
Учитывая произвольность х, получим
Следовательно произведению оператора C на число λ соответствует произведение матрицы A на число λ.
5. Нулевой оператор
Оператор, отображающий все элементы пространства R в нулевой элемент пространства S называется нулевым оператором и обозначается через O. Действие нулевого оператора можно записать так:
6. Противоположный оператор
Противоположным оператору A называется оператор −A удовлетворяющий равенству:
7. Ядро линейного оператора
Определение 5. Ядром линейного оператора A называется множество всех тех элементов x пространства R, для которых выполняется следующее равенство: Ax=0.
Ядро линейного оператора также называют дефектом оператора. Ядро линейного оператора обозначается символом ker A.
8. Образ линейного оператора
Определение 6. Образом линейного оператора A называется множество всех элементов y пространства R, для которых выполняется следующее равенство: y=Ax для всех x из R.
Образ линейного оператора обозначается символом im A.
9. Ранг линейного оператора
Определение 7. Рангом линейного оператора A обозначаемое символом rang A называется число равное размерности образа im A оператора A, т.е.: rang A=dim(im A).
28. Линейные преобразования линейного пространства
Определение 35. Линейным преобразованием Линейного пространства называется линейный оператор данного линейного пространства самого в себя.
Всё, что было сказано о линейных операторах, очевидно, верно и для линейных преобразований, но некоторые формулы будут иметь более простой вид. Напомним формулы.
А = ,
Столбцы которой – координаты образов базисных векторов Е.
(35)
3. Связь столбцов координат вектора и его образа: Х1 = А×Х (36)
Определение 36. Квадратные матрицы А И В Называются Подобными, если существует такая квадратная невырожденная матрица С, что В = С–1×А×С.
5. Матрицы, задающие линейное преобразование в разных базисах, подобны.
6. Теорема 35. Для любых двух подобных матриц А И В Одного и того же порядка N Над полем Р и любого линейного пространства Ln над полем Р в Ln существуют такие базисы Е И Е1, что данные матрицы будут задавать в этих базисах одно и то же линейное преобразование.
Доказательство. Пусть В = С–1×А×С. Зафиксируем в Ln какой-нибудь базис. Матрица А В этом базисе задаёт линейное преобразование (пусть это J). Так как матрица С Невырожденная, то С–1 Может быть матрицей перехода. Пусть Е1 = Е×С–1. Тогда преобразование J в базисе Е1 Будет иметь матрицу С–1×А×(С–1 )–1 = С–1×А×С = В.
9. Пространство Ln* изоморфно линейному пространству квадратных матриц порядка N с элементами из поля Р. Следовательно, dim (Ln* ) = N2.
Глава 7. Матричные преобразования
Содержание главы
Структура Matrix3D реализует математическую сущность, которой примерно в середине XIX столетия английским математиком Джеймсом Джозефом Сильвестром (1814-1897) было дано имя «матрица». Тот факт, что графические преобразования зачастую выражаются в виде матриц, объясняется тем, что матричная алгебра позволяет легко оперировать такими преобразованиями. Например, составные преобразования эквивалентны умножению матриц, а обратные преобразования — обращению матриц. Предполагаю, что, получая образование, вы уже встречались с матрицами, но, на случай если вы их слегка подзабыли, я приведу краткий обзор.
Существуют разные способы подразделения преобразований на категории. И по мере того, как эти категории будут нам встречаться, я дам им определения. В своём рассказе о матрицах в этой главе я сперва сфокусируюсь на линейных преобразованиях, затем на аффинных и, наконец, на неаффинных. Если поначалу покажется, что я в своём изложении что-то опускаю, пребывайте в уверенности, что это будет рассмотрено в своё время.
Линейные преобразования
В математике функция f называется линейной, если для переменных x и y и константы k справедливы следующие соотношения:
f(x + y) = f(x) + f(y)
f(kx) = kf(x)
Применительно к трёхмерной графике, такая функция f вполне может выражать преобразование, а значениями переменных x и y в этом случае будут скорее не числа, а точки или векторы в трёхмерном пространстве. На самом деле, легче мыслить в терминах векторов, нежели точек, потому что векторы можно складывать или умножать на константу, а для точек эти понятия не имеют смысла.
Итак, с математической точки зрения преобразование путём масштабирования является линейным. И преобразование путём поворота — линейно. Другие виды преобразований (например, такое как сдвиг или скос) тоже линейны. Однако перемещение — в каком-то смысле, простейшее из всех преобразований — не является линейным. К счастью, эта небольшая проблема влечёт за собой решение, сулящее и другие выгоды.
Обзор матричной алгебры
Матрица — это прямоугольная таблица чисел с фиксированным количеством строк и столбцов. Матрица 3×4 имеет три строки и четыре столбца.
Две матрицы можно складывать или вычитать одну из другой путём сложения или вычитания соответствующих элементов (то есть поэлементно). Можно умножить матрицу на скаляр (одно число) путём умножения каждого элемента на этот скаляр.
A × B = C
Произведение определено только в том случае, если число столбцов матрицы А равно числу строк матрицы В. При этом матрица-произведение C имеет столько же строк, сколько у матрицы A, и столько же столбцов, сколько у матрицы B. А каждый элемент матрицы C может быть рассчитан по следующей формуле (в которой N — это число столбцов матрицы A или строк матрицы B):
Я уже заполнил элементы матрицы-произведения. Как видите, количество столбцов первой матрицы (три) совпадает с количеством строк второй матрицы. Матрица-произведение содержит столько же строк, сколько первая матрица (две), и столько же столбцов, сколько вторая (четыре).
Начните с первой строки первой матрицы, содержащей числа 2, 3 и 4. Поверните её в уме так, чтобы она стала вертикальной. Поставьте её рядом с первым столбцом второй матрицы (числа 1, 4 и 2). Перемножьте соответствующие числа и сложите результаты: 2, умноженное на 1, плюс 3, умноженное на 4, плюс 4, умноженное на 2, что равняется 22. Это число помещается на пересечении первой строки и первого столбца матрицы-результата. Продолжайте выполнять описанные операции, используя первую строку первой матрицы и, последовательно, второй, третий и четвёртый столбцы второй матрицы, чтобы заполнить первую строку матрицы-результата. Теперь возьмите вторую строку первой матрицы: числа 7, 5 и 3. Снова, поверните её набок и перемножьте с первым столбцом второй матрицы: 7, умноженное на 1, плюс 5, умноженное на 4, плюс 3, умноженное на 2, что равняется 33. Это — результат для первого столбца второй строки. Теперь продолжайте поэлементно умножать вторую строку первой матрицы на второй, третий и четвёртый столбцы второй матрицы, чтобы заполнить оставшиеся столбцы второй строки матрицы-результата.
Вообще, умножение матриц некоммутативно. Другими словами, произведение A × B не обязательно равно B × A. Это очевидно из предыдущего примера, потому что число столбцов первой матрицы должно быть равно числу строк второй матрицы, а это правило не будет выполняться, если мы поменяем матрицы местами. Но, даже если бы матрицы были квадратными (то есть имели бы одинаковое число строк и столбцов), операция умножения матриц, как правило, не будет коммутативной. Тем не менее, умножение матриц ассоциативно: в произведении A × B × C не важно, какое умножение произвести в первую очередь. Умножение матриц также является дистрибутивным относительно сложения:
A × (B + C) = A × B + A × C
Матрицы и преобразования
Линейное преобразование может быть представлено в виде матрицы 3×3:
Исходная точка (x; y; z) преобразуется в новую точку (x’; y’; z’) согласно следующим формулам, вытекающим из правила умножения матриц:
x’ = M11 • x + M21 • y + M31 • z
y’ = M12 • x + M22 • y + M32 • z
z’ = M13 • x + M23 • y + M33 • z
(Должен отметить, что в некоторых книгах, посвящённых компьютерной графике, это умножение матриц показано немного по-другому: строки и столбцы матрицы преобразования меняются местами, что требует представления преобразуемой точки в виде матрицы-столбца 3×1, который помещают справа от матрицы преобразования при записи произведения. И, хотя такая запись имеет некоторые преимущества, я буду придерживаться правила, вытекающего из имён свойств структуры Matrix3D).
x’ = (x; y; z) ∙ (M11; M21; M31)
y’ = (x; y; z) ∙ (M12; M22; M32)
z’ = (x; y; z) ∙ (M13; M23; M33)
Такой подход к интерпретации преобразований является весьма полезным.
Использование класса MatrixTransform3D (трёхмерное матричное преобразование)
В этой разметке представлены свойства структуры Matrix3D с их заданными по умолчанию значениями, наглядно расположенными в виде массива. В приведённом далее содержимом файла LinearTransformExperimenter.xaml можно найти подобный элемент Matrix3D, с которым можно поэкспериментировать.
Содержащийся в файле код отображает простой трёхмерный домик, размещённый на координатной плоскости XY. Ширина этого домика составляет одну единицу, высота — тоже одну единицу, глубина — две единицы, а оси X и Z обе проходят под центром домика. Ортографическая камера (объект OrthographicCamera ) направлена на фасад дома так, что сперва виден только его торец, но, при помощи двух полос прокрутки, можно подобрать иную, лучшую, точку обзора.
Также можно вращать фигуру вокруг осей X, Y и Z. Поворот вокруг оси Z требует следующей матрицы преобразования:
Формулы преобразования имеют следующий вид:
x’ = x • cos(θ) – y • sin(θ)
y’ = x • sin(θ) + y • cos(θ)
z’ = z
Эти формулы подобны формулам для получения окружности, с которыми мы встречались в предыдущей главе. Для поворота на 30 градусов вокруг оси Z потребуются следующие значения:
И вот результат (если смотреть, немного сбоку):
Поворот вокруг оси X выражается следующей матрицей:
Наконец, вращение вокруг оси Y задаётся так:
Поворот вокруг произвольной оси — вектора (x; y; z) — задаётся более громоздко, но если такой вопрос у вас возник, то приведём матрицу и для него (для упрощения синтаксиса скобки вокруг операндов тригонометрических функций опущены):
Это — практически единичная матрица. Единственное отличие — в ещё одном равном единице элементе. Так что формула для x’ принимает вид:
Для точек, находящихся выше плоскости XZ, по мере роста высоты над плоскостью, значения координаты x возрастают (точки смещаются в сторону положительного направления оси X). В то же время точки, находящиеся ниже этой плоскости, смещаются в сторону отрицательного направления оси X вследствие уменьшения значения координаты x по мере увеличения расстояния до плоскости XZ. Домик наклоняется:
Можно сдвигать домик в самых разных направлениях, задавая отличные от нуля значения для нулевых элементов матрицы. Вот, например, такой вариант:
Значения z оставлены неизменёнными, а значения x и y смещаются в зависимости от значения z :
x’ = x + 1,25 z
y’ = y + 0,5 z
Например, для множества точек, у которых координата z равна 1 (что соответствуют плоскости, проходящей через фасад домика), формулы преобразования примут вид:
x’ = x + 1,25
y’ = y + 0,5
И вот как это выглядит:
Постарайтесь на какое-то время сохранить в памяти это изображение. Вскоре оно может оказаться полезным.
Чего-то не хватает в этом описании матрицы линейного преобразования. Действительно, может вызывать беспокойство тот факт, что мы, выработав математический аппарат, позволяющий выразить преобразования масштабирования, поворота и сдвига, а также любые комбинации этих преобразований, тем не менее, не можем с его помощью выразить простое преобразование перемещения.
Преобразования масштабирования, поворота и сдвига всегда производятся пропорционально по отношению к исходной фигуре. Неважно, насколько велика или мала фигура, — если она масштабируется с коэффициентом 2, она всегда удваивается в размерах. Иначе говоря, координаты точек фигуры в процессе преобразования умножаются на некоторый постоянный коэффициент. Однако перемещение математически производится иначе. Оно основано на сложении, а не на умножении. И поэтому в его основе лежат реальные единицы измерения, а не безразмерные коэффициенты.
Есть ли способ включить перемещение в удобную матрицу, разработанную нами для других типов преобразования?
Да, эта задача имеет решение, но оно не является интуитивно понятным. И, даже если вы знаете, как это делается, логика, стоящая за этим способам, может оказаться незнакомой вам.
Аффинные преобразования и выход за их пределы
Тот тип преобразований, к которому относятся перемещение, масштабирование, поворот и сдвиг, известен под именем аффинных преобразований. Слово «аффинный» происходит от латинского «affinis», означающего «родственный», но в математике оно обычно относится к чему-либо, остающемуся конечным, то есть конкретно определённым. Это значит, что аффинное преобразование никогда не преобразует точку, имеющие конечные координаты в трёхмерном пространстве, в точку, у которой хотя бы одна координата стала бы равна бесконечности. Конечно, это очень широкое определение, поэтому если говорить конкретно о преобразованиях, то аффинными среди них, в основном, являются все линейные преобразования, а также, в дополнение к ним, преобразование перемещения.
Поиск способа выражения аффинных преобразований в трёхмерном пространстве матричном виде будет существенно облегчен, если мы вернёмся в относительный комфорт двухмерного пространства.
Двухмерная аналогия
В двух измерениях (то есть на плоскости) линейные преобразования могут быть представлены матрицей 2×2:
Формулы преобразования имеют следующий вид:
x’ = M11 • x + M21 • y
y’ = M12 • x + M22 • y
Эти формулы преобразования позволяют осуществлять масштабирование, поворот и сдвиг, но, как и формулы линейных преобразований в трёхмерном пространстве, не позволяют осуществлять перемещение. Ниже представлены три изображения небольшого двухмерного домика, помещённого в начало координат:
На втором изображении масштаб домика увеличен на 50% в направлении оси Y, а третье изображение представляет этот домик повёрнутым на 45 градусов по часовой стрелке вокруг начала координат. Но перемещение невозможно осуществить с помощью матрицы 2×2.
Этот двухмерный домик фактически идентичен передней грани (фасаду) трёхмерного домика, отображавшегося кодом из файла LinearTransformExperimenter.xaml. Единственное отличие заключается в том, что все координаты увеличены в 100 раз, поскольку такие величины лучше подходят для двухмерной системы координат WPF, базирующейся на разрешении 96 единиц на 1 дюйм.
Достаточно любопытно, но вы уже видели пример перемещения двухмерного домика. Фасад того трёхмерного домика, который мы рассматривали ранее в этой главе, и является этим двухмерным домиком. В последнем показанном мною примере сдвига, преобразование перемещает фасад домика в сторону от начала координат, но, при этом, не вносит никаких искажений в содержащую этот фасад плоскость:
Плоскость фасада этого трёхмерного домика, имеющая координату Z равную единице, таким образом фактически перемещается в сторону от начала координат на расстояние, определяемое коэффициентами сдвига, заданными в качестве элементов M31 и M32 матрицы преобразования:
Из этой матрицы следуют следующие формулы преобразования:
x’ = x + 1,25 z
y’ = y + 0,5 z
z’ = z
Но, если нас интересует только плоскость, у которой координата z равна 1, то формулы преобразования сократятся до формул перемещения по x и y :
x’ = x + 1,25
y’ = y + 0,5
Это серьёзное открытие: трёхмерный сдвиг, задаваемый элементами M31 и M32 матрицы преобразования, фактически перемещает двухмерные объекты по плоскости, координата z которой равна 1. Это — ключ к применению преобразования перемещения в двухмерной графике. Всегда, когда мы рисуем на плоскости, мы можем фактически представить это как рисование в трёхмерном пространстве. Концептуально это выглядит как изображение двухмерных фигур на плоскости, расположенной в трёхмерном пространстве, причём такой плоскости, что координаты z всех точек, образующих эту плоскость, были бы равны 1. На следующем рисунке эта плоскость показана в виде серой полупрозрачной поверхности:
Концептуально, для целей умножения матриц, все точки с координатами (x; y) представляются в виде (x; y; 1) :
Формулы преобразования имеют вид:
x’ = M11 • x + M21 • y + OffsetX
y’ = M12 • x + M22 • y + OffsetY
Что можно сказать о третьем столбце этой матрицы 3×3? При использовании подобной матрицы линейных преобразований третьего порядка в мире трёхмерных координат этот столбец применяется при масштабировании в направлении оси Z или же при вращении вокруг чего-либо за исключением оси Z. Но в двухмерной графике этот столбец, кажется, не несёт никакой полезной нагрузки.
Давайте на миг представим, что у нас есть возможность задавать значения элементов третьего столбца матрицы и что двухмерное преобразование на самом деле выглядит так:
В этом случае формулы преобразования примут вид:
x’ =M11 • x + M21 • y + OffsetX
y’ =M12 • x + M22 • y + OffsetY
z’ =M13 • x + M23 • y + M33
Простейшим решением будет поделить все три координаты на z’ :
Теперь мы снова имеем точку на плоскости, у которой координата z равна 1. Однако мы привнесли возможность весьма опасного исхода: деление, применённое в этой операции, вполне может оказаться делением на ноль. Это означает, что в результате преобразования координата точки может стать равной бесконечности. Именно возможность получить в результате бесконечность делает это преобразование неаффинным. Ведь по определению, аффинные преобразования — это те, в результате которых координаты не обращаются в бесконечность.
Этот конкретный вид неаффинных преобразований, который я здесь описываю, иногда называют конусным преобразованием, поскольку оно не сохраняет параллельность линий и, вместо этого, сужает фигуру с одной стороны и расширяет с другой. Например, рассмотрим следующую двухмерную матрицу неаффинного преобразования:
Значение элемента M13 равное –0,01 представляется незначительным, но оно оказывает большое влияние на двухмерную графику в координатной системе, основанной на разрешении 96 единиц на дюйм. Формулы преобразования выглядят так:
x’ = x
y’ = y
z’ = 1 – 0.01x
Точка (x; y) переходит в следующую точку:
Когда x равен 100, знаменатель дроби обращается в ноль, а координата становится равной бесконечности. К счастью, значения абсцисс точек маленького двухмерного домика ограничены интервалом от –50 до 50, то есть знаменатель принимает значения от 1,5 до 0,5. Вот как выглядит преобразованная версия домика:
Часть фигуры, расположенная правее начала координат стала больше, так как увеличились значения координат составляющих её точек, в то время как часть фигуры, расположенная слева от начала координат, по той же причине стала меньше. Если это хоть как-то напоминает эффект перспективы, то вы, кончено, уже предполагаете, как можно использовать эту схожесть.
Когда вы создаёте представление для точки с двухмерными координатами (x; y) при помощи дополнительной третьей координаты, вы используете концепцию однородных координат, разработанную немецким математиком Августом Фердинандом Мёбиусом (1790–1868), наиболее известным сегодня в связи с топологическим парадоксом, называемом петля Мёбиуса. В трёхмерном пространстве однородные координаты полезны не только для выражения перемещений, но также играют важную роль в описании перспективы.