Transformations

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

Someone

Заметим, что для полного понимания сути дела требуются некоторые знания матричной алгебры и аналитической геометрии, но для тех, кто с этим ещё не знаком, мы выпишем формулы, которые можно использовать в программе. Простейшие матричные операции - умножение матрицы на число (состоит в умножении каждого элемента матрицы на это число) и сложение матриц одинакового размера (состоит в сложении соответствующих элементов матриц) - мы формулами описывать не будем.
Напомним формулу умножения матриц. Здесь она записана для матриц размера 3x3, но легко переносится на матрицы любого размера:

Формула умножения матриц порядка 3

Необходима также формула для вычисления обратной матрицы:

Обратная матрица порядка 3

В этой формуле D - определитель заданной матрицы, Aij - алгебраические дополнения, Mij - миноры (получаются вычёркиванием из заданной матрицы i-той строки и j-того столбца). Определители второго и третьего порядка вычисляются по следующим формулам:

Определители

Наконец, пригодится и понятие транспонированной матрицы:

Транспонирование

Мы будем далее предполагать, что в пространстве задана декартова система координат Oxyz. В такой системе координат точки задаются тройками чисел (x,y,z), которые нам будет удобно записывать в виде столбцов вида Столбец.

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

Преобразование

где (x,y,z) - координаты исходной точки; те же буквы со звёздочкой наверху обозначают координаты точки, которая получается в результате преобразования. Для компактной записи этих формул весьма полезно использовать матричные обозначения. Именно, определим матрицу и три столбца следующим образом:

Обозначения

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

Самым простым преобразованием такого вида является параллельный сдвиг на вектор r0, который определяется формулой Сдвиг. Матрица A в этом случае совпадает с единичной матрицей Единичная матрица.

Сдвиг на ненулевой вектор не имеет неподвижных точек.
В общем случае можно определить, имеет ли преобразование неподвижные точки, решая систему уравнений Неподвижные точки, где E - единичная матрица. Заметим, что если матрица E-A невырожденная, то есть, её определитель не равен 0, то эта система имеет единственное решение Неподвижная точка, так что преобразование имеет единственную неподвижную точку.

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

Другой простейший тип преобразований - растяжения (сжатия) вдоль прямой. Растяжение вдоль оси Ox, Oy, Oz в lambda раз задаётся, соответственно, матрицей

Растяжение

(при lambda меньше 1 получается сжатие). Растяжение одновременно по всем осям (вообще говоря, в разное число раз) задаётся матрицей

Растяжение

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

Растяжение

Симметрии относительно плоскостей Oyz, Ozx, Oxy, осей Ox, Oy, Oz и точки O (начала координат) задаются матрицами

Симметрии

Симметрии относительно произвольных плоскостей и прямых можно получить по той же формуле, что и растяжения, взяв в качестве lambdaj нужную комбинацию чисел 1 и -1. Однако если мы хотим, чтобы полученное преобразование было действительно симметрией нужного вида, векторы Векторы, для которых lambdai не равно lambdaj, должны быть перпендикулярны, то есть, их скалярное произведение должно быть равно 0: Скалярное произведение.
При отыскании нужных векторов полезно иметь в виду, что вектор с координатами {A,B,C} перпендикулярен плоскости Ax+By+Cz+D=0.
В частности, матрица симметрии относительно плоскости Ax+By+Cz=0 имеет вид

Симметрия

Более сложным классом преобразований являются движения, то есть, преобразования, сохраняющие расстояния между точками. Матрица A, определяющая движение, является ортогональной, то есть, удовлетворяет условию Условие ортогональности. Это означает, что обратная матрица должна совпадать с транспонированной.
Все движения можно разбить на две группы: собственные движения, которые являются комбинациями вращений и сдвигов и характеризуются тем, что определитель матрицы A равен 1, и несобственные движения, которые включают дополнительно симметрию относительно плоскости или точки и характеризуются тем, что определитель матрицы A равен -1.
Заметим, что симметрию относительно прямой можно рассматривать как вращение вокруг этой прямой на угол 180, так что такие симметрии являются собственными движениями.

Собственные движения, имеющие неподвижную точку, называются вращениями. Как мы и договорились, будем предполагать, что эта неподвижная точка совпадает с началом координат O.
Самый простой случай - поворот вокруг оси координат на заданный угол. Матрица поворота на угол alpha, beta, gamma вокруг оси Ox, Oy, Oz соответственно имеет следующий вид:

Вращения

(положительным направлением поворота считается направление от Oy к Oz, от Oz к Ox, от Ox к Oy).
Получить матрицу произвольного поворота можно различными способами. Самый простой - перемножить приведённые выше матрицы в произвольном порядке, например, в том, в котором они перечислены (результат зависит от порядка матриц):

Вращение

В математике, однако, для задания произвольного поворота пользуются углами Эйлера phi, theta, psi, которые определяются следующим образом: сначала выполняется поворот вокруг оси Oz на угол phi, затем - вокруг оси Ox на угол theta, потом - снова вокруг оси Oz, но на угол psi. Вычисляя произведение матриц

Произведение матриц вращений

получим матрицу

Вращение

В заключение статьи приведём матрицу поворота на заданный угол delta вокруг прямой с направляющим вектором {l,m,n}, проходящей через начало координат:

Вращение

Положительным (если смотреть "навстречу" вектору {l,m,n}) здесь считается направление поворота, совпадающее с направлением поворота от оси Ox к оси Oy (если смотреть "навстречу" оси Oz).

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

Если у Вас возникнут какие-либо вопросы, Если вопросов будет много, мы, возможно, сделаем на сайте раздел вопросов и ответов.

Hosted by uCoz