Скачиваний:
68
Добавлен:
16.04.2013
Размер:
3.38 Mб
Скачать

Матричное представление трехмерных преобразований

Аналогично тому, как двумерные преобразования описываются матрицами размером 3x3, трехмерные преобразования могут быть представлены в виде матриц размером 4x4. И тогда трехмерная точка (х, у, z) записывается в однородных координатах как (W*x, W*y, W*z, W), где W0. Если W1, то для получения трехмерных декартовых координат точки (х, у, z) первые три однородные координаты делятся на W. Отсюда, в частности, следует, что две точки H1 и H2 в пространстве однородных координат описывают одну и ту же точку трехмерного пространства в том и только в том случае, когда H1 = С*H2 для любой константы С0.

Трехмерную систему координат будем считать правосторонней (рис.).

Правосторонняя система координат

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

Если ось вращения

Положительным будет направление поворота

X

Y

Z

От Y к Z

От Z к X

От X к Y


Эти положительные направления отмечены также на рис.

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

Y

Z

X

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

Трехмерный перенос является простым расширением двумерного:

10 0 0

01 0 0

M(mx my mz) = 0 0 1 0

mx my mz 1

т. e. [x y z 1] * M(mx, my, mz) = [x+mx y+my z+mz 1].

Начальная позиция Конечная позиция

Рис. Преобразование точек Р1, Р2 и Р3 из начальной позиции в конечную.

Масштабирование расширяется аналогичным образом:

Sx 0 0 0

0 Sy 0 0

S(Sx, Sy, Sz) = 0 0 Sz 0

0 0 0 1

В самом деле, [х у z l] * S(Sx, Sy, Sz) = [Sx*x Sy*y Sz*z I].

Двумерный поворот является в то же время трехмерным поворотом вокруг оси Z. В трехмерном пространстве поворот вокруг оси Z описывается выражением

cos sin 0 0

- sin cos 0 0

Rz() = 0 0 1 0

0 0 0 1

Это легко проверить: в результате поворота на 90° вектора [1 0 0 1], являющегося единичным вектором оси х, должен получиться единичный вектор [0 1 0 1] оси у. Вычисляя произведение

0 1 0 0

1 0 0 0

[1 0 0 1] = 0 0 1 0

0 0 0 1

получаем предсказанный результат [0 1 0 1].

Матрица поворота вокруг оси X имеет вид

1 0 0 0

0 cos sin 0

Rx() = 0 - sin cos 0

0 0 0 1

Матрица поворота вокруг оси Y имеет вид

cos 0 -sin 0

0 1 0 0

Ry() = sin 0 cos 0

0 0 0 1

Столбцы (и строки) верхней левой подматрицы размером 3x3 матриц Rz(), Rx() и Ry() представляют собой взаимно ортогональные единичные векторы, интерпретация которых такая же, что и двумерном случае.

Все эти матрицы преобразований имеют обратные матрицы.

Матрица, обратная M, получается подстановкой знака минус перед mx, my и mz; обратная S — заменой Sx, Sy и Sz на обратные им значения, а для каждой из трех матриц поворота — выбором отрицательного угла поворота.

Результатом произвольной последовательности поворотов вокруг осей х, у и z является матрица А, имеющая вид

r11 r12 r13 0

r21 r22 r23 0

A = r31 r32 r33 0

0 0 0 1

Подматрицу поворота размером 3x3 называют ортогональной, поскольку ее столбцы являются взаимно ортогональными единичными векторами. При повороте, задаваемом матрицей, эти единичные векторы совмещаются с осями х, у и z. Иногда возникает необходимость определить матрицу поворота, соответствующую таким направлениям. Матрицы поворота сохраняют длину и углы, а матрицы масштабирования и переноса не сохраняют.

Можно перемножить произвольное число матриц поворота, масштабирования и переноса. Результат всегда будет иметь вид

R11 R12 R13 0

R21 R22 R23 0

A = R31 R32 R33 0 (**)

Mx My Mz 1

Верхняя левая подматрица R размером 3 х 3 (как прежде подматрица 2 х 2) будет описывать суммарные поворот и масштабирование, в то время как подматрица M будет задавать последующий совокупный перенос. С точки зрения быстродействия проведения вычислений выгоднее выполнять преобразования явно:

[x' y' z'] = [x y z] * R + M,

где R и M - подматрицы (**)