Лекция 6 Преобразование на плоскости



Скачать 93,63 Kb.
Дата20.10.2016
Размер93,63 Kb.

ЛЕКЦИЯ 6

Преобразование на плоскости


Представление графических изображений осуществляется точками и линиями.

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



Аффинные преобразования на плоскости.

В компьютерной графике всё, что относится к двухмерному случаю, обозначается символом 2D (2–dimension).

Будем пользоваться декартовой системой координат – это удобный способ связывания геометрического объекта (т.М) – с числами X, Y – её координатами, которые позволяют количественно описывать геометрические фигуры.


y y y* x*

 M (x, y)
 M* (x*, y*) M (x, y)
x x

В декартовой системе координат преобразования можно рассматривать двояко:

–изменяется положение точки, а система координат та же;

–сохраняется точка, а изменяется координатная система.

В дальнейшем будем рассматривать первый случай: в заданной системе прямоугольных координат преобразуется точка плоскости.

Преобразованные координаты описываются соотношениями:



X* = ax + by + ;

Y* = cx + dy + ; общее аффинное преобразование,

где a, b, c, d, ,  – произвольные числа.

Для перемещения точки на плоскости необходимо описать закон изменения её координат.

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

–параллельный перенос;

–вращение;

–зеркальное отображение;

–растяжение или сжатие.

Выбор этих случаев определяется двумя обстоятельствами:

–каждое из приведенных преобразований имеет простой и наглядный геометрический смысл;

–любое преобразование на плоскости можно представить как последовательное исполнение (суперпозицию) простейших преобразований: параллельный перенос, вращение, растяжение и отражение.



1). Параллельный перенос.

Y y

M* M*

M

M O*


X O X
Переводит точку С с координатами X и Y в точку М* с координатами X* и Y*.

X* = x + ;

Y* = y + ;

Пример: перемещение прямой на плоскости

2). Зеркальное отражение.

y y
M M* M
x x

M*

x* = +x; x* = –x;

y = –y; y* = y;

относительно оси абсцисс относительно оси ординат


3).Растяжение (сжатие)

y y


 M  M* x* = a * x;

y* = d * y;

 M*  M


x x

Растяжение или сжатие зависит от значений a и d.



 M

M*

x

O

Если a>1 и d<1, то прямоугольник растягивается по Х и сжимается

по Y.


Если a>1 и d>1 , то прямоугольник растягивается по X и Y.

Для эффективного использования этих известных формул в компьютерной графике удобнее пользоваться матричной записью:

–значения координат точки М можно рассматривать как

элементы матрицы [x, y] – вектор-строка или x –вектор-столбец.

y

–так растяжение:



a 0 x x* x* = a * x;

0 d y = y* y* = d * y;

отражение:

x 1 0 x* = x;

y 0 -1 ось абсцисс y* = –y;


x -1 0 x* = –x;

y 0 1 ось ординат y* = y;


4). Вращение

Перед получением матрицы вращения рассмотрим преобразование единичного квадрата .



y

0 0 – т. А



D C 1 0 – т. В

1 1 – т. С

0 1 – т. D

A B x
Применение общего матричного преобразования

a b к единичному квадрату приводит к следующему

c d

результату:



0 0 0 0 A*

1 0 a b a b B*

1 1 c d = a+c b+d C*

0 1 c d D*


Результаты:

–начало координат не подвергается преобразованию; A=A*=[0 0]

–координата В* определяется первой строкой общей матрицы преобразования;

–координата D* определяется второй строкой общей матрицей преобразования.

Таким образом, если координаты точка В* и точка D* известны, то общая матрица преобразования определена.

Рассмотрим вращение единичного квадрата вокруг начала координат. Вращение против часовой стрелки принимается за положительное.



y
B – B* ; x* = 1 * cos

C* y* = 1 * sin



D – D* ; x* = -1 * sin

D* C y* = 1 * cos






B*

 

A A* B x
Общую матрицу вращения можно записать:



x y cos sin x* = x * cos – y * sin;

-sin cos y* = x * sin + y * cos;

Таким образом, получили:
вращение(rotation)

x cos -sin x* = x * cos – y * sin;

y sin cos y* = x * sin + y * cos;
–растяжение(dilatation)

x a 0 x* =a*x;

y 0 d y*= d*y;


отражение(reflection)

x 1 0 x* =x; по оси абсцисс

y 0 -1 y* = -y;
–перенос(translation); x* = x + 

y* = y + 

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

x* = ax + by + ;

y* = cx + dy + ; – общие аффинные преобразования;

–при a=d=1 и b=c=0 – получаем перенос;

–при a=d=cos и –b=c=sin, ==0 – вращение;

–при a=1, d=–1, c=b== – отражение;

–при b=c== – растяжение (сжатие);

В матричном описании основных преобразований отсутствует операция параллельного переноса, т.е. с помощью матрицы описаны:

x* = ax + by;

