Задача вращения относительно произвольной оси
Вращение относительно произвольной оси также можно реализовать посредством умножения матрицы на вектор, но предварительно эту матрицу надо построить. Предположим, что прямая проходит через начало координат и задана единичным вектором , и требуется выполнить поворот точки на угол относительно нее. Для этого воспользуемся следующим алгоритмом.
I. Совместим прямую с осью OZ посредством поворота системы координат относительно оси OX на угол , а затем поворота относительно оси OY на угол .
II. Выполним поворот относительно оси OZ на угол .
III. Выполним повороты системы сначала относительно оси OY на угол , а затем относительно оси OX на угол (в обратном порядке по отношению к первым поворотам), тем самым возвращая ее в исходное положение.
Итоговая матрица преобразования таким образом является произведением нескольких матриц, а именно
.
Матрицы являются матрицами преобразования координат при поворотах системы координат, как было показано в предыдущем разделе. Определим сначала угол , который является углом между осью OZ и его проекцией вектора на плоскость YOZ . Пусть — длина этой проекции. Тогда , (синус отрицателен, поскольку поворот идет от оси OZ к оси OY, т. е. в отрицательном направлении). После поворота системы координат новыми координатами вектора будут . Угол — это угол между векторами и , поэтому , . Теперь мы можем выписать вид матриц преобразования координат для каждого шага алгоритма, учитывая то, что матрицы преобразования координат при повороте системы координат обратны по отношению соответствующим матрицам вращения.
.
Нетрудно убедиться, что последовательное умножение матриц и на вектор дадут в результате вектор , т. е. этот вектор действительно станет осью аппликат.
Остается только выписать окончательный вид матрицы (для сокращения записи введем следующие обозначения: , , ):
. (2.21)
Напомним, что являются направляющими косинусами прямой, относительно которой выполняется поворот. Нетрудно убедиться, что если в качестве осей вращения взять оси координат, то мы в точности получим формулы (2.18).
|