
- •Обзор машинной графики
- •Двумерные преобразования
- •Пример 2-1 Средняя точка прямой
- •Пример 2-2 Пересекающиеся прямые
- •Пример 2-3 Отражение и вращение
- •Пример 2-4 Комбинированные преобразования на плоскости
- •Пример 2-5 Масштабирование области
- •Пример 2-6 Поворот относительно произвольной точки
- •Пример 2-7 Отражение относительно произвольной прямой
- •Пример 2-8 Проецирование в однородных координатах
- •1 4 3 4 3
- •Трехмерные преобразования
- •Пример 3-1 Комбинированное преобразование
Двумерные преобразования
ВВЕДЕНИЕ
Изучение математического аппарата, лежащего в основе машинной графики, мы начнем с рассмотрения способов вывода и преобразования точек и линий. Эти способы наряду с соответствующими алгоритмами рисования используются для изображения объектов или визуализации графической информации. Возможность проводить преобразования точек и линий является фундаментом машинной графики. Нарисованный объект может быть представлен в нужном масштабе, повернут, перемещен, преобразован или модифицирован в соответствии с требованиями решаемой задачи. Все эти манипуляции с изображением можно выполнить, используя математический аппарат, изложенный в данной главе.
ИЗОБРАЖЕНИЕ ТОЧЕК
Точка представляется на плоскости двумя своими координатами, которые определяются как элементы матрицы размером 1х2 [х у]. В трехмерном пространстве используется матрица размером 1х3 [х у z].
Иначе
говоря, точка может задаваться в виде
вектора-столбца
в двумерном пространстве илив
виде
в трехмерном.
Строку [х
у]
или
столбец
часто называют координатным вектором.
Здесь для формирования такого вектора
будем использовать матрицу-строку,
т. е. множество точек, каждая из которых
определяет координатный вектор
в некоторой системе измерения. Данное
множество хранится в компьютере в
виде матрицы или массива чисел. Положением
точек можно управлять путем манипулирования
соответствующей матрицей. Линии,
соединяющие точки, формируют
отрезки, кривые и картинки.
ПРЕОБРАЗОВАНИЯ И МАТРИЦЫ
В качестве элементов матрицы могут фигурировать различные величины: числа, сетки или коэффициенты системы уравнений. Правила в матричной алгебре определяют допустимые операции над элементами. Многие физические задачи удобно выражаются в матричном представлении. Для моделей физических систем задача обычно ставится следующим образом: даны матрицы [A] и [B], найти результирующую матрицу [Т], такую, что [А][Т] = [В]. В этом случае решением является матрица [T] = [A]-1[В], где [А]-1—матрица, обратная к квадратной матрице [А].
В то же время матрицу [Т] можно интерпретировать как геометрический оператор. В этом случае для выполнения геометрического преобразования точек, представленных векторами положений в матрице [А], используется умножение матриц. Предположим, что матрицы [А] и [T] известны. Требуется определить элементы матрицы [В]. Представление [T] как геометрического оператора является основой математических преобразований, используемых в машинной графике.
ПРЕОБРАЗОВАНИЕ ТОЧЕК
Рассмотрим результаты умножения матрицы [x y], содержащей координаты точки Р, на матрицу общего преобразования размером 2x2:
(2-1)
Данная
запись означает, что исходные координаты
точки х
и
у
преобразуются
в
х
и
y
,где
х
=ах
+
су,
у
=bx
+ dy.
Представляют интерес
значения х
,
у
—координаты
результирующей, преобразованной точки
Р.
Рассмотрим некоторые специальные
случаи.
При а = d = 1 и с = b = 0 преобразование сведется к единичной матрице
(2-2)
и координаты точки Р останутся неизменными. Как и следовало ожидать, в линейной алгебре умножение на единичную матрицу эквивалентно умножению на 1 в обычной алгебре.
В случае d = l, b = c = 0
,
(2-3)
где х
= ах
— результат
масштабирования координаты x.
Эффект такого
преобразования показан на рис. 2-1а.
Рассмотрим теперь еще случай b = с = 0, т.е.
.
(2-4)
Данное преобразование
вызывает изменение обеих координат х
и у
вектора Р
(рис. 2-1b).
Если аd,
то координаты масштабируются различным
образом. При a=d>
1 происходит растяжение вектора Р
или
масштабирование координат. Если 0 < a
= d
< 1, то имеет место сжатие.
Если значение a
или d
отрицательное,
то вектор отражается относительно
координатных осей или относительно
плоскости. Чтобы убедиться в этом,
возьмем b
= с =
0, d
= 1 и a
,
тогда
(2-5)
и в результате получаем симметричное отражение относительно оси у (рис. 2-1с).
Если b
= с
= 0, а
= 1, d
,
то выполняется симметричное отражение
относительнооси
х.
Если b = с = 0, а = d < 0, то происходит отражение относительно начала координат, это показано на рис. 2-1d, где а = - 1, d = 1. Заметим, что обе операции отражения и масштабирования зависят только от диагональных членов матрицы преобразования.
Рассмотрим теперь случай с недиагональными членами. Возьмем сначала значения a = d = l, c = 0, тогда
(2-6)
Заметим, что координата х точки Р осталась неизменной, тогда как координата y* линейно зависит от исходных координат. Данное преобразование называется сдвигом (рис. 2-1е). Аналогично, в случае, когда a = d = l, b = 0, преобразование приведет к сдвигу пропорционально координате у (рис. 2-1f). Таким образом, видно, что недиагональные члены матрицы преобразования создают эффект сдвига координат вектора точки Р.
Прежде чем закончить с преобразованием точек, разберем действие общего преобразования, заданного выражением (2-1), когда начальный вектор лежит в точке начала координат, т.е.
или, в случае начала координат,
.
Видно, что начало координат инвариантно относительно преобразования общего вида. Это ограничение устраняется при использовании однородных координат.
ПРЕОБРАЗОВАНИЕ ПРЯМЫХ ЛИНИЙ
Прямую линию можно определить с помощью двух векторов, задающих координаты ее конечных точек. Расположение и направление линии, соединяющей две эти точки, может изменяться в зависимости от положений векторов. Реальный вид изображения линии зависит от типа используемого дисплея. В этом разделе мы рассмотрим только математические операции над конечными точками линии.
На рис. 2-2 изображена прямая линия, проходящая между двумя точками A и В. Положение векторов точек А и В задается следующим образом: [А] = [0 1] и [B] = [2 3].
Рассмотрим матрицу преобразования
(2-7)
которая,
как следует из предыдущего обсуждения,
приводит к сдвигу изображения.
Преобразование векторов А
и
В
с
помощью матрицы [Т]
дает новое положение векторов A
и
В
(2-8)
и
(2-9)
Таким образом,
результирующие координаты для точки
А
- это х
= 3 и у
= 1. Аналогично, В
— новая
точка с координатами x
= 11, у
= 7. В более
компактном виде отрезок АВ
может быть
представлен матрицей размером (2x2):
Умножим эту матрицу на [T]:
,
(2-10)
где компоненты
[L]
представляют
собой преобразование
координат векторов
[A*]
и [B*].
Результат
преобразования А
в А
и В
в
В
показан
на рис. 2-2, где
х
и
y
это исходные
оси координат, а х
и y
— преобразованные
оси. Из рисунка
видно,
что
преобразование сдвига [T]
увеличивает длину
отрезка и изменяет его направление.
ПРЕОБРАЗОВАНИЕ СРЕДНЕЙ ТОЧКИ
На рис. 2-2 видно,
что
(2 х 2)-матрица
преобразует прямую
линию у
= х
+ 1,
проходящую
между точками
А и
В
в другую
прямую
,которая
проходит между
точками А
и
В
.
Фактически
с помощью (2
х 2)-матрицы
осуществляется
преобразование любой прямой в другую
прямую. Все
точки преобразованной
линии
непосредственно соответствуют всем
точкам исходной
линии. Это
достаточно
очевидно для конечных точек линии.
Рассмотрим теперь
преобразование средней
точки прямой линии АВ.
Допустим,
что
.
Преобразуем одновременно две крайние точки:
(2-11)
итак, конечные
точки преобразованной линии
АВ
имеют
следующие координаты
(2-12)
Средняя
точка отрезка
АВ
выражается
через преобразованные конечные точки
.
(2-13)
Возвращаясь к исходной линии AB, можно определить среднюю точку следующим образом:
(2-14)
Применив матрицу преобразования [Т] к средней точке линии АВ, получаем:
(2-15)
Из сравнения
выражений (2-13) и (2-15) видно, что они
одинаковы, и поэтому средняя точка линии
АВ преобразуется
в среднюю точку линии АВ
.
Такой метод
можно применить и к любым другим отрезкам
разделенной линии. Таким образом, при
преобразовании путем умножения на
матрицу гарантируется соответствие
всех точек линии АВ
и А
В
.