Скачиваний:
67
Добавлен:
16.04.2013
Размер:
3.38 Mб
Скачать

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

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

Каждое преобразование представляет собой цельное математическое понятие и в качестве такового обозначается собственным именем или символом.

Преобразованиям подвергаются характерные точки (и только точки!) примитивов изображения.

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

Двумерные преобразования Перенос (сдвиг)

Точки на xy - плоскости можно перенести в новые позиции путем добавления к координатам этих точек констант переноса. Для каждой точки Р(х, у), которая перемещается в новую точку Р' (х', у'), сдвигаясь на mx единиц параллельно оси х и на my единиц параллельно оси у, можно написать уравнения

x' = x + mx, y' = y + my. (7.1)

На рис. 7.1 показана точка с координатами (1, 2), которая смещается на расстояние (5, 7), преобразуясь в точку (6, 9). Определяя векторы-отроки

Р = [х у], Р' = [х' у'], М = [mx my],

можно переписать уравнение (7.1) в векторной форме

[x' y'] = [x y] + [mx my], (7.2)

или более кратко

Р' = Р + М

Объект можно перенести, применяя уравнения (7.1) к каждой его точке. Однако, поскольку каждый отрезок, описывающий объект, состоит из бесконечного числа точек, такой процесс длился бы бесконечно долго. К счастью, все точки, принадлежащие отрезку, можно перенести путем перемещения одних лишь крайних точек отрезка и последующего вычерчивания нового отрезка между получившимися в результате точками. Это справедливо также для масштабирования (растяжения) и поворота.

На рис. 7.2 показан результат действия на контур домика операции переноса на расстояние (3, —4).

Масштабирование

Точки можно масштабировать ("растянуть") в Sx раз вдоль оси х и в Sy раз вдоль оси у, получив в результате новые точки, с помощью умножения

x' = x*Sx, y'=y*Sy. (7.4)

Определяя S как матрицу

Sx 0

S =

0 Sy

можно записать в матричной форме (7.5)

Sx 0

x' y' = x y * 0 Sy

или

P' = P*S. (7.6)

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

На рис. 7.3 отдельная точка (6, 6) масштабируется с коэффициентами 1/2 по оси х и 1/3 по оси у. На рис. 7.4 показан контур домика, промасштабированный c коэффициентами 1/2 по оси х и 1/4 по оси у. В результате преобразования домик стал меньше и ближе к началу координат. Если бы масштабные множители были больше 1, то домик увеличился бы и отдалился от начала координат.

Пропорции домика также изменились: было применено неоднородное масштабирование, при котором Sx Sy.

Однородное масштабирование, для которого Sx = Sy, не влияет на пропорции изображения.