Материал: Lecture_notes_on_discipline_Meth

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

16

1.7.1 Трансляція

Рисунок 1.6 – Трансляція (переміщення) об’єкта

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

Xw = Xm + a Yw = Ym + b Zw = Zm + c

w0 в матричний формі:

X w

 

1 0

0

a

 

X m

Y

 

 

0 1

0

b

 

Y

 

w

 

 

 

 

 

 

m

Zw

0

0

1

c

Zm

 

 

 

 

0

0

 

 

 

 

1

 

 

0

1

 

1

 

Trans (a, b, c), де

Xm, Ym, Zm – модельні координати точки об’єкта; a, b, c – величини переміщення у напрямках x, y, z; Trans (a, b, c) – однорідна матриця трансляції.

Операція трансляції в OpenGL реалізується наступним чином glTranslated (GLdouble offset_x, GLdouble offset_y,

GLdouble offset_z);

1.7.2 Обертання

При обертанні об'єкту навколо осі Х світової системи координат на кут θ координати можуть бути визначені так:

16

17

X w

 

1

Y

 

 

0

w

 

 

 

 

 

0

Zw

 

1

 

 

0

0

0

0

 

X m

cos

sin

0

 

Y

 

 

 

 

 

m

sin

cos

0

 

 

 

 

Zm

0

0

1

 

1

 

 

 

 

 

 

 

Rot(X,θ)

Rot (x, θ) – однорідна матриця обертання навколо осі Х. При обертанні навколо осі Y:

cos

0

sin

0

 

 

0

1

0

0

 

Rot(Y , )

 

 

 

0

cos

0

 

sin

 

 

0

0

0

1

 

При обертанні навколо осі Z:

cos

sin

0

0

 

 

sin

cos

0

0

 

Rot(Z, )

 

 

0

0

1

0

 

 

 

 

0

0

0

1

 

Матриця перетворення для довільної осі визначається перемноженням наведених вище трьох матриць.

У бібліотеці Open GL обертання реалізується так:

glRotated (GLdouble angle,GLdouble X,GLdouble Y,GL double Z)

1.7.3 Відображення (mapping)

Полягає в обчисленні координат точок в деякій системі координат по відомих координатах тієї ж точки в іншій системі

координат (наприклад, світові координати координати спостережника).

Рисунок 1.7– Відображення між системами координат.

17

18

X 2 Y2

 

Z2 1T T1 2 X1 Y1

 

X 2

 

nx

ox

ax

px

 

 

Y

 

 

n

y

o

y

a

y

p

 

 

 

 

2

 

 

 

o

a

p

y

 

Z

2

 

n

z

z

z

 

 

 

 

 

 

 

 

 

 

 

z

 

 

 

1

 

 

0

0

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z1 1T

X1

Y1

Z1

1

Припустимо х1 = 0, y1 = 0, z1 = 0, тоді х2 = рх, у2 = ру, z2 = рz, тобто рх,pу,pz – визначають координати початку відліку системи

Х1Y1Z1 в системі координат Х2Y2Z2.

Якщо підставити х1 = 0, y1 = 0, z1 = 0, то: х2 = nx + px; y2 = ny + py,

де nx,ny,nz – компоненти х2, у2, z2 одиничного вектора, направленого уздовж осі х1 системи координат Х1Y1Z1 (обчислюються з урахуванням взаємної орієнтації систем координат).

Аналогічно, ох,oу,oz – компоненти х2, у2, z2 одиничного вектора осі Y1; ах,aу,az – компоненти х2, у2, z2 одиничного вектора осі Z1.

1.7.4 Інші матриці перетворення

Для масштабування об'єкту відносно початку координат з коефіцієнтом Sx по осі Х, Sу по осі У, Sz по осі Z застосовується така матриця перетворення:

X '

Sx

0

0

Y

'

 

0

S y

0

 

 

 

 

0

0

Sz

Z

'

 

 

 

 

0

0

0

1

 

 

 

 

 

 

 

0X

0Y

0Z

11

Відображення об'єкту відносно дзеркальної площини ХУ полягає у зміні знаку координати z та виконується так:

X '

1

0

0

0 X

 

 

 

0

1

0

0

 

 

Y '

 

 

Y

 

 

 

 

0

0

1

0

 

 

Z '

 

 

Z

 

1

 

 

0

0

0

1

1

 

Відображення відносно дзеркальних XZ, YZ площин виводиться аналогічно.

18

19

2 БАЗОВІ АЛГОРИТМИ КОМП’ЮТЕРНОЇ ГРАФІКИ

2.1 Малювання прямої лінії

Це фундаментальна задача комп’ютерної графіки, для розв’язку якої використовуються наступні алгоритми.

Прямий алгоритм. Хай задані координати кінців відрізку прямої (х11)(х22). Щоб намалювати відрізок необхідно визначити які пікселі мають бути задіяні між двох кінцевих точок та зафарбувати їх. Для горизонтальних та вертикальних ліній це нескладно, а для похилих – використовується спеціальний алгоритм.

Р1

y2 Р2 y1

х1 х2

Рисунок 2.1 – Малювання відрізку прямої лінії

З елементарної алгебри відомо:

у=у1+m(x – x1),

m= у2 у1 ,

х2 х1

де m-кутовий коефіцієнт, х - змінюється від х1 до х2.

 

Ні

│ х21

│>│ у21

Так

 

 

 

 

Цикл по y

 

 

 

 

Цикл по х

 

 

 

 

 

 

Для всіх уі від у1 до

 

 

хі=x1…x2

у2 знаходять хі=f(ys)

 

 

yi=f(xi)

Рисунок 2.2– Прямий алгоритм

19

20

Можемо рухатись по х від х1 до х2 (при х12) з одиничним кроком, знаходити у та округлювати його до найбличого цілого числа.

В залежності від кута нахилу прямої, виконуєтья цикл по осі х або у.(рис.2.2)

Недоліки: у циклі виконується багато зайвих операцій (наприклад: розрахунок m, ділення, множення), що обумовлює малу швидкість алгоритму. Якщо винести m за цикл, то доведеться використовувати операціі з «плавоючою крапкою», а це й похибка представлення чисел й помилки виконання арифметичних операцій з «плавоючою крапкою». При обчисленні координат шляхом додавання прирощень може накопичуватися помилка обчислень координат і на останньому кроці виявиться, що у≠у2.

Переваги: простота та зрозумілість побудови алгоритму; можливість роботи з дробовими (нецілими) значеннями координат відрізку.

Інкрементні алгоритми (підхід Брезенхема) дозволяють побудувати цикл розрахунку координат на основі тільки цілочисельних операцій (+, - та порівняння).

Інкрементний алгоритм виконується як послідовний розрахунок координат сусідніх пікселів, шляхом додавання прирощень координат, котрі розраховуються на основі аналізу функцій похибки (положення кожного піксела вдовж прямої, розраховується на основі інформації про попередній піксел).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Восьмизв'язність

Чотирьохзв'язність

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

inc у=-1

 

 

 

 

 

 

 

 

 

inc у=-1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

inc x=-1

 

 

 

 

 

 

 

inc x=1

 

inc x=-1

 

 

 

 

 

inc x=-1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

inc у=1

Рисунок 2.3– Випадки при обчисленні прирощень координат для переходу до сусіднього пікселя

20