y* = cx + dy; – отсутствуют.

 и  , а изменение координаты по X зависит от трёх параметров

a,b, и по Y зависит от трёх параметров c,d и .

Значит, чтобы охватить матричным подходом четыре простейших преобразования, необходимо перейти к описанию произвольной точки не парой чисел (x,y), а тройкой чисел [x,y,1] и [x*,y*,1]

Матрица преобразования после этого становится матрицей размера 2*3

a b 

c d  ,


где  и  вызывает смещение x* и y* относительно x и y.

Поскольку матрица 2*3 не является квадратной, то она не имеет обратной матрицы.

Поэтому её дополняют до квадратной, размера 3*3.

a b 


c d  – третья компонента векторов положения точек не

0 0 1 изменяет.

Используя эту матрицу,

x a b  x*

y c d  = y*

1 0 0 1 1

получаем преобразованный вектор [x*, y*, 1].

В общем случае [X, Y, H].

Преобразование было выполнено так, что

[X, Y, H] = [x*, y*, 1]

Преобразование, имеющее место в трехмерном пространстве, в нашем случае ограничено плоскостью H=1.

Прямая OM* пересекает плоскость H=1 в точке M*(x*,y*,1), которая однозначно определяет точку M(x, y) координатной плоскости XY.

Представление двухмерного вектора трёхмерным или в общем случае n–мерного вектора (n+1)–мерным называют однородным координатным воспроизведением.

В однородных координатах запись будет в виде:

a c 0

[x, y, H]=[x, y, 1] * b d 0

  1 ,

где x = x*, y = y*, H = 1.



В общем случае H не равняется 1 и преобразованные обычные координаты получаются за счет нормализации однородных координат, т.е.

X* = x/H; Y* = y/H.

Основная матрица преобразования размера для однородных двухмерных координат имеет вид:

a b 


c d 

m n s


И может быть разделена на четыре части

a, b, c, d – осуществляет изменение масштаба, сдвиг и вращение;

 и  – выполняет смещение;

m и n – получение проекции;

s – производит полное изменение масштаба.

Так как при H, которое не равняется, мы получаем изображение в трёхмерном пространстве, то для простоты вычислений в 2D используем H=1 и матрицу обобщенную на четыре преобразования:

x* x a b  x* = ax + by + ;

y* = y * c d  y* = cx + dy + ;

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

вращения (rotation):



cos -sin 0 cos sin 0

sin cos 0 обратная -sin cos 0

0 0 1 0 0 1
–растяжение(dilatation):

a 0 0 1/a 0 0 x* = ax;

0 d 0 обратная 0 1/d 0 y* = dy;

0 0 1 0 0 1

–отражение(reflection):



1 0 0 1 0 0 x* = x;

0 –1 0 обратная 0 –1 0 y* = -y;

0 0 1 0 0 1
переноса(translation):

1 0  1 0 - x* = x + ;

0 1  обратная 0 1 - y* = y + .

0 0 1 0 0 1




Двухмерное вращение вокруг произвольной точки.

Выше было рассмотрено вращение изображения около начало координат.

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

В общем случае алгоритм вращения вокруг произвольной точки следующий:

–перенос центра вращения в начало координат;

–поворот относительно начала координат;

–перенос точки вращения в исходное положение.
Пример: построить матрицу преобразования при повороте на угол  вокруг точки M(m,n) , не совпадающей с началом координат.

Y




 M
x

1). Перенесем плоскость на вектор M(-m, -n) для совмещения точки поворота с началом координат:

1 0 -m


T_= 0 1 -n

0 0 1


2). Поворот на угол :

cos -sin 0

R= sin cos 0

0 0 1
3).Перенесем плоскость на вектор M(m, n) для вращения точки поворота в начало координат:

1 0 m

T= 0 1 n


0 0 1

Результирующая матрица:



1 0 m cos -sin 0

M=T * R * T_= 0 1 n * sin cos 0 =

0 0 1 0 0 1

cos -sin m 1 0 -m cos -sin -mcos + nsin + m

= sin cos n * 0 1 -n = sin cos -msin – ncos + n

0 0 1 0 0 1 0 0 1




x* x


y* = y * M

1 1

T * R –T_

X* = xcos ­– ysin – mcos + nsin + m;

Y* = xsin + ycos – msin – ncos + n;


Пример: построить матрицу преобразования при растяжении вдоль координатных осей с коэффициентами a и d.

1 0 -m


1). T_ = 0 1 -n

0 0 1


a 0 0


2). D = 0 d 0

0 0 1



1 0 m


3). T = 0 1 n

0 0 1



1 0 m -a 0 0 1 0 -m

M= 0 1 n * 0 d 0 * 0 1 -n ;

0 0 1 0 0 1 0 0 1



a 0 -am + m



M= 0 d -dn + n

0 0 1

Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©grazit.ru 2017
обратиться к администрации

    Главная страница