2.7. Поворот вокруг произвольной оси в пространстве

Обобщенный случай поворота вокруг произвольной оси в пространстве встречается часто, например в робототехнике, мультипликации, моделировании. Следуя логике предьщущего обсуждения, поворот вокруг произвольной оси в пространстве выполняется с помощью переноса и простых поворотов вокруг координатных осей. Так как метод поворота вокруг координатной оси известен, то основная идея заключается в том, чтобы совместить произвольную ось вращения с одной из координатных осей.

Предположим, что произвольная ось в пространстве проходит через точку (x0, y0, z0) с направляющим вектором (cx, cy, cz). Поворот вокруг этой оси на некоторый угол δ выполняется по следующему правилу:

 

  1. выполнить перенос так, чтобы точка (x0, y0, z0) находилась в начале системы координат;
  2. выполнить соответствующие повороты так, чтобы ось вращения совпала с осью z (выбор координатной оси в данном случае произволен);
  3. выполнить поворот на угол δ вокруг оси z;
  4. выполнить преобразование, обратное тому, что позволило совместить ось вращения с осью z;
  5. выполнить обратный перенос.

В общем случае для того, чтобы произвольная ось, проходящая через начало координат, совпала с одной из координатных осей, необходимо сделать два последовательных поворота вокруг двух других координатных осей. Для совмещения произвольной оси вращения с осью z сначала выполним поворот вокруг оси x, а затем вокруг оси y. Чтобы определить угол поворота α вокруг оси х, используемый для перевода произвольной оси в плоскость хz, спроецируем сначала на плоскость yz направляющий единичный вектор этой оси (рис. 2.1,а). Компоненты y и z спроецированного вектора равны cy- и cz-компонентам единичного направляющего вектора оси вращения.

Из рис. 1.8,а следует, что

 

d =
cy2 + cz2
  
      (2.1)

и

 
cosα = cz

d
      sinα = cy

d
 
      (2.2)

 

После перевода в плоскость хz с помощью поворота вокруг оси х, z-компонента единичного вектора равна d, а x-компонента равна cx, т.е. x-компоненте направляющего вектора, как это показано на рис. 2.1,b. Длина единичного вектора равна, конечно, 1. Таким образом, угол поворота  α вокруг оси y, необходимый для совмещения произвольной оси с осью z, равен

 

cosβ = d     sinβ = cx      (2.3)

Тогда полное преобразование модсно представить в виде

 

[М] = [Т] [Rx] [Ry] [Rδ] [Ry]-1[Rx]-1[T]-1      (2.4)

где матрица переноса равна

   
[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) равен

 

[V] = [(x1 - x0) (y1 - y0) (z1 - z0)].

Нормализация дает компоненты направляющего вектора:

[cx  cy  cz] = [(x1 - x0) (y1 - y0) (z1 - z0)]

[(x1 - x0)2 + (y1 - y0)2 + (z1 - z0)2]1/2

 

Назад
Компьютерная графика © 2014 ОСУ ИК Вход