·
Пространственные преобразования
·
Матрицы двумерных и пространственных
преобразований
В компьютерной геометрии и графике
широко используется матричный аппарат вычислений для геометрических
преобразований.
Вспомним основные матричные операции:
Сложение и разность двух матриц. Результатом этой
операции является матрица элементы которой
определяются по следующей формуле:
где каждый элемент матрицы Сi,j представляет собой
сумму или разность соответствующих элементов матриц Аi,j и Вi,j.
Умножение матрицы на скаляр осуществляется
по тому же принципу:
В результате каждый элемент матрицы Сi,j представляет собой
произведение соответствующих элементов матриц Аi,j на скаляр n.
Иная ситуация возникает при перемножении
матриц. Данная операция осуществляется по следующему правилу:
где n- размерность матриц
(количество строк и столбиков). Т.е. У
первой матрицы берется строка, второй матрицы столбик, эти элементы попарно
перемножаются и складываются. В результате получаем элемент первой строки и
первого столбика результирующей матрицы С1,1. И т.д. Важным свойством
данной операции является то, что произведение матриц не перестановочно!!! Т.е.
Точка P на плоскости однозначно определяется двумя своими координатами (x, y). В соответствие ей можно поставить матрицу-строку
размером 1´2 вида (сначала будем использовать именно такое
отображение точки). Следует заметить также, что точка может задаваться и
соответствующей матрицей-столбцом размером 2´1. В любом
случае матрицу, определяющую положение точки, часто называют координатным
вектором или вектором положения.
Большинство из перечисленных выше
элементарных преобразований по отношению к точке можно реализовать путем
умножения матрицы на матрицу общего
преобразования размером 2´2 вида
:
где ,
– координаты точки P*, являющейся результатом преобразования
точки P, причем
.
Рассмотрим некоторые специальные
случаи.
Умножение исходной матрицы на
единичную 2´2 матрицу (a = d = 1, b = c = 0)
не приводит к каким-либо изменениям;
поэтому подобную единичную матрицу часто называют матрицей тождественного
преобразования.
В случае d = 1, b = c = 0
– происходит так называемое локальное
масштабирование (растяжение при |a| > 1 или сжатие при 0 < |a| < 1) координаты x ()
без изменения координаты y; если при этом a < 0, кроме масштабирования происходит
отражение относительно оси y.
В аналогичном случае, когда a = 1, b = c = 0,
– происходит локальное масштабирование
(растяжение при |d | > 1 или сжатие при 0
< |d | < 1) координаты y ()
без изменения координаты x;
при d < 0 масштабирование сопровождается
отражением относительно оси x.
В общем случае, когда b = c = 0,
– наблюдается локальное масштабирование
обеих координат; кроме того, при a < 0, d > 0 происходит отражение относительно оси y, при a > 0, d < 0 – отражение относительно оси x, при a < 0, d < 0 – отражение относительно начала
координат.
Приведенные примеры позволяют
сделать вывод о том, что диагональные члены матрицы преобразования
обусловливают локальное масштабирование и, при соответствующих условиях,
отражение относительно координатных осей или точки начала координат.
Посмотрим теперь, на что влияют
недиагональные члены этой матрицы.
Пусть a = d = 1, c = 0. Тогда
– координата x*= x
осталась неизменной, а координата y* стала линейно
зависеть от исходной координаты x; произошел так
называемый сдвиг вдоль оси y пропорционально
координате x (на bx).
Аналогично, когда a = d = 1, b = 0,
– происходит сдвиг вдоль оси x пропорционально координате y (на cy).
Таким образом установили, что недиагональные
члены матрицы преобразования создают эффект сдвига
координат исходной точки вдоль координатных осей.
С помощью 2´2 матрицы общего
преобразования можно организовать и повороты точек, отрезков и многоугольников
относительно начала координат.
Рассмотрим теперь, как осуществить поворот на
произвольный угол q на примере
преобразования точки P (x, y). Вектор положения данной точки равен
,
где r
– длина вектора, а j – угол наклона
вектора по отношению к оси x.
Вектор положения точки P* (x*, y*),
полученной из исходной точки путем ее поворота относительно начала координат на
положительный угол q , равен соответственно
или, после преобразований –
.
Таким образом, преобразованная точка
имеет координаты
,
.
В матричном виде операцию
преобразования можно записать так:
.
Другими словами, поворот
относительно начала координат на произвольный угол q задается матрицей преобразования
.
Ранее было замечено, что
использование двумерных координатных векторов, отображающих точки на плоскости,
в совокупности с матрицей общего преобразования размером 2´2 накладывает ряд ограничений на модификацию объектов.
В первую очередь, эти ограничения обусловлены невозможностью применения
преобразования координат. Существенно расширить возможности модификации
позволяет использование однородных координат для отображения точек и,
соответственно, матрицы общего преобразования
размером 3´3.
Однородные координаты точки P (x, y) на физической плоскости xy представляют собой тройку чисел x¢, y¢, h; первые
два из них связаны с реальными координатами точки соотношениями x¢ = hx и y¢ = hy, а h – это
некоторое вещественное число (отметим, что случай h = 0
является особым и будет рассмотрен ниже). Однородным
координатам точки можно поставить в соответствие трехмерный координатный вектор
(вектор положения) – матрицу размером 1´3
вида . Очевидно, что при таком подходе каждую точку можно
связать с бесконечным множеством наборов однородных координат и,
соответственно, координатных векторов вида
. Вместе с тем, для точки имеется лишь один набор однородных
координат со значением h = 1; ему соответствует вектор положения вида
. В компьютерной графике для отображения точек (за
исключением точек бесконечности, см. далее) используются координатные
векторы именно такого вида.
Применяя к вектору положения
исходной точки матрицу общего
преобразования размером 3´3 вида
,
получаем:
.
Данный результат практически
идентичен тому, который был получен при умножении координатного вектора на матрицу
общего преобразования размером 2´2 (см. выше). Выражения для координат
и
преобразованной
точки в обоих случаях полностью совпадают. Следовательно, использование
однородных координат совместно с матрицей общего преобразования вида
позволяет осуществить все те
преобразования точек, отрезков и многоугольников, о которых шла речь выше (это
и происходит при реальной обработке графических объектов). Задавая
соответствующие значения a, b, c и d, можно реализовать тождественное преобразование,
операции локального масштабирования, отражения, сдвига и поворота, аналогичные
уже рассмотренным. Однако, все они, по-прежнему, будут
осуществляться относительно точки начала координат.
Исследуем теперь дополнительные
возможности, открывающиеся при новом подходе к преобразованиям. Проведем
следующую матричную операцию:
полученный
результат можно трактовать двояко: с одной стороны, можно считать, что операция
привела к перемещению исходной точки вдоль осей x
и y соответственно на m и n
в исходной системе координат x0y; с другой стороны, можно полагать, что
точка осталась на месте, а произошло преобразование координат – новая система
координат x*0*y* сдвинута относительно исходной на – m вдоль оси x и на – n вдоль оси y.
В любом случае, выяснилось, что
элементы m и n
матрицы преобразования размером 3´3 являются коэффициентами перемещения в направлениях x и y соответственно. И не менее важный вывод из
приведенного примера – теперь каждая точка плоскости, в том числе начало координат,
может быть преобразована.
Матрицу общего преобразования для
трехмерных координатных векторов, используемых при двумерных преобразованиях, в
общем виде можно представить так:
.
Ранее было установлено, как входящие
в нее коэффициенты a, b, c, d, m и n влияют на соответствующие преобразования. Остальным
трем коэффициентам в предыдущих разделах присваивались вполне определенные
значения ( p = q = 0, s = 1), и
они, по сути дела, не принимали участия в преобразованиях. Координатные векторы
преобразованных точек всегда имели вид , т.е. число h тождественно принимало единичное значение.
Геометрически это можно трактовать как ограничение преобразований физической
плоскостью h = 1 в
трехмерном пространстве xyh. Вместе с тем, при других значениях коэффициентов p, q и s они
также могут участвовать в преобразованиях.
Рассмотрим сначала, к какому эффекту
приведут ненулевые значения коэффициентов p и q.
Запишем следующее выражение:
;
данное
преобразование привело к тому, что точка (x, y), которой
изначально ставился в соответствие координатный вектор вида
,
преобразована в точку, которой ставится в соответствие координатный вектор вида
,
где x¢ = x, y¢ = y,
;
с геометрической точки зрения полученный результат интерпретируется следующим
образом: в трехмерном пространстве xyh конец P
(рис.2.12) координатного вектора исходной точки принадлежит плоскости h = 1, а конец P¢ координатного
вектора преобразованной точки – плоскости
(причем в данном конкретном случае две другие
компоненты однородных координат и соответствующего координатного вектора
остаются неизменными).
Однако, как отмечалось ранее, в
компьютерной графике используют векторы положения только вида . Поэтому, когда какое-либо преобразование приводит к
результату с h ≠
1 (и, кстати, с h ≠
0), этот результат нормализуют,
т.е. приводят к требуемому виду путем деления всех трех составляющих однородных
координат на величину h. В
рассматриваемой задаче окончательный результат преобразования будет иметь вид
;
геометрически такой же результат, а
именно точку P*, можно получить путем проецирования
точки P¢, принадлежащей
плоскости h ≠ 1, на плоскость h = 1 по лучу, соединяющему точку P¢ с началом
координат.
Рассмотрим следующее преобразование:
,
где x¢ = x, y¢ = y, h = s;
нормализуем полученный результат:
;
произошло пропорциональное
масштабирование координат исходной точки: если s > 1 – равномерное сжатие, если 0
< s < 1 – равномерное растяжение.
Рассмотрев действие всех
коэффициентов 3´3 матрицы общего преобразования, сделаем следующее
заключение. Условно ее можно разбить на четыре части (подматрицы) –
;
коэффициенты
каждой подматрицы связаны с преобразованиями определенного типа, а именно:
коэффициенты левой верхней 2´2 подматрицы (a,
b,
c
и d )
– с операциями локального масштабирования, сдвига, отражения и поворота,
коэффициенты левой нижней 1´2 подматрицы (m
и n)
– с перемещениями вдоль координатных осей, коэффициенты правой верхней 2´1 подматрицы ( p
и q)
– с проецированием в однородных координатах, правая нижняя 1´1 подматрица
(коэффициент s) – задает общее масштабирование.
Матрицы
двумерных преобразований представлены в приложении
Пространственные преобразования
графических объектов так же, как и двумерные преобразования (см. предыдущую
тему), реализуются с использованием однородных координат. Каждая точка с
конечными координатами P (x, y, z) в пространстве xyz отображается содержащим однородные
координаты этой точки четырехмерным координатным вектором (вектором положения)
– матрицей размером 1´4 вида .
При пространственных преобразованиях
применяют матрицу общего преобразования размером 4´4. Обобщенно ее
можно представить так:
;
причем (по аналогии с двумерными
преобразованиями) коэффициенты левой верхней 3´3 подматрицы (a, b, c, d, e, f, g, i
и j ) связаны с операциями
локального масштабирования, сдвига, отражения и поворота, коэффициенты левой
нижней 1´3 подматрицы (l,
m и n)
– с перемещениями вдоль координатных осей, коэффициенты правой верхней 3´1 подматрицы ( p, q
и r) – с проецированием в однородных координатах, правая нижняя 1´1 подматрица
(коэффициент s) – задает общее масштабирование.
Тождественное преобразование (не
приводящее к изменению объекта) осуществляется единичной матрицей (матрицей
тождественного преобразования). Оно сводится к следующему:
.
Масштабирование при пространственных
преобразованиях (так же, как и при двумерных преобразованиях) задается диагональными
элементами матрицы общего преобразования. Локальное масштабирование по осям x, y
и z связано с коэффициентами
соответственно a, e и j
этой матрицы, что можно проиллюстрировать следующим примером преобразования
точки:
,
где ,
,
.
Симметричные отражения графических
объектов относительно координатных плоскостей yz (x = 0), xz (
y = 0) и xy (z = 0) можно осуществить матрицами
преобразования соответственно
,
и
.
Симметричные отражения относительно
координатных осей x, y и z (повороты вокруг этих осей на 180°) реализуются с использованием
соответственно матриц преобразования
,
и
.
Симметричному отражению относительно
точки начала координат будет соответствовать матрица преобразования вида
Общее масштабирование можно осуществить,
воспользовавшись четвертым диагональным элементом матрицы общего
преобразования, т.е. коэффициентом s (при условии,
конечно, что s ≠ 1 и s ≠ 0). Приведем
пример подобного преобразования точки:
;
окончательный результат после
нормализации –
;
происходит пропорциональное
(равномерное) масштабирование координат исходной точки: если s
> 1 – сжатие, если 0 < s < 1 – растяжение.
Сдвиги при пространственных
преобразованиях обусловливают недиагональные элементы левой верхней 3´3 подматрицы
матрицы общего преобразования. Рассмотрим следующее преобразование точки:
;
произошли сдвиги: вдоль оси x пропорционально координатам y (на dy) и z
(на
gz), вдоль оси y пропорционально координатам x (на bx) и z
(на
iz), вдоль оси z пропорционально координатам x
(на
сx) и y (на fy).
Повороты вокруг координатных осей x, y
и z в правосторонней системе координат
на произвольные углы q, f и y осуществляются
матрицами преобразования соответственно
,
и
.
Преобразование вида
реализует
перемещения: вдоль оси x на l, вдоль оси y
на m, вдоль оси z
на n.
При пространственных преобразованиях проецирование
в однородных координатах связано с коэффициентами p,
q и r
матрицы общего преобразования. Рассмотрим следующее преобразование при
ненулевых значениях этих коэффициентов применительно к точке:
,
где ;
если
и
,
окончательный результат преобразования (после нормализации) будет следующим:
.
Матрицы
пространственных преобразований представлены в приложении
Локальное
масштабирование: в a раз по координатной оси x, в d раз по координатной оси y |
|
Симметричное
отражение относительно координатной оси x |
|
Симметричное
отражение относительно координатной оси y |
|
Симметричное
отражение относительно точки начала координат (поворот вокруг точки начала
координат на 180°) |
|
Сдвиги: вдоль
координатной оси x на cy, вдоль
координатной оси y на bx |
|
Поворот на
произвольный угол q относительно точки начала
координат |
|
Отражение
относительно прямой у = x |
|
Отражение
относительно прямой у = – x |
|
Перемещения: вдоль
координатной оси x на m, вдоль
координатной оси y на n |
|
Проецирование
в однородных координатах (если |
|
Общее
масштабирование в |
|
Локальное
масштабирование: в a раз по координатной оси x, в e раз по координатной оси y, в j раз по координатной оси z |
|
Симметричное
отражение относительно координатной плоскости yz (x = 0) |
|
Симметричное
отражение относительно координатной плоскости xz ( y = 0) |
|
Симметричное
отражение относительно координатной плоскости xy (z = 0) |
|
Симметричное
отражение относительно координатной оси x
(поворот вокруг оси x на 180°) |
|
Симметричное
отражение относительно координатной оси y
(поворот вокруг оси y на 180°) |
|
Симметричное
отражение относительно координатной оси z
(поворот вокруг оси z на 180°) |
|
Симметричное
отражение относительно точки начала координат |
|
Сдвиги: вдоль оси x на dy + gz, вдоль оси y на bx + iz, вдоль оси z на cx + fy |
|
Поворот
вокруг координатной оси x на произвольный угол q |
|
Поворот
вокруг координатной оси y на произвольный угол f |
|
Поворот
вокруг координатной оси z на произвольный угол y |
|
Перемещения: вдоль
координатной оси x на l, вдоль
координатной оси y на m, вдоль
координатной оси z на n |
|
Проецирование
в однородных координатах (если |
|
Общее
масштабирование в |
|
Параллельное
ортографическое проецирование на координатную плоскость xy (z = 0) |
|