2.7. Поворот вокруг произвольной оси в пространстве
Обобщенный случай поворота вокруг произвольной оси в пространстве встречается часто, например в робототехнике, мультипликации, моделировании. Следуя логике предьщущего обсуждения, поворот вокруг произвольной оси в пространстве выполняется с помощью переноса и простых поворотов вокруг координатных осей. Так как метод поворота вокруг координатной оси известен, то основная идея заключается в том, чтобы совместить произвольную ось вращения с одной из координатных осей.
Предположим, что произвольная ось в пространстве проходит через точку (x0, y0, z0) с направляющим вектором (cx, cy, cz). Поворот вокруг этой оси на некоторый угол δ выполняется по следующему правилу:
- выполнить перенос так, чтобы точка (x0, y0, z0) находилась в начале системы координат;
- выполнить соответствующие повороты так, чтобы ось вращения совпала с осью z (выбор координатной оси в данном случае произволен);
- выполнить поворот на угол δ вокруг оси z;
- выполнить преобразование, обратное тому, что позволило совместить ось вращения с осью z;
- выполнить обратный перенос.
В общем случае для того, чтобы произвольная ось, проходящая через начало координат, совпала с одной из координатных осей, необходимо сделать два последовательных поворота вокруг двух других координатных осей. Для совмещения произвольной оси вращения с осью z сначала выполним поворот вокруг оси x, а затем вокруг оси y. Чтобы определить угол поворота α вокруг оси х, используемый для перевода произвольной оси в плоскость хz, спроецируем сначала на плоскость yz направляющий единичный вектор этой оси (рис. 2.1,а). Компоненты y и z спроецированного вектора равны cy- и cz-компонентам единичного направляющего вектора оси вращения.
Из рис. 1.8,а следует, что
|
(2.1) |
и
|
(2.2) |
После перевода в плоскость хz с помощью поворота вокруг оси х, z-компонента единичного вектора равна d, а x-компонента равна cx, т.е. x-компоненте направляющего вектора, как это показано на рис. 2.1,b. Длина единичного вектора равна, конечно, 1. Таким образом, угол поворота α вокруг оси y, необходимый для совмещения произвольной оси с осью z, равен
Тогда полное преобразование модсно представить в виде
где матрица переноса равна
[T] = | 1 0 0 0 0 1 0 0 0 0 1 0 -x0 -y0 -z0 1 |
||
Матрица преобразования поворота вокруг оси х
[Rx] = | 1 0 0 0 0 cosθ sinθ 0 0 -sinθ cosθ 0 0 0 0 1 |
= | 1 0 0 0 0 cz/d cy/d 0 0 -cy/d cz/d 0 0 0 0 1 |
||||
и вокруг оси y
[Ry] = | cos(-β) 0 -sin(-β) 0 0 1 0 0 sin(-β) 0 cos(-β) 0 0 0 0 1 |
= | d 0 cx 0 0 1 0 0 -cx 0 d 0 0 0 0 1 |
||||
И, наконец, вращение вокруг произвольной оси задается матрицей поворота вокруг оси z
[Rδ] = | cosδ sinδ 0 0 -sinδ cosδ 0 0 0 0 1 0 0 0 0 1 |
||
На практике углы α и β не вычисляются явным образом. Элементы матриц поворотов [Rx] [Ry] в (2.4) получаются из уравнений (2.1)-(2.3) за счет выполнения двух операций деления и извлечения квадратного корня. Хотя данные результаты были разработаны для произвольной оси в первом квадранте, они применимы во всех квадрантах.
Если компоненты направляющего вектора произвольной оси неизвестны, то зная вторую точку (x1, y1, z1) на оси, их можно определить, нормализовав вектор, соединяющий первую и вторую точки. Более точно вектор оси из (x0, y0, z0) в (x1, y1, z1) равен
Нормализация дает компоненты направляющего вектора:
[cx cy cz] = | [(x1 - x0) (y1 - y0) (z1 - z0)] [(x1 - x0)2 + (y1 - y0)2 + (z1 - z0)2]1/2 |