Опубликован: 20.10.2007 | Доступ: свободный | Студентов: 3779 / 858 | Оценка: 4.38 / 3.99 | Длительность: 12:07:00
ISBN: 978-5-94774-654-9
Специальности: Программист
Лекция 3:

Геометрические преобразования

Матрицы

Для выполнения преобразований векторов в пространстве мы будем использовать матричный метод. Матрицей размерности n\times n называется таблица чисел вида

A=
\begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \ldots & a_{nn}
\end{pmatrix}.

В дальнейшем будем использовать сокращенную запись для матрицы: A=(a_{ij}). Строки матрицы A_i=(a_{i1},a_{i2},\ldots,a_in) будем называть вектор-строками (поскольку каждая из них определяет вектор), а столбцы A^j - вектор-столбцами. Матрицы являются эффективным инструментом для выполнения преобразований на плоскости и в пространстве. В этих случаях применяются матрицы размерности 2\times 2 и 3\times 3.

Сначала введем ряд операций над матрицами и векторами.

Пусть заданы матрицы A=(a_{ij}) и B=(b_{ij}). Суммой матриц называется матрица C=(c_{ij}), элементами которой являются c_{ij}=a_{ij}+b_{ij}.

Определим также операцию умножения матрицы на число. Результатом умножения матрицы A=(a_{ij}) на число \alpha является матрица B=(b_{ij}), элементы которой b_{ij}=\alpha a_{ij}.

Произведением двух матриц A=(a_{ij}) и B=(b_{ij}) называется матрица C=(c_{ij}), элементы которой определяются следующим образом:

c_{ij}=\sum_{k=1}^n a_{ik}b_{kj}.

Произведение матриц некоммутативно, т.е. в общем случае A\cdot B\ne B\cdot A.

Предыдущие определения мы вводили для матриц произвольной размерности. Следующие операции будут связаны с векторами, и мы будем подразумевать, что n=2 или n=3. Пусть задана матрица A=(a_{ij}) и вектор \overrightarrow{r}=(x_1,\ldots,x_n). Результатом умножения матрицы на вектор является вектор \overrightarrow{r}_0=(x_1^0,\ldots,x_n^0), координаты которого вычисляются как скалярное произведение строки матрицы на вектор:

x_i^0=\sum_{k=1}^n a_{ik} x_k \equiv(A_i\cdot\overrightarrow{r}).

Если матрица B=(b_{ij}) получена из матрицы A=(a_{ij}) путем замены всех вектор-строк на вектор-столбцы, т.е. b_{ij}=a_{ji}, \; i, \; j=1,\ldots,n, то ее называют транспонированной матрицей A и обозначают A^T.

Аналогичным образом определяется умножение вектора на матрицу, только в этом случае вектор скалярно умножается на вектор-строки матрицы. Матрица вида

E=
\begin{pmatrix}
1 & 0 & \ldots & 0 \\
0 & 1 & \ldots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \ldots & 1
\end{pmatrix}
называется единичной и обладает следующими свойствами:

  • A\cdot E=E\cdot A=A для любой матрицы A.
  • \overrightarrow{r}=E\cdot\overrightarrow{r} для любого вектора \overrightarrow{r}.
  • Если для матрицы A существует матрица B, такая, что A\cdot B=E, то B называется обратной матрицей к A и обозначается A^{-1}. При этом A\cdot A^{-1}=A^{-1}\cdot A=E, и для любого вектора \overrightarrow{r} получаем соотношения: если \overrightarrow{r}'=A\cdot\overrightarrow{r}, то \overrightarrow{r}=A^{-1}\cdot\overrightarrow{r}'.
  • Если для матриц A и B существуют обратные матрицы, то существует и обратная матрица для их произведения и (a\cdot B)^{-1}=B^{-1}\cdot A^{-1}.

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

Отметим, что для геометрических преобразований удобно использовать матрицы размерностью на единицу больше, чем размерность пространства, но об этом подробнее речь пойдет в следующей главе.

Геометрические преобразования (перенос, масштабирование, вращение)

Геометрические объекты на плоскости и в пространстве можно подвергать ряду различных преобразований. Наиболее употребительными в задачах компьютерной графики являются:

  • перемещение (параллельный перенос);
  • изменение размеров (масштабирование);
  • повороты вокруг некоторой точки на плоскости или некоторой оси в пространстве (вращение).

В дальнейшем мы часто будем отождествлять точки пространства с радиус-вектором, определяемым этой точкой.

Сначала рассмотрим преобразования на плоскости, или двумерные преобразования.

Параллельный перенос объекта сводится к перемещению всех его точек на одно и то же расстояние d в одном и том же направлении, заданном определенным вектором \overrightarrow{v}. Если этот вектор имеет длину d, то операция переноса может быть реализована путем сложения всех точек объекта с вектором \overrightarrow{v}. Довольно просто доказать, что при такой операции сохраняются расстояния между точками и, как следствие, углы между отрезками. Понятно также, что отрезки прямых перейдут в отрезки прямых. Поэтому при переносе многоугольника нет необходимости подвергать этой операции бесконечное множество точек, достаточно просто перенести вершины, а затем соединить их отрезками.

Масштабирование объекта можно реализовать путем умножения координат всех его точек на некоторое число. Пусть имеются точки с координатами (x_1,y_1) и (x_2,y_2), над которыми выполняется такое преобразование. Результатом будут новые точки с координатами (S_x x_1,S_y y_1) и (S_x x_2,S_y y_2). Если S_x=S_y=S_0, то несложно доказать, что обе точки переместятся вдоль прямых, проходящих через саму точку и начало координат, т.е. в направлении своего же радиус-вектора (рис. 3.5). При этом расстояние между новыми точками будет в S_0 раз отличаться от прежнего, но углы между отрезками сохранятся (это можно показать, если выразить косинус угла через скалярное произведение векторов). Ясно, что если коэффициент масштабирования S_0 больше единицы, соответствующий отрезок растягивается, а если меньше, то сжимается. Кроме того, при таком преобразовании объект смещается.

В случае, когда S_x\ne S_y, расстояния между точками изменятся неравномерно, поскольку растяжения в горизонтальном и вертикальном направлениях будут различными. Углы между отрезками также не сохранятся (рис. 3.6).

Масштабирование с сохранением углов

Рис. 3.5. Масштабирование с сохранением углов
Масштабирование с искажением углов

Рис. 3.6. Масштабирование с искажением углов
Дмитрий Трефилов
Дмитрий Трефилов

Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Виктор Власов
Виктор Власов
Россия, г.Самара
Виталий Аверьянов
Виталий Аверьянов
Россия, Самарская область