Для создания графических объектов необходимо иметь представления о применемых геометричеких методах, способах описания и визуализации. Поэтому рассмотрим те средства, которые позволяют сделать это.
Задачи компьютерной графики подразделяют на двумерные (2D) или пространственные (3D). Рассмотрим случай, когда имеется плоскость (XoY). В ней находится точка M c соответсвующими координатами (x,y). Если ввести в этой плоскости другую систему координат, то т.М будут соответствовать новые координаты (x*, y*) (Рис 1). Переход от одной прямоугольной системы координат к другой можно представить в виде соотношений:
(1)
, где a, b, g, d, l, m — произвольные числа связанные неравенством: ![]()
Примечание! Возможно два способа интерпретации: либо сохраняется точка и изменяется координатная система (в этом случае изменяются только координаты точки, а последняя остается на месте), либо изменяется точка и сохраняется координатная система ( тогда система (1) задает отображение, переводящее точку М (x,y) в точку М*(x*,y*); координаты обоих определены в одной системе).
Геометрические операции, позволяющие поставить в соответствие одному (исходному) множеству точек другие называются — аффинными преобразованиями. Различают аффинные преобразов на плоскости (2D) и в пространстве (3D). Пояснить физический смысл коэффициентов в (1) можно рассмотрев частные случаи преобразований на плоскости. Систему координат считаем прямоугольной декартовой.
Случай А. Поворот вокруг начальной точки на угол j (Рис. 2) описывается формулами:
Случай Б.Растяжение(сжатие) вдоль координатных осей (Рис.3) задается формулами:
Примечание! Растяжение (сжатие) вдоль оси абсцисс выполняется, если коэффициенты больше (меньше) 1.
СлучайВ. Отражение (относительно оси) (Рис. 4) выглядит так:
относительно оХ относительно оY
Cлучай Г. Изменение вектора (перенос) от одной точки к другой (Рис.5) отразится так:
Примечан! Параметры l и m задают коорд-ты вектора переноса.
Рассмотренные выше преобразования достаточно просты и позволяют любое сложное преобразование вида (1) свести к комбинации простых действий (3) — (6).
Для эффективного использования рассмотренных выше формул удобна матричная запись. Для случаев А, Б, В матрицы коэффициентов будут следующими:
Однако для описания всех четырех случаев матричной формой необходимо избавиться от неоднородности в (6). Этого можно достичь, добавив третий элемент к координатам точки. Тогда однородными координатами произвольной точки будет тройка неравных нулю чисел (x1, x2, x3), связанных с координатами (x, y) соотношениями:
При решении многих задач компьютерной графики произвольной точке М (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).
Трудно показать афинное преобразование для произвольной матрицы, поэтому сложное отображение разбивают на ряд простых шагов, т.е. приводят к частным случаям (А)-(Г).
Эти матрицы (для третьего порядка) будут иметь вид:
А.Матрица вращения Б. Матрица растяжения (сжатия)
В.Матрица отражения Г.Матрица переноса (translation)
Рассмотрим на примерах выполнение афинных преобразований.
П р и м е р 1. Построить матрицу поворота вокруг т.А (a,b) на угол j (Рис. 7).
1-й шаг. Перенос на вектор А(-a,-b) для совмещения центра поворота с началом координат. Матрица соответствующего преобразования, согласно (15) имеет вид:
2-й шаг. Поворачиваем на угол j. Соответствующая матрица, согласно (12): ![]()
3-й шаг. Перенос на вектор А(a,b) для возвращения центра поворота в прежнее положение (15): ![]()
4-й шаг. Перемножим матрицы в порядке выполнения. В результате получим, согласно правилу (10) искомое преобразование: (x* y* 1) = [T-A]?[Rj]?[TA] · (x y 1)
Пример 2. Построить матрицу растяжения с коэффицментами растяжения a вдоль оси абсцисс и b — вдоль оси ординат, с центром в точке A(a,b).
1-шаг. Перенос на вектор -A c координатами (-a,-b) для совмещения т.А с началом координат (0.0). Согласно матрице переноса (15) получаем:
2-й шаг. Растяжение вдоль координатных осей (с коэффициентами a и b). Используя правило (13) получаем:
3-й шаг. Перенос на вектор А (a,b) для возврата центра растяжения в прежнее место по схеме (15):
4-й шаг. Получение результирующего преобразования, как произведение матриц промежуточных:
x* y* 1) = [T-A]?[D]?[TA] = (x y 1)? (x* y* 1) =(x y 1) ![]()
Примечание! Следуя этому методу можно построить матрицу любого афинного преобразования.
Рассмотрим преобразования в пространстве (3D). Для установления однородности добавим к тройке координат четвертый параметр (для упрощения, 1). Получаем матрицу (x y z 1), а для радиус-вектора любой точки: (kx ky kz k) (k ? 0). Тогда получаем матрицу 4-го порядка. Частные случаи преобразований будут таковы:
А. Матрица вращения в пространстве
(16)относительно оси oX(на угол j) (17) относит оси oY(на угол y) (18) относит оси oZ(на угол )
Б. Матрица растяжения (сжатия) представлена в виде:
здесь a > 0-коэффициент растяжения (сжатия) вдоль оси oX;
b > 0 — коэффициент растяжения (сжатия) вдоль оси oY;
g > 0 — коэффициент растяжения (сжатия)вдоль оси oZ.
В. Матрица отражения:
(21) относительно плоскости YoZ (22) относительно плоскости ZoX (20) относительно плоскости XoY
Г. Матрица переноса имеет вид:
(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). Получаем:
Примечание! Цель переноса — добиться того, чтобы прямая 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 , где
. Соответствующая матрица будет иметь вид (согласно 16):
Под действием преобразования (описываемого матрицей) координаты вектора (l, m, n) изменятся. Определить новые параметры можно выполнив матричное умножение: (l, m, n, 1)?[Rx] = (l, 0, d, l).
Следующий поворот вокруг оси oY на угол q, который
определяется соотношениями: cos q = l, sin q = -d. Матрица (согласно 17): ![]()
3-й шаг. Вращение вокруг прямой L на заданный угол j, после того, как L совпала с осью oZ. Матрица преобразования (18) будет основой. ![]()
Примечание! Поскольку вращение в пространстве не является коммутативным, поэтому важно соблюдать порядок выполнения преобразований.
4-й шаг. Поворот вокруг оси ординат на угол -q.
5-й шаг. Поворот вокруг оси абсцисс на угол -y.
6-й шаг. Перенос на вектор А(a, b, c). Применяя принцип суперпозиции ? перемножим матрицы в порядке построения [T] ( [Rx] ( [Ry] ( [Rz] ( [Ry]-1 ( [Rx]-1 ( [T]-1. В итоге имеем:
Анализируя другие примеры подобного рода можно прийти к общей схеме, описывающей невырожденные матрицы любого вида:
Пример 2. Неободимо выполнить афинное преобразование выпуклого многогранника (Рис. 10).
Для решения задачи сначала надо по геометрическому описанию отображения найти его матрицу [A]. Далее зная, что произвольный выпуклый многогранник однозначно задается набором вершин : Vi (xi, yi, zi), где I=1, 2, … n.
строим матрицу:
Подвергая ее преобразованию, описываемому найденной невырожденной матрицей 4-го порядка, а именно [V]?[A], получаем набор вершин нового выпуклого многогранника — образа исходного.
