Трехмерные матричные преобразования
Подобно тому, как двумерные преобразования описываются матрицами размером 3´3, трехмерные преобразования могут быть представлены матрицами размером 4´4. Тогда трехмерная точка (x, y, z) записывается в однородных координатах как (Wx,Wy,Wz,W), где W ¹ 0. Для получения декартовых координат надо первые три однородные координаты разделить на W. Два однородных вектора описывают одну декартову точку в трехмерном пространстве, если H1 = c H2, где c = const ¹ 0и H , H2 - векторы, записанные в однородных координатах.
Матрицы преобразований будем записывать в правосторонней системе координат (см. рис. 10).
Рис. 10. Правосторонняя система координат
При этом положительный поворот определяется следующим образом. Если смотреть из положительной части оси вращения (например, оси ) в направлении начала координат, то поворот на 900 против часовой стрелки будет переводить одну положительную полуось в другую (ось x в y, y в z, z в x в соответствии с правилом циклической перестановки).
Заметим, что на практике во многих приложениях компьютерной графики удобнее применять левостороннюю экранную систему координат (см. рис. 11), в которой ось x направлена вправо, ось y – вверх, а ось z вглубь экрана. В этом случае удобнее интерпретировать тот факт, что точки с большими значениями находятся дальше от наблюдателя.
Рис. 11. Левосторонняя система координат
Запишем теперь матрицу трехмерного переноса, по аналогии с двумерным случаем:
, (13)
при этом
.
Операция масштабирования:
, (14)
Перейдем к операции поворота. C ней в трехмерном случае придется разбираться чуть больше, чем в двумерном. Так как при двумерном повороте в плоскости xy координаты z остаются неизменными, то поворот вокруг оси z записывается так:
. (15)
Матрицы поворота вокруг оси x и вокруг оси y имеют вид:
, . (16)
: . (17)
Обратите внимание на смену положения синуса угла с отрицательным знаком в матрице поворота вокруг оси y. Правильность этих матриц легко проверить поворотом одного из ортов на 900, при этом он должен перейти в следующий по порядку орт на соответствующей координатной оси.
Обратные преобразования будут выражаться матрицами, обратными к показанным выше. Для операции переноса надо лишь заменить знаки компонент вектора переноса на противоположные:
;. (18)
для операции масштабирования – на обратные значения:
;. (19)
для поворота – выбором отрицательного угла поворота:
.. (20)
Результатом нескольких последовательных поворотов будет матрица вида
. (21).
Здесь верхняя матрица размером 3´3 называется ортогональной. Столбцы ортогональной матрицы – это единичные вектора, в которые преобразуются орты координатных осей в результате поворотов. Важным ее свойством является то, что обратная к ней матрица является транспонированной: . Это полезно тем, что при вычислениях достаточно поменять индексы местами и обратное преобразование получается автоматически.
После перемножения любого числа матриц вида T,S и R результирующая матрица всегда будет иметь вид:
. (22)
Здесь верхняя часть размером 3´3 определяет суммарный поворот и масштабирование, а три коэффициента последней строки – суммарный перенос.
Преобразование одной точки выполняется с помощью следующих действий
(23)
Таким образом, для преобразования одной трехмерной точки потребуется уже 9 умножений и 9 сложений.
Вопросы эффективности вычислений
Рассмотрим проблему ускорения вычислений в одной из самых трудоемких операций компьютерной графики – операции поворота точки относительно начала координат. Как было показано ранее, для ее выполнения необходимо произвести 4 операции умножения, 2 операции сложения, а также вычислить значения синуса и косинуса угла поворота. Напомним вид формул поворота:
Одним из наиболее часто встречающихся способов ускорения операции поворота является отказ от вычисления синуса и косинуса угла во время выполнения программы, и использование их заранее подсчитанных значений, которые занесены в специальную таблицу. Например, в этой таблице могут храниться значения синусов и косинусов углов поворота с шагом в 1 градус. Тогда целое количество градусов угла поворота может служить в качестве индекса при извлечении соответствующих значений синусов и косинусов из таблицы. Такой прием называется табличным поворотом.
Рис. 12. Вывод формулы О. Бьюнемана.
Дополнительным способом ускорения операции поворота является уменьшение количества операций умножения. Рассмотрим вывод формулы О. Бьюнемана с использованием тангенса половинного угла, в которой поворот точки вокруг начала координат производится за 3 операции умножения и 3 операции сложения. Так как на многих микропроцессорах операции умножения выполняются дольше чем операции сложения, то экономия времени достигается за счет уменьшения операций умножения.
Вывод формулы будем получать из геометрических построений, как показано на рис.12.
Будем искать выражение координат x и y через x' и y'. На оси Ox отложим отрезок OS, такой что OS = x'. Тогда x = OS – QS = x' – QS.. Здесь отрезок QS является горизонтальной проекцией отрезка PT, где
PT = PU + UT, PU = y', ,
где
.
Теперь, зная x, можно выразить y в виде суммы длин отрезков QV и VP. Так как длины отрезков PV и PT равны как радиусы окружности с центром в точке P, то
.
Обозначим PT = T*, отсюда следует, что
,
Последние три равенства будем называть формулой Бьюнемана.
Дата добавления: 2016-04-14; просмотров: 1016;