Трехмерные матричные преобразования

Подобно тому, как двумерные преобразования описываются матрицами размером Трехмерные матричные преобразования - student2.ru , трехмерные преобразования могут быть представлены матрицами размером Трехмерные матричные преобразования - student2.ru . Тогда трехмерная точка Трехмерные матричные преобразования - student2.ru записывается в однородных координатах как Трехмерные матричные преобразования - student2.ru , где Трехмерные матричные преобразования - student2.ru . Для получения декартовых координат надо первые три однородные координаты разделить на Трехмерные матричные преобразования - student2.ru . Два однородных вектора описывают одну декартову точку в трехмерном пространстве, если Трехмерные матричные преобразования - student2.ru , где Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru - векторы, записанные в однородных координатах.

Матрицы преобразований будем записывать в правосторонней системе координат. При этом положительный поворот определяется следующим образом. Если смотреть из положительной части оси вращения (например, оси Трехмерные матричные преобразования - student2.ru ) в направлении начала координат, то поворот на Трехмерные матричные преобразования - student2.ru против часовой стрелки будет переводить одну положительную полуось в другую (ось Трехмерные матричные преобразования - student2.ru в Трехмерные матричные преобразования - student2.ru , в соответствии с правилом циклической перестановки).

Заметим, что на практике удобнее применять левостороннюю систему координат, так как в этом случае удобнее интерпретировать тот факт, что точки с большими значениями Трехмерные матричные преобразования - student2.ru находятся дальше от наблюдателя.

Запишем теперь матрицу трехмерного переноса. Аналогично двумерному случаю:

Трехмерные матричные преобразования - student2.ru , при этом

Трехмерные матричные преобразования - student2.ru .

Операция масштабирования:

Трехмерные матричные преобразования - student2.ru

Трехмерные матричные преобразования - student2.ru

Перейдем к операции поворота; c ней, в трехмерном случае, придется разбираться чуть побольше чем в двумерном. Так как при двумерном повороте в плоскости Трехмерные матричные преобразования - student2.ru координаты Трехмерные матричные преобразования - student2.ru остаются неизменными, то поворот вокруг оси Трехмерные матричные преобразования - student2.ru записывается так:

Трехмерные матричные преобразования - student2.ru .

Матрица поворота вокруг оси Трехмерные матричные преобразования - student2.ru имеет вид:

Трехмерные матричные преобразования - student2.ru ,

и вокруг оси Трехмерные матричные преобразования - student2.ru :

Трехмерные матричные преобразования - student2.ru

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

Обратные преобразования будут выражаться обратными матрицами. Для операции переноса надо лишь заменить знаки компонент вектора переноса на противоположные:

Трехмерные матричные преобразования - student2.ru ;

для операции масштабирования – на обратные значения:

Трехмерные матричные преобразования - student2.ru ;

для поворота – выбором отрицательного угла поворота:

Трехмерные матричные преобразования - student2.ru .

Результатом нескольких последовательных поворотов будет матрица

Трехмерные матричные преобразования - student2.ru .

Здесь верхняя матрица размером Трехмерные матричные преобразования - student2.ru называется ортогональной. Важным ее свойством является то, что обратная к ней матрица является транспонированной: Трехмерные матричные преобразования - student2.ru . Это полезно тем, что при вычислениях достаточно поменять индексы местами и обратное преобразование получается автоматически.

После перемножения любого числа матриц вида Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru результирующая матрица всегда будет иметь вид:

Трехмерные матричные преобразования - student2.ru .

Здесь верхняя часть размером Трехмерные матричные преобразования - student2.ru определяет суммарный поворот и масштабирование, а три коэффициента последней строки – суммарный перенос.

Вопросы эффективности вычислений

Рассмотрим проблему ускорения вычислений в одной из самых трудоемких операций компьютерной графики – операции поворота точки относительно начала координат. Как было показано ранее, для ее выполнения необходимо произвести 4 операции умножения, 2 операции сложения, а также вычислить значения синуса и косинуса угла поворота. Напомним вид формул поворота:

Трехмерные матричные преобразования - student2.ru

Трехмерные матричные преобразования - student2.ru

 
  Трехмерные матричные преобразования - student2.ru

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

Дополнительным способом ускорения операции поворота является уменьшение количества операций умножения. Рассмотрим вывод формулы О. Бьюнемана с использованием тангенса половинного угла, в которой поворот точки вокруг начала координат производится за 3 операции умножения и 3 операции сложения. Так как на многих микропроцессорах операции умножения выполняются дольше чем операции сложения, то экономия времени достигается за счет уменьшения операций умножения.

Вывод формулы будем получать из геометрических построений, как показано на рис.28.

Будем искать выражение координат Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru через Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru . На оси Трехмерные матричные преобразования - student2.ru отложим отрезок Трехмерные матричные преобразования - student2.ru , такой что Трехмерные матричные преобразования - student2.ru . Тогда Трехмерные матричные преобразования - student2.ru . Здесь отрезок Трехмерные матричные преобразования - student2.ru является горизонтальной проекцией отрезка Трехмерные матричные преобразования - student2.ru , где Трехмерные матричные преобразования - student2.ru , Трехмерные матричные преобразования - student2.ru , Трехмерные матричные преобразования - student2.ru Трехмерные матричные преобразования - student2.ru , где Трехмерные матричные преобразования - student2.ru . Теперь, зная Трехмерные матричные преобразования - student2.ru , можно выразить Трехмерные матричные преобразования - student2.ru в виде суммы длин отрезков Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru . Так как длины отрезков Трехмерные матричные преобразования - student2.ru и Трехмерные матричные преобразования - student2.ru равны как радиусы окружности с центром в точке Трехмерные матричные преобразования - student2.ru , то Трехмерные матричные преобразования - student2.ru . Обозначим Трехмерные матричные преобразования - student2.ru , отсюда следует, что

 
  Трехмерные матричные преобразования - student2.ru

Трехмерные матричные преобразования - student2.ru ,

Трехмерные матричные преобразования - student2.ru ,

Трехмерные матричные преобразования - student2.ru

Последние три равенства будем называть формулой О. Бьюнемана.

Наши рекомендации