asyan.org
добавить свой файл
1
ЛЕКЦІЯ 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

Розтягування або стискування залежить від значень а і 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 залежить від трьох параметрів с, d і .

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

Матриця перетворення після цього стає матрицею розміру 2*3
a b 

c d  ,

де  і  викликає зсув x* і y* відносно x і у.

Оскільки матриця 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.

Пряма OМ* перетинає площину H=1 в точці M*(x*,y*,1), яка однозначно визначає точку M(x, у) координатної площини 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


Двомірне обертання навколо довільної крапки.

Вище було розглянуто обертання зображення біля початок координат.

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

У загальному випадку алгоритм обертання навколо довільної крапки наступний:

-перенос центру обертання в початок координат;

-поворот відносно початку координат;

-перенос точки обертання в початкове положення.
Приклад: побудувати матрицю перетворення при повороті на кут j навколо точки 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;
Приклад: побудувати матрицю перетворення при розтягуванні уздовж координатних осей з коефіцієнтами а і 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