Глава 2

Координатный метод
Координатный метод был введен в XVII веке французскими математиками I Р. Декартом и П. Ферма. На этом методе зиждется аналитическая геометрия, I которую можно считать фундаментом компьютерной графики. В современной компьютерной графике широко используется координатный метод. Этому есть несколько причин.
О Каждая точка на экране (или на бумаге при печати на принтере) задается координатами — например, пикселными.
О Координаты используются для описания объектов, которые будут отображаться как пространственные. Например, объекты микромира, объекты на поверхности Земли, объекты космического пространства и тому подобное. Даже тогда, когда отображается нечто, не имеющее привязки к положению в пространстве (например, случайные цветовые пятна в каком-то видеоэффекте), то и здесь используются координаты для учета взаиморасположения отдельных элементов.
□ При выполнении многих промежуточных действий отображения используют разные системы координат и преобразования из одной системы в другую.
2.1. Преобразование координат
Сначала рассмотрим общие вопросы преобразования координат. Пусть задана и-мерная система координат в базисе (k1, k2, …, kn ), описывающая положение точки в пространстве с помощью числовых значений ki. В компьютерной графике чаще всего используется двумерная (n=2) и трехмерная (n=3) системы координат.
Если задать другую, N-мерную, систему координат в базисе (m1, m2, …, mN) и поставить задачу определения координат в новой системе, зная координаты и старой, то решение (если оно существует) можно записать в таком виде:

где fi— функция пересчета i-ой координаты, аргументы — координаты в системе ki.
Можно поставить и обратную задачу — по известным координатам (m1, m2, ..., mN) определить координаты (к1, к2 ..., кn). Решение обратной задачи запишем так:
где Fi — функции обратного преобразования. В случае, когда размерности систем координат не совпадают (п ≠ N), осуществить однозначное преобразование координат зачастую не удается. Например, по двумерным экранным координатам нельзя без дополнительных условий однозначно определить трехмерные координаты отображаемых объектов. Если размерности систем совпадают (п = N), то также возможны случаи, когда нельзя однозначно решить прямую или обратную задачи. Преобразование координат классифицируют:
□ по системам координат— например, преобразование из полярной системы в прямоугольную;
□ по виду функций преобразования fi
По виду функций преобразования различают линейные и нелинейные преобразования. Если при всех i = 1, 2, ..., N функции fi — линейные относительно аргументов (к1, к2 .... кn), то есть
![]()
где aij — константы, то такие преобразования называются линейными, а при п = N— аффинными.
Если хотя бы для одного i функция fi— нелинейная относительно (k1 , к2,..., кn), тогда преобразование координат в целом не линейно.
Например, преобразование
![]()
нелинейное, так как в выражении для Y присутствует ху.
Тем, кто интересуется математическими аспектами, относящимся к системам координат и преобразованиям систем координат, можно порекомендовать такие книги, как [16, 23].
Линейные преобразования наглядно записываются в матричной форме:

Здесь матрица коэффициентов (aij) умножается на матрицу-столбец (ki) и в результате получается матрица-столбец (mi).
Мы и далее часто будем использовать умножение матриц, поэтому сделаем небольшой экскурс в матричную алгебру. Для двух матриц А размером (т хп) и В размером (пxр):

произведением матриц является матрица С = А В размером (т*р)

для которой элементы сij вычисляются по формуле

Правило вычисления элементов матрицы С можно легко запомнить по названию "строка на столбец". И действительно, для вычисления любого элемента cij необходимо умножить элементы i-й строки матрицы А на элементы j-го столбца матрицы В.

Произведение матриц определено только для случая, когда количество столбцов матрицы А равно количеству строк матрицы В.
Подробнее с матрицами вы можете ознакомиться в специальной математической литературе, например в [5].
Ну а теперь вернемся к преобразованиям координат. Рассмотрим более подробно некоторые отдельные типы преобразований.
Аффинные преобразования на плоскости
Зададим некоторую двумерную систему координат (х, у). Аффинное преобразование координат (х, у) описывается формулами
![]()
где А, В, ..., F — константы. Значения (X, Y) можно трактовать как координаты в новой системе координат.
Обратное преобразование (X, Y) в (х, у) также является аффинным:
![]()
Аффинное преобразование удобно записывать в матричном виде. Константы А, В, ..., F образовывают матрицу преобразования, которая, будучи умноженная на матрицу-столбец координат (х, у), дает матрицу-столбец (X, Y). Однако для того, чтобы учесть константы С и F, необходимо перейти к так называемым однородным координатам — добавим строку с единицами в матрицах координат:

Матричная запись дает возможность наглядно описывать несколько преобразований, которые идут одно за другим. Например, если необходимо сначала выполнить преобразования

а потом — другое преобразование

то это можно описать как

Однако вместо двух преобразований можно выполнить только одно

где матрица (C) равна произведению (В)(А).
Перемножение матриц выполняется так, как это принято в линейной алгебре.
Рассмотрим частные случаи аффинного преобразования.
1. Параллельный сдвиг координат (рис. 2.1).
![]()
В матричной форме:


Обратное преобразование:


2. Растяжение-сжатие осей координат (рис. 2.2).


Обратное преобразование:


Коэффициенты кх и ку могут быть отрицательными. Например, кх = -1 соответствует зеркальному отражению относительно оси y
3. Поворот (рис. 2.3).


Обратное преобразование соответствует повороту системы (X, Y) на угол (-α).

Свойства аффинного преобразования.
□ Любое аффинное преобразование может быть представлено как последовательность операций из числа указанных простейших: сдвиг, растяжение/сжатие и поворот.
□Сохраняются прямые линии, параллельность прямых, отношение длин отрезков, лежащих на одной прямой, и отношение площадей фигур.
Трехмерное аффинное преобразование
Запишем в виде формулы:

где А, B, ..., N — константы.
Дадим также в матричной форме:

Для трехмерного пространства любое аффинное преобразование также может быть представлено последовательностью простейших операций. Рассмотрим их.
1. Сдвиг осей координат соответственно на dx, dy, dz

2. Растяжение-сжатие на кx ку, кz:


