Преобразования на плоскости и в пространстве. Работа с матрицами.


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

Задачи компьютерной графики подразделяют на двумерные (2D) или пространственные (3D). Рассмотрим случай, когда имеется плоскость (XoY). В ней находится точка M c соответсвующими координатами (x,y). Если ввести в этой плоскости другую систему координат, то т.М будут соответствовать новые координаты (x*, y*) (Рис 1). Переход от одной прямоугольной системы координат к другой можно представить в виде соотношений:

(1) clip_image002, где a, b, g, d, l, m — произвольные числа связанные неравенством: clip_image004

Примечание! Возможно два способа интерпретации: либо сохраняется точка и изменяется координатная система (в этом случае изменяются только координаты точки, а последняя остается на месте), либо изменяется точка и сохраняется координатная система ( тогда система (1) задает отображение, переводящее точку М (x,y) в точку М*(x*,y*); координаты обоих определены в одной системе).

Геометрические операции, позволяющие поставить в соответствие одному (исходному) множеству точек другие называются — аффинными преобразованиями. Различают аффинные преобразов на плоскости (2D) и в пространстве (3D). Пояснить физический смысл коэффициентов в (1) можно рассмотрев частные случаи преобразований на плоскости. Систему координат считаем прямоугольной декартовой.

Случай А. Поворот вокруг начальной точки на угол j (Рис. 2) описывается формулами:

(3) clip_image006

Случай Б.Растяжение(сжатие) вдоль координатных осей (Рис.3) задается формулами:

(4) clip_image008

Примечание! Растяжение (сжатие) вдоль оси абсцисс выполняется, если коэффициенты больше (меньше) 1.

СлучайВ. Отражение (относительно оси) (Рис. 4) выглядит так:

(5) clip_image010 clip_image012

относительно оХ относительно оY

Cлучай Г. Изменение вектора (перенос) от одной точки к другой (Рис.5) отразится так:

(6) clip_image014

Примечан! Параметры l и m задают коорд-ты вектора переноса.

Рассмотренные выше преобразования достаточно просты и позволяют любое сложное преобразование вида (1) свести к комбинации простых действий (3) — (6).

Для эффективного использования рассмотренных выше формул удобна матричная запись. Для случаев А, Б, В матрицы коэффициентов будут следующими:

clip_image016, clip_image018, clip_image020

Однако для описания всех четырех случаев матричной формой необходимо избавиться от неоднородности в (6). Этого можно достичь, добавив третий элемент к координатам точки. Тогда однородными координатами произвольной точки будет тройка неравных нулю чисел (x1, x2, x3), связанных с координатами (x, y) соотношениями:

(8) clip_image022

При решении многих задач компьютерной графики произвольной точке М (x, y) плоскости ставят в соответствие точку М?(x, y, 1) (Рис. 6). Тогда для любой точки на прямой, соединяющей (0, 0, 0) и точку М, координаты можно выразить тремя числами:

(9) (kx, ky, k), где (k ? 0).

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

В проективной геометрии однородные координаты записываются в виде :

x1 : x2 : x3. Важное условие — отсутствие одновременного обращения в 0. Находят весьма широкое применение. Например — изменение масштаба. Если устройство отображения работает только с целыми числами, то для произвольного значения k = 1 точку с однородными координатами (1.2 : 0.5 : 2.8) трудно изобразить. Однако, если задать k = 10 получим (12 : 5 : 28). Или другая ситуация. Имеются координаты в виде чисел высоких порядков (23000 : 1500 : 2000). Чтобы избежать переполнения ( по типу данных) принимают k = 0.01. Результат — 230 : 15 20

Но большую пользу однородные координаты имеют при выполнении афинных преобразований. Считая k = 1 можно сравнить выражения (1) и нижеследующую, матричную форму:

Примечание! Если выполнить операцию умно жения вектора-строки и матрицы коэффициен тов можно получить обе формулы (1). Путем транспонирования матрицы можно получить эквивалентную запись по столбцам (11).

(10) clip_image024

Трудно показать афинное преобразование для произвольной матрицы, поэтому сложное отображение разбивают на ряд простых шагов, т.е. приводят к частным случаям (А)-(Г).

(11) clip_image026

Эти матрицы (для третьего порядка) будут иметь вид:

А.Матрица вращения Б. Матрица растяжения (сжатия)

(12) clip_image028 (13) clip_image030

В.Матрица отражения Г.Матрица переноса (translation)

(14) clip_image032 (15) clip_image034

Рассмотрим на примерах выполнение афинных преобразований.

П р и м е р 1. Построить матрицу поворота вокруг т.А (a,b) на угол j (Рис. 7).

