Френсис Хилл

Рис. 5.29. Точка Р переходит в точку 0 в плоскости вращения Окончательным результатом является матрица

Френсис Хилл

(5.33)

где с - соэ(Р), 5 = этф), а (их, иу, иг) - компоненты единичного вектора и. Эта матрица кажется более сложной, чем она есть на самом деле. В действительности, как мы увидим позже, структура элементов этой матрицы позволяет для любой заданной матрицы поворота определить ось и угол, которые обеспечивают требуемый поворот (что доказывает теорему Эйлера).

5.3. Трехмерные аффинные преобразования В дальнейшем мы также узнаем, что в OpenGL имеется функция для осуществления поворота вокруг произвольной оси:

g1Rotated(angle. их. иу. uz); Пример 5.3.4. Поверните вокруг оси Найдите матрицу, осуществляющую поворот на 45° вокруг оси и = (1,1,1)/7з = (0,577,0,577,0,577). Решение При повороте на 45° с = s = 0,707. Подставив их в уравнение (5.33), получаем:

Френсис Хилл

Определитель этой матрицы, как и следовало ожидать, равен единице. На рис. 5.30 показан базовый сарай, смещенный относительно начала координат, до поворота (ближняя фигура), после поворота на 22,5° (средняя) и после поворота на 45° (дальняя).

Френсис Хилл

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

Френсис Хилл

характерные угол В и орт и. Это удивительно легко сделать, если обратиться к уравнению (5.33) [Watt, 138]. Заметим, что след (trace) матрицы Яи(В), что в данном случае означает сумму трех элементов ее главной диагонали, равен Зс + (1 - с)(и2х + и2+ и\) = 1 + 2cos(B). Выразим отсюда cos(B):

cos(B) = l/2(mu + m22+m33)-l.

Глава 5. Преобразования объектов Найдем арккосинус этой величины для получения угла Р, который используем для вычисления 5 - эт(Р). Тогда мы увидим, что элементы матрицы поворота попарно входят в выражение каждого компонента вектора и:


⇐ Предыдущая| |Следующая ⇒