Смекни!
smekni.com

Задачи графических преобразований в приложениях моделирования с использованием ЭВМ (стр. 3 из 4)


cos j sin j 0

(x* y* 1) = (x y 1) -sin j cos j 0 (3.12)

-a cos j + b sin j + a -a sin j - b cos j + b 1

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

Пример 2. Построить матрицу растяжения с коэффицентами растяжения aвдоль оси абсцисс и b вдоль оси ординат и с центром в точке А (a, b).

1-й шаг. Перенос на вектор –А (-a, -b) для совмещения центра растяжения с началом координат;


1 0 0

[ T-A ] = 0 1 0 (3.13)

-a -b 1

матрица соответствующего преобразования.

2-й шаг. Растяжение вдоль координатных осей с коэффицентами a и b соответственно; матрица преобразования имеет вид


a 0 0

[ D ] = 0 d 0 (3.14)

0 0 1

3-й шаг. Перенос на вектор А (a, b) для возвращения центра растяжения в прежнее положение; матрица соответствующего преобразования:


1 0 0

[ TA ] = 0 1 0 (3.15)

a b 1

Премножив матрицы в том же порядке

[ T-A ] [ D ] [ TA ],

получим окончательно

a 0 0

( x* y* 1) = (x y 1) 0 d 0 (3.16)

(1 - a)a (1 - d)b 1

Рассуждая подобным образом, то есть разбивая предложенное преобразование на этапы, поддерживаемые матрицами [ R ], [ D ], [ M ], [ T ], можно построить матрицу любого аффинного преобразования по его геометрическому описанию.

4. Аффинные преобразования в пространстве

Рассмотрим трехмерный случай (3D) (3-dimension) и сразу введем однородные координаты.

Потупая аналогично тому, как это было сделано в размерности два, заменим координатную тройку (x, y, z), задающую точку в пространстве, на четверку чисел

(x y z 1)

или, более общо, на четверку

(hx hy hz), h = 0.

Каждая точка пространства (кроме начальной точки О) может быть задана четверкой одновременно не равных нулю чисел; эта четверка чисел определена однозначно с точностью до общего множителя.

Предложенный переход к новому способу задания точек дает возможность воспользоваться матричной записью и в более сложных трехмерных задачах.

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

А. Матрицы вращения в пространстве.

Матрица вращения вокруг оси абсцисс на угол j:


1 0 0 0

0

cos j sin j 0

0 -sin j cos j 0

0 0 0 1

Матрица вращения вокруг оси ординат на угол y:


cos y 0 -sin y 0
0 1 0 1

sin y 0cos y 0

0 0 0 1

Матрица вращения вокруг оси аппикат на угол c:


cos c sin c 0 0

-sin

c cos c 0 0

0 0 1 0

0 0 0 1

Полезно обратить внимание на место знака “ - ” в каждой из трех приведенных матриц.

Б. Матрица растяжения-сжатия:


a 0 0 0

0 b 0 0

0 0 g 0

0 0 0 1

где

a > 0 – коэффицент растяжения (сжатия) вдоль оси абсцисс;

b > 0 – коэффицент растяжения (сжатия) вдоль оси ординат;

g > 0 – коэффицент растяжения (сжатия) вдоль оси аппликат.

В. Матрицы отражения

Матрица отражения относительно плоскости ху:

1 0 0 0

0 1 0 0

0 0 -1 0

0 0 0 1

Матрица отражения относительно плоскости yz:


-1 0 0 0

0 1 0 0

0 0 1 0

0 0 0 1

Матрица отражения относительно плоскости zx:


1 0 0 0

0 -1 0 0

0 0 1 0

0 0 0 1

Г. Матрица переноса (здесь (l, m, n) - вектор переноса):


1 0 0 0

0 1 0 0

0 0 1 0

l m n 1

Как и в двумерном случае, все выписанные матрицы невырождены.

Приведем важный пример построения матрицы сложного преобразования по его геометрическому описанию.

Пример 3. Построить матрицу вращения на угол j вокруг прямой L, проходящей через точку А (a, b, c) и имеющую направляющий вектор (l, m, n). Можно считать, что направляющий вектор прямой является единичным:

l2 + m2 + n2 = 1

На рис. 10 схематично показано, матрицу какого преобразования требуется найти.

L

X

Рис. 10

Решение сформулированной задачи разбивается на несколько шагов. Опишем последовательно каждый из них.

1-й шаг. Перенос на вектор –А (-a, -b, -c) при помощи матрицы


1 0 0 0

0 1 0 0

0 0 1 0

-a -b -c 1

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

2-й шаг. Совмещение оси аппликатс прямой L двумя поворотами вокруг оси абсцисс и оси ординат.

1-й поворот – вокруг оси абсцисс на угол y (подлежащий определению). Чтобы найти этот угол, рассмотрим ортогональную проекцию L’ исходной прямой L на плоскость X = 0 (рис. 11).

L’ L q

Y