1-й шаг. Перенос на вектор А(-a,-b) для совмещения центра поворота с началом координат. Матрица соответствующего преобразования, согласно (15) имеет вид:clip_image036 2-й шаг. Поворачиваем на угол j. Соответствующая матрица, согласно (12): clip_image038

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

4-й шаг. Перемножим матрицы в порядке выполнения. В результате получим, согласно правилу (10) искомое преобразование: (x* y* 1) = [T-A]?[Rj]?[TA] · (x y 1)

clip_image042

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

1-шаг. Перенос на вектор -A c координатами (-a,-b) для совмещения т.А с началом координат (0.0). Согласно матрице переноса (15) получаем:

clip_image036[1] 2-й шаг. Растяжение вдоль координатных осей (с коэффициентами a и b). Используя правило (13) получаем:

clip_image030[1] 3-й шаг. Перенос на вектор А (a,b) для возврата центра растяжения в прежнее место по схеме (15): clip_image040[1] 4-й шаг. Получение результирующего преобразования, как произведение матриц промежуточных:

x* y* 1) = [T-A]?[D]?[TA] = (x y 1)? (x* y* 1) =(x y 1) clip_image044

Примечание! Следуя этому методу можно построить матрицу любого афинного преобразования.

Рассмотрим преобразования в пространстве (3D). Для установления однородности добавим к тройке координат четвертый параметр (для упрощения, 1). Получаем матрицу (x y z 1), а для радиус-вектора любой точки: (kx ky kz k) (k ? 0). Тогда получаем матрицу 4-го порядка. Частные случаи преобразований будут таковы:

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

clip_image046clip_image048

clip_image050(16)относительно оси oX(на угол j) (17) относит оси oY(на угол y) (18) относит оси oZ(на угол )

Б. Матрица растяжения (сжатия) представлена в виде:

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

clip_image052 (19)

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

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

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

clip_image054 clip_image056 clip_image058

(21) относительно плоскости YoZ (22) относительно плоскости ZoX (20) относительно плоскости XoY

Г. Матрица переноса имеет вид:

clip_image060 (23) Здесь l, m, n — векторы переноса в направлениях oX, oY, oZ.

Примечание! Как и в случаях преобразований для плоскости ( 2D ) все указанные матрицы не вырождены, т.е. их определители не обращаются в 0.

В качестве пояснения сложного преобразования в пространстве рассмотрим следующие примеры:

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

Аналогично, разбиваем решение на несколько простых преобразований (шагов).

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

clip_image062Примечание! Цель переноса — добиться того, чтобы прямая L проходила через начало координат (0,0,0).

2-й шаг. Совмещение оси аппликат (oZ) с прямой L поворотами вокруг оси абсцисс (oX) и оси ординат (oY). Для первого поворота (на угол y) выполним ортогональную проекцию на плоскость YoZ прямой L. Получим L`. величина угла ?ZoL` = y. Направляющий вектор прямой L` будет (0, m, n) ® cos y =n/d , sin y =m/d , где clip_image064 . Соответствующая матрица будет иметь вид (согласно 16):

clip_image066Под действием преобразования (описываемого матрицей) координаты вектора (l, m, n) изменятся. Определить новые параметры можно выполнив матричное умножение: (l, m, n, 1)?[Rx] = (l, 0, d, l).

Следующий поворот вокруг оси oY на угол q, который

определяется соотношениями: cos q = l, sin q = -d. Матрица (согласно 17): clip_image068

3-й шаг. Вращение вокруг прямой L на заданный угол j, после того, как L совпала с осью oZ. Матрица преобразования (18) будет основой. clip_image070

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

4-й шаг. Поворот вокруг оси ординат на угол -q.

5-й шаг. Поворот вокруг оси абсцисс на угол -y.

6-й шаг. Перенос на вектор А(a, b, c). Применяя принцип суперпозиции ? перемножим матрицы в порядке построения [T] ( [Rx] ( [Ry] ( [Rz] ( [Ry]-1 ( [Rx]-1 ( [T]-1. В итоге имеем:

clip_image072 Анализируя другие примеры подобного рода можно прийти к общей схеме, описывающей невырожденные матрицы любого вида:

clip_image074 (24)

Пример 2. Неободимо выполнить афинное преобразование выпуклого многогранника (Рис. 10).

Для решения задачи сначала надо по геометрическому описанию отображения найти его матрицу [A]. Далее зная, что произвольный выпуклый многогранник однозначно задается набором вершин : Vi (xi, yi, zi), где I=1, 2, … n.

строим матрицу: clip_image076Подвергая ее преобразованию, описываемому найденной невырожденной матрицей 4-го порядка, а именно [V]?[A], получаем набор вершин нового выпуклого многогранника — образа исходного.