Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
питання 14-20 .doc
Скачиваний:
5
Добавлен:
11.09.2019
Размер:
735.23 Кб
Скачать

17. Тривимірні матричні перетворення.

Подібно тому, як двовимірні перетворення описуються матрицями розміром , тривимірні перетворення можуть бути представлені матрицями розміром . Тоді тривимірна точка записується в однорідних координатах як , де . Для отримання декартових координат потрібно перші три однорідні координати розділити на . Два однорідних вектора описують одну декартову точку в тривимірному просторі, якщо , де и - вектори, записані в однорідних координатах.

Матриці перетворень будемо записувати в правосторонній системі координат. При цьому додатній поворот визначається наступним чином. Якщо дивитися з додатної частини осі обертання (наприклад, осі ) в напрямку початку координат, то поворот на проти годинникової стрілки буде переводити одну додатну напіввісь в іншу (вісь в , у відповідності з правилом циклічної перестановки).

Замітимо, що на практиці зручніше застосовувати лівосторонню систему координат, так як в цьому випадку зручніше інтерпретувати той факт, що точки з великими значеннями знаходяться далі від спостерігача.

Запишемо тепер матрицю тривимірного переносу. Аналогічно двовимірному випадку.

, при цьому

.

Операція масштабування:

Перейдемо до операції повороту. Так як при двовимірному повороті в площині координати залишаються незмінними, то поворот навколо осі записується так:

.

Матриця повороту навколо осі має вигляд:

,

і навколо осі :

Зверніть увагу на зміну положення синуса кута з негативним знаком в матриці повороту навколо осі . Правильність цих матриць легко перевірити поворотом одного з ортів на , при цьому він повинен перейти в наступний по порядку орт на відповідній координатній осі.

Обернені перетворення будуть виражатися оберненими матрицями. Для операції переносу потрібно лише замінити знаки компонент вектора переносу на протилежні:

;

для операції масштабування – на обернені значення:

;

для повороту – вибором негативного кута повороту:

.

Результатом декількох послідовних поворотів буде матриця

.

Тут верхня матриця розміром називається ортогональною. Важливою її властивістю є те, що обернена до неї матриця є транспоновоною: . Це корисно тим, що при обрахунках достатньо поміняти індекси місцями та обернене перетворення отримується автоматично.

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

.

Тут верхня частина розміром визначає сумарний поворот і масштабування, а три коефіцієнти останнього рядка – сумарний перенос.

18. Алгоритм Коена-Сазерленда.

Розглянемо алгоритм Коена-Сазерленда для відсікання відрізків прямих. Цей алгоритм дозволяє легко визначати знаходження відрізка повністю всередині або повністю зовні вікна, і якщо так, то його можна малювати або не малювати, не турбуючись про відсікання по границі вікна.

Для роботи алгоритму вся площина в якій лежить вікно розбивається на дев’ять підобластей або квадрантів, як показано на рис. 30.

Рис. 30. Розбиття на підобласті в методі Коена-Сазерленда.

Вікну відповідає область позначена кодом 0000. Кінцевим точкам відрізку приписується 4-бітний код “зовні/всередині” в залежності від знаходження відрізка у відповідній підобласті. Кожному біту присвоюється значення 1 у відповідності із наступним правилом.

Біт 1 - точка знаходиться вище вікна;

Біт 2 – точка знаходиться нижче вікна;

Біт 3 - точка знаходиться справа від вікна;

Біт 4 - точка заходиться зліва від вікна;

Інакше біту присвоюється нульове значення. Значення цих бітів для кінцевих точок відрізків легко визначити по знакам відповідних різниць: - для 1-го біта, - для 2-го біта, - для 3-го біта та - для 4-го біта. Відрізок малюється без відсікання, тобто приймається цілим, якщо обидва коди дорівнюють 0000, або АБО , де АБО – бінарна операція. Відрізок відкидається без обчислень якщо обидва його кінця знаходяться вище, нижче, правіше або лівіше вікна. В цих випадках відповідні біти в обох кодах дорівнюють 1 і це легко визначити, помноживши ці коди по бінарній операції І. Якщо результат операції І дорівнює 0000, то відрізок неможна ні прийняти ні відкинути, так як він може перетинатися з вікном. В цьому випадку застосовується послідовне ділення відрізка, так що на кожному кроці кінцева точка відрізка з ненульовим кодом зовні/всередині замінюється на точку, яка лежить на стороні вікна або на прямій, що містить сторону. При цьому порядок перебору сторін вікна не має значення.