Опубликован: 20.10.2007 | Уровень: специалист | Доступ: платный
Лекция 4:

Представление геометрической информации

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

Однородные координаты. Задание геометрических преобразований в однородных координатах с помощью матриц

В предыдущей главе описывались геометрические преобразования на плоскости и в пространстве, а также было показано, как можно использовать аппарат матриц для таких задач. Для преобразований на плоскости применялись двумерные векторы и матрицы размерностью 2\times 2. В пространстве, соответственно, с этой же целью использовались трехмерные векторы и матрицы 3\times 3. Но такой подход не позволяет задавать с помощью матриц преобразования переноса и проекции. В связи с этим в проективной геометрии был разработан аппарат, позволяющий унифицировать все геометрические преобразования путем введения так называемых однородных координат.

Для пояснения такого подхода сначала рассмотрим случай двумерного пространства. Каждая точка плоскости с координатами (x,y) может одновременно рассматриваться как точка трехмерного пространства с координатами (x,y,1), т.е. как точка, лежащая на плоскости z=1. С другой стороны, каждой точке трехмерного пространства (x,y,z) при условии z\ne 0 соответствует единственная точка этой же плоскости \left( \frac{x}{z},\frac{y}{z},1 \right). При этом получается, что каждой точке плоскости (x,y,1) соответствует прямая, проходящая через начало координат, т. е. устанавливается взаимно однозначное соответствие между точками плоскости и множествами (tx,ty,t), \; -\infty<t<\infty, \;t\ne 0.

Если теперь рассматривать точку плоскости как принадлежащую трехмерному пространству, то ее двумерные преобразования можно будет описывать с помощью матриц 3\times 3, причем можно будет задавать таким способом не только повороты и масштабирование, но и сдвиги и проекции (как ортографические, так и центральные).

Поворот на угол \alpha относительно начала координат можно осуществить с помощью новой матрицы поворота:

\begin{pmatrix}
x' \\ y' \\ 1
\end{pmatrix}
=
\begin{pmatrix}
\cos\alpha & -\sin\alpha & 0 \\
\sin\alpha & \cos\alpha & 0 \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\ y \\ 1
\end{pmatrix}.
Операция масштабирования может быть записана в виде
\begin{pmatrix}
ax \\ by \\ 1
\end{pmatrix}
=
\begin{pmatrix}
a & 0 & 0 \\
0 & b & 0 \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\ y \\ 1
\end{pmatrix}.
Перенос на вектор (x_0,y_0) также можно задать с помощью матрицы:
\begin{pmatrix}
x+x_0 \\ y+y_0 \\ 1
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & x_0 \\
0 & 1 & y_0 \\
0 & 0 & 1
\end{pmatrix}
\begin{pmatrix}
x \\ y \\ 1
\end{pmatrix}.
Проекции точки на оси координат определяются с помощью матриц проекции:
P_x=
\begin{pmatrix}
1 & 0 & 0 \\
0 & 0 & 0 \\
0 & 0 & 1
\end{pmatrix}, \quad
P_y=
\begin{pmatrix}
0 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{pmatrix}.

Перейдем теперь к трехмерному пространству. Каждой точке (x,y,z) будем ставить в соответствие точку четырехмерного пространства (x,y,z,1), а для выполнения основных преобразований будем использовать матрицы размерностью 4\times 4. Строятся они совершенно аналогично тому, как это делалось в двумерном случае. Матрица сдвига на вектор (x_0,y_0,z_0) имеет вид

P=
\begin{pmatrix}
1 & 0 & 0 & x_0 \\
0 & 1 & 0 & y_0 \\
0 & 0 & 1 & z_0 \\
0 & 0 & 0 & 1
\end{pmatrix},
матрица масштабирования тоже очевидным образом строится из трехмерной матрицы:
S=
\begin{pmatrix}
a & 0 & 0 & 0 \\
0 & b & 0 & 0 \\
0 & 0 & c & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}.
Проекции точек на координатные плоскости осуществляются с помощью матриц (более подробно проекции и их виды будут рассмотрены позднее):
P_{xy}=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}, \quad
P_{yz}=
\begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}, \quad
P_{zx}=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}.
Умножение этих матриц на вектор приводит к тому, что обнуляется одна из координат, и в результате получаем проекцию точки на соответствующую плоскость.

Матрица поворота относительно оси OX на угол \alpha выглядит следующим образом:

R_x=
\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & \cos\alpha & -\sin\alpha & 0 \\
0 & \sin\alpha & \cos\alpha & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}.
Отсюда легко понять, как строятся матрицы поворота относительно других координатных осей, а также матрица поворота относительно произвольной оси. Просто берем матрицы, построенные в третьей главе, и расширяем их путем добавления уже известных единичных вектора-строки и вектора- столбца:
\begin{pmatrix}
* & * & * & 0 \\
* & * & * & 0 \\
* & * & * & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}.

Путем объединения приведенных элементарных преобразований можно построить и более сложные. В третьей главе мы использовали произведение простых матриц вращения для построения матрицы поворота относительно произвольной оси. Приведем один пример.

Пусть в пространстве заданы два отрезка - \overline{AB} и \overline{CD}. Будем строить матрицу преобразования, переводящую первый отрезок во второй. Это преобразование разложим на следующие элементарные действия.

  1. Сдвиг, перемещающий точку A=(A_x,A_y,A_z) в точку C=(C_x,C_y,C_z).
  2. Сдвиг начала координат в эту же точку.
  3. Если отрезки неколлинеарны:
    • строится вектор нормали к плоскости, в которой лежат отрезки (для этого можно использовать векторное произведение исходных векторов);
    • поворот относительно вектора нормали, совмещающий два отрезка по направлению (угол поворота можно определить с помощью скалярного произведения исходных векторов).
  4. Масштабирование с целью выравнивания длины отрезков.
  5. Возвращение начала координат в исходную точку.

Каждое из этих преобразований реализуется с помощью матрицы, а полное преобразование можно выполнить, используя произведение матриц.

Использование матриц очень удобно для выполнения преобразований в пространстве, хотя в некоторых случаях это приводит к избыточному числу выполняемых операций. Например, поворот одной точки в пространстве относительно координатной оси OZ с помощью матриц в однородных координатах требует 16 операций умножения и 12 операций сложения. В то же время он легко может быть выполнен с помощью формул преобразования

\begin{gathered}
x'=x\cos\alpha-y\sin\alpha \\
y'=x\sin\alpha+y\cos\alpha
\end{gathered},
т.е. с помощью всего лишь четырех умножений и одного сложения и одного вычитания. Операции сдвига также гораздо более экономично выполнять без использования матриц. Но когда речь идет о суперпозиции многих преобразований (как, например, в случае поворота относительно произвольной оси), то целесообразно применять соответствующую матрицу поворота. Эффективность матричного подхода очень сильно возрастает, если матричные операции реализованы аппаратно. Вопрос о том, в каких случаях использовать матрицы, а в каких нет, во многом зависит от возможностей вычислительной техники, уровня сложности задачи и требований к временным характеристикам процесса визуализации.

Вопросы и упражнения

  1. Какие геометрические объекты считаются примитивами?
  2. Какие требования предъявляются к набору геометрических примитивов?
  3. В какой программе впервые в качестве геометрического примитива использовался прямоугольник?
  4. Что такое объектная система координат?
  5. Что такое система координат наблюдателя?
  6. Соответствуют ли размеры объектов в системе координат наблюдателя их реальным размерам?
  7. Что такое картинная плоскость?
  8. Как называется операция перехода от трехмерной системы координат к двумерной?
  9. Что происходит при перенесении изображения с картинной плоскости на экран?
  10. Чем отличаются однородные координаты точки от обычных декартовых координат?
  11. С какой целью вводятся однородные координаты?
  12. Сколько элементарных действий требуется для совмещения двух отрезков в пространстве?
  13. Всегда ли использование матриц для выполнения преобразований в пространстве эффективней, чем другие способы их реализации?
< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Сабина Бахриддинова
Сабина Бахриддинова
Дмитрий Трефилов
Дмитрий Трефилов

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Олег Волков
Олег Волков
Россия, Балаково, МБОУ СОШ 19