Заметим, что для полного понимания сути дела требуются некоторые знания матричной алгебры и аналитической
геометрии, но для тех, кто с этим ещё не знаком, мы выпишем формулы, которые можно использовать в программе.
Простейшие матричные операции - умножение матрицы на число (состоит в умножении каждого элемента
матрицы на это число) и сложение матриц одинакового размера (состоит в сложении соответствующих
элементов матриц) - мы формулами описывать не будем.
Напомним формулу умножения матриц. Здесь она записана для матриц размера
, но легко переносится
на матрицы любого размера:
Необходима также формула для вычисления обратной матрицы:
В этой формуле - определитель заданной матрицы, - алгебраические дополнения, - миноры (получаются вычёркиванием из заданной матрицы -той строки и -того столбца). Определители второго и третьего порядка вычисляются по следующим формулам:
Наконец, пригодится и понятие транспонированной матрицы:
Мы будем далее предполагать, что в пространстве задана декартова система координат
. В такой системе координат
точки задаются тройками чисел
, которые нам будет
удобно записывать в виде столбцов вида
.
Нас будут интересовать так называемые аффинные преобразования пространства. Это такие преобразования,
при которых все прямые преобразуются снова в прямые. Оказывается, что все такие преобразования можно записать
формулами вида
где - координаты исходной точки; те же буквы со звёздочкой наверху обозначают координаты точки, которая получается в результате преобразования. Для компактной записи этих формул весьма полезно использовать матричные обозначения. Именно, определим матрицу и три столбца следующим образом:
Тогда приведённое выше преобразование можно записать в форме простого матричного равенства
. В дальнейшем
мы все преобразования будем записывать в такой форме, указывая при необходимости вид матрицы
.
Самым простым преобразованием такого вида является параллельный сдвиг на вектор
, который определяется формулой
. Матрица
в этом случае совпадает с
единичной матрицей
.
Сдвиг на ненулевой вектор не имеет неподвижных точек.
В общем случае можно определить, имеет ли преобразование неподвижные точки, решая систему уравнений
, где
- единичная матрица. Заметим,
что если матрица
невырожденная, то есть, её определитель не равен
, то эта система имеет единственное
решение ,
так что преобразование имеет единственную неподвижную точку.
Если вектор нулевой, то
преобразование имеет вид
. Такое
преобразование оставляет неподвижным начало координат
.
Если мы уже нашли преобразование нужного вида (с матрицей
), оставляющее неподвижным начало
координат, то очень легко найти преобразование такого же вида, оставляющее неподвижной заданную точку
. Такое преобразование будет
иметь вид .
Поэтому в дальнейшем мы будем ограничиваться преобразованиями, оставляющими неподвижным именно начало кординат, то
есть, преобразованиями вида
.
Другой простейший тип преобразований - растяжения (сжатия) вдоль прямой. Растяжение вдоль оси
в
раз задаётся,
соответственно, матрицей
(при получается сжатие). Растяжение одновременно по всем осям (вообще говоря, в разное число раз) задаётся матрицей
Если все диагональные элементы в этой матрице одинаковые, то получается равномерное растяжение (сжатие), то есть,
преобразование подобия.
Более сложным является вопрос о том, как получить растяжения в заданное число раз вдоль трёх заданных прямых,
не параллельных одной плоскости.
Для этого на каждой из прямых возьмём ненулевой вектор
и составим из этих
векторов матрицу .
Тогда матрицу растяжения можно записать в виде
Симметрии относительно плоскостей , осей и точки (начала координат) задаются матрицами
Симметрии относительно произвольных плоскостей и прямых можно получить по той же формуле, что и растяжения,
взяв в качестве
нужную комбинацию чисел и
. Однако если мы хотим, чтобы
полученное преобразование было действительно симметрией нужного вида, векторы
, для которых
,
должны быть перпендикулярны, то есть, их скалярное произведение должно быть равно
:
.
При отыскании нужных векторов полезно иметь в виду, что вектор с координатами
перпендикулярен плоскости
.
В частности, матрица симметрии относительно плоскости
имеет вид
Более сложным классом преобразований являются движения, то есть, преобразования, сохраняющие расстояния между
точками. Матрица , определяющая
движение, является ортогональной, то есть, удовлетворяет условию
. Это
означает, что обратная матрица должна совпадать с транспонированной.
Все движения можно разбить на две группы: собственные движения, которые являются комбинациями вращений и
сдвигов и характеризуются тем, что определитель матрицы
равен
, и несобственные движения,
которые включают дополнительно симметрию относительно плоскости или точки и характеризуются тем, что определитель
матрицы равен
.
Заметим, что симметрию относительно прямой можно рассматривать как вращение вокруг этой прямой на угол
, так что такие симметрии
являются собственными движениями.
Собственные движения, имеющие неподвижную точку, называются вращениями. Как мы и договорились, будем
предполагать, что эта неподвижная точка совпадает с началом координат
.
Самый простой случай - поворот вокруг оси координат на заданный угол. Матрица поворота на угол
вокруг оси
соответственно имеет следующий вид:
(положительным направлением поворота считается направление от
к
, от
к
, от
к
).
Получить матрицу произвольного поворота можно различными способами. Самый простой - перемножить
приведённые выше матрицы в произвольном порядке, например, в том, в котором они перечислены (результат зависит от
порядка матриц):
В математике, однако, для задания произвольного поворота пользуются углами Эйлера , которые определяются следующим образом: сначала выполняется поворот вокруг оси на угол , затем - вокруг оси на угол , потом - снова вокруг оси , но на угол . Вычисляя произведение матриц
получим матрицу
В заключение статьи приведём матрицу поворота на заданный угол вокруг прямой с направляющим вектором , проходящей через начало координат:
Положительным (если смотреть "навстречу" вектору
) здесь считается
направление поворота, совпадающее с направлением поворота от оси
к оси
(если смотреть
"навстречу" оси
).
Чтобы получить симметрию относительно плоскости, не проходящей через начало координат, или вращение
вокруг прямой, не проходящей через начало координат, нужно взять какую-нибудь точку
в этой плоскости или прямой, и
воспользоваться рассмотренным выше методом, позволяющим сдвинуть неподвижную точку из начала
координат в заданное место.
Если у Вас возникнут какие-либо вопросы, Если вопросов будет много, мы, возможно, сделаем на сайте раздел вопросов и ответов.