Глава 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: