Главная » Информационные системы » Компьютерная геометрия и графика » Перенос и повороты в трехмерном пространстве.

Перенос и повороты в трехмерном пространстве.

Перенос и повороты в трехмерном пространстве.

   Если каждая точка P(x, y, z) отображается на точку  P’ (x’, y, z’) в соответствии с уравнениями

 

где а1, а2, а3константы, то этот процесс называется переносом в трехмерном пространстве. Такой перенос может быть записан в матричной форме

[x’ y’ z’ 1] = [x y z 1] T

   T=

 

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

    Рассмотрим поворот вокруг  оси z  на угол  α и для сокращения обозначим cos α = c и   sin α = s. Тогда можно записать

[x’y’ z’]=[x y z] Rz

Rz

 

\

Матрицу Rz можно использовать для получения матриц Rx  и Ry, определяющих поворот вокруг соответствующих осей, чисто формальным образом, то есть без применения картинки. Это делается путем циклических перестановок, получаемых заменой каждой из букв x, y, z на последующую, считая, что за буквой z следует буква х.

Матрица Rz превращается в матрицу Rx циклическим переносом каждой строки на одну позицию и затем выполнением аналогичной операции для столбцов:

                  

                          

 
             

Так же матрица Rx преобразуется в «последующую» матрицу Ry

                   

 

Суммируя сказанное, получим следующие матрицы

Rx                   

Ry

Rz src=6-9.jpg      

 

\

Для поворота точки вокруг оси х на угол α матрица Rx используется следующим образом:

[x’ y’ z’] = [x y z] Rx

Матрицы Ry и Rz применяются аналогично.

Как известно, уравнения для преобразований могут интерпретироваться как изменения координат. Перенос точки на определенное расстояние вправо  описывает теми же уравнениями перенос системы координат на такое же расстояние влево. На практике удобнее перемещать координатную систему вместо точки, но для этого требуется инвертирование матрицы. Запишем для наших матриц соответствующие им инвертированные  матрицы.

Т-1 =src=6-10.jpg

 

Rx-1=src=6-11.jpg

 

Ry-1=src=6-12.jpg

 

Rz-1 =src=6-13.jpg

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

   Если концевая точка вектора v задана в ортогональных координатах, то сначала вычислим его сферические координаты src=6-14.jpg.

src=6-15.jpg

Если src=6-16.gif= 0, то будем считать, что  src=6-17.jpg. В противном случае

src=6-18.jpg

 

Возможно, Вы помните обратное вычисление

 src=6-19.jpg 

Теперь стратегия заключается в таком изменении системы координат, чтобы вектор v (ось вращения) совпадал с новым направлением  положительной полуоси z..

[x’ y’ z’] = [x y z] Rz-1

Rz-1 =src=6-20.jpg

\

Ось x’ определяет положительное направление вектора (v1, v2, 0).

Теперь повернем оси x’ и z’ вокруг  оси y’ на угол src=6-21.jpg до совпадения оси z’ с вектором v.

 

src=6-22.jpg

 

Перепишем это условие как

[x’’ y’’ z’’]=[x’ y’ z’] Ry-1

Ry-1=src=6-23.jpg

 

Фактический поворот вокруг вектора v на угол α теперь можно выполнить как поворот вокруг оси z’’ .То есть

 

[x’’’ y’’’ z’’’] =[x’’ y’’ z’’] Rv

 

Rv =src=6-24.jpg     

 

К этому моменту достигнуто выполнение соотношения

 

[x’’’ y’’’ z’’’] =[x y z] Rz-1 Ry-1 Rv

Координаты [x’’’ y’’’ z’’’]  относятся к самой последней системе координат, тогда как их необходимо выразить в исходной системе. Обозначим эти координаты в исходной системе через x*, y*, z*. Переход к исходной системе инвертированных матриц Rz-1  и Ry-1 ,(которые будут совпадать с матрицами Rz и Ry) в обратном порядке для преобразования точки x’’’, y’’’, z’’’:

[x* y* z*] =[x’’’ y’’’ z’’’] Ry Rz

Это означает, что полный поворот вокруг вектора v на угол α вычисляется по формуле

[x* y* z*] =[x’’’ y’’’ z’’’] Rz-1 Ry-1 Rv Ry Rz

где

Rz-1 =src=6-25.jpg

 

Ry-1 = src=6-26.jpg

R=  src=6-27.jpg      

 

Rysrc=6-28.jpg

 

Rz src=6-29.jpg      

 

Для последующего применения запишем

Rz-1 Ry-1 Rv Ry Rz =R =src=6-30.jpg

 

До сих пор мы говорили о повороте относительно вектора, привязанного к точке начала координат – точке О. Теперь поставим задачу определения поворота относительно вектора, начало которого расположено в любой произвольной точке А (а1, а2, а3). Для этого будем использовать вектор v для вычисления матрицы   R таким же образом, как и ранее. Затем нужно выполнить три следующих шага.

1.      Выполним перенос из заданной точки в точку начала координат О, используя однородные координаты и следующую матрицу:

         Т-1=src=6-31.jpg

 

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

R* =src=6-32.jpg

 

3. Применим преобразование, обратное шагу 1, используя матрицу

T=src=6-33.jpg

 

После этого матрица обобщенного поворота вычисляется как

              RGEN = T-1 R* T

И ее можно использовать следующим образом

[x* y* z* 1] = [x y z 1] RGEN


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Поделиться
Дисциплины