Вращение

Пусть объект поворачивается на угол 0 вокруг оси х мировой системы координат вместе со своей модельной системой, которая, как и в предыдущем случае, изначально совпадает с мировой (рис. 3.17). Мировые координаты точки объекта в новом положении (Хw, Yw, Zw) могут быть получены из исходных мировых координат этой точки (Хm, Ym, Zm), совпадающих с ее текущими координатами в модельной системе.

Соотношение между (Хw, Yw, Zw) и (Хm, Ym, Zm) становится очевидным после проецирования рис. 3.17 на плоскость yz. Результат проецирования показан на рис. 3.18.

 

Вращение

 
 

Вращение

 

Из рис. 3.18 можно легко получить следующие равенства:

 

Вращение

Вращение
 
Вращение
 
Равенства (3.5), (3.6) и (3.7) могут быть записаны в матричной форме:

 

Вращение
 

Матрица в правой части формулы (3.8) — это однородная матрица преобразования вращения вокруг оси x, которая кратко обозначается Rot,(x,θ). Подобно матрице трансляции, для двумерного объекта однородная матрица вращения редуцируется до размера 3x3/

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

 

Вращение

 

Вращение

 

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

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

 
 

PHIGS

 

ptranslate3(Pvector* offset3. Pint* errorjnd. Pratrix3 result3):

/* offset3: вектор трансляции
errorjnd: код ошибки

result3: вычисленная патрица преобразования' */

protate_x(Pfloat angle. Pint* error ind. Pmatrix3 result3):

protate_y(Pfloat angle. Pint* errorjnd. Pmatrix3 result3);
protate_z(Pfloat angle. Pint* errorjnd. Pmatrix3 result3):

/* angle: угол поворота
errorjnd: код ошибки

result3: вычисленная матрица преобразования */

 

OpenGL

glTranslated(GLdouble offset_x. GLdouble offset_y. GLdouble offset_z):

/* Умножает текущую матрицу на матрицу трансляции объекта со смещениями offset_x. offsetj и offset_z по соответствующим осям */

' В PHIGS матрица преобразования ставится после вектора-строки.

 
glRotated(GLdouble angle. GLdouble х. Gldouble у. GLdouble z):
 

/* Умножает текущую матрицу на матрицу поворота объекта на угол angle против часовой стрелки вокруг луча, проведенного из начала координат в точку (х. у. z). */

Рассмотрим несколько примеров, поясняющих применение матриц преобразований.

 


1 Любой вектор (х, у, z)T трехмерного пространства может быть записан в соответствующих однородных координатах в виде (xw. yw, zw, w)T, где верхний индекс Т обозначает операцию транспонирования. Поскольку значение w может быть произвольным, для каждого вектора существует множество вариантов записи в однородных координатах. В формуле (3.4) используется значение w = 1.

 


 

Смотрите также