![](/user_photo/2706_HbeT2.jpg)
- •14. Проектування тривимірних об’єктів.
- •15. Геометричні перетворення. Паралельний перенос. Поворот. Маштабування.
- •16. Однорідні координати та матричне представлення двовимірних перетворень.
- •17. Тривимірні матричні перетворення.
- •18. Алгоритм Коена-Сазерленда.
- •19. Нормуючі перетворення видимого об’єму
- •20. Алгоритми видалення невидимих ребер і граней.
17. Тривимірні матричні перетворення.
Подібно тому, як двовимірні
перетворення описуються матрицями
розміром
,
тривимірні перетворення можуть бути
представлені матрицями розміром
.
Тоді тривимірна точка
записується в однорідних координатах
як
,
де
.
Для отримання декартових координат
потрібно перші три однорідні координати
розділити на
.
Два однорідних вектора описують одну
декартову точку в тривимірному просторі,
якщо
,
де
и
- вектори, записані в однорідних
координатах.
Матриці перетворень будемо
записувати в правосторонній системі
координат. При цьому додатній поворот
визначається наступним чином. Якщо
дивитися з додатної частини осі обертання
(наприклад, осі
)
в напрямку початку координат, то поворот
на
проти годинникової стрілки буде
переводити одну додатну напіввісь в
іншу (вісь
в
,
у відповідності з правилом циклічної
перестановки).
Замітимо, що на практиці зручніше застосовувати лівосторонню систему координат, так як в цьому випадку зручніше інтерпретувати той факт, що точки з великими значеннями знаходяться далі від спостерігача.
Запишемо тепер матрицю тривимірного переносу. Аналогічно двовимірному випадку.
,
при цьому
.
Операція масштабування:
Перейдемо до операції повороту.
Так як при двовимірному повороті в
площині
координати
залишаються незмінними, то поворот
навколо осі
записується так:
.
Матриця повороту навколо осі має вигляд:
,
і навколо осі :
Зверніть увагу на зміну положення синуса кута з негативним знаком в матриці повороту навколо осі . Правильність цих матриць легко перевірити поворотом одного з ортів на , при цьому він повинен перейти в наступний по порядку орт на відповідній координатній осі.
Обернені перетворення будуть виражатися оберненими матрицями. Для операції переносу потрібно лише замінити знаки компонент вектора переносу на протилежні:
;
для операції масштабування – на обернені значення:
;
для повороту – вибором негативного кута повороту:
.
Результатом декількох послідовних поворотів буде матриця
.
Тут верхня матриця розміром
називається ортогональною. Важливою
її властивістю є те, що обернена до неї
матриця є транспоновоною:
.
Це корисно тим, що при обрахунках
достатньо поміняти індекси місцями та
обернене перетворення отримується
автоматично.
Після перемноження довільної
кількості матриць вигляду
та
результуюча матриця завжди буде мати
вигляд:
.
Тут верхня частина розміром визначає сумарний поворот і масштабування, а три коефіцієнти останнього рядка – сумарний перенос.
18. Алгоритм Коена-Сазерленда.
Розглянемо алгоритм Коена-Сазерленда для відсікання відрізків прямих. Цей алгоритм дозволяє легко визначати знаходження відрізка повністю всередині або повністю зовні вікна, і якщо так, то його можна малювати або не малювати, не турбуючись про відсікання по границі вікна.
Для роботи алгоритму вся площина в якій лежить вікно розбивається на дев’ять підобластей або квадрантів, як показано на рис. 30.
Рис. 30. Розбиття на підобласті в методі Коена-Сазерленда.
Вікну відповідає область позначена кодом 0000. Кінцевим точкам відрізку приписується 4-бітний код “зовні/всередині” в залежності від знаходження відрізка у відповідній підобласті. Кожному біту присвоюється значення 1 у відповідності із наступним правилом.
Біт 1 - точка знаходиться вище вікна;
Біт 2 – точка знаходиться нижче вікна;
Біт 3 - точка знаходиться справа від вікна;
Біт 4 - точка заходиться зліва від вікна;
Інакше біту присвоюється
нульове значення. Значення цих бітів
для кінцевих точок відрізків легко
визначити по знакам відповідних різниць:
- для 1-го біта,
- для 2-го біта,
- для 3-го біта та
- для 4-го біта. Відрізок малюється без
відсікання, тобто приймається цілим,
якщо обидва коди дорівнюють 0000, або
АБО
,
де АБО – бінарна операція. Відрізок
відкидається без обчислень якщо обидва
його кінця знаходяться вище, нижче,
правіше або лівіше вікна. В цих випадках
відповідні біти в обох кодах дорівнюють
1 і це легко визначити, помноживши ці
коди по бінарній операції І. Якщо
результат операції І дорівнює 0000, то
відрізок неможна ні прийняти ні відкинути,
так як він може перетинатися з вікном.
В цьому випадку застосовується послідовне
ділення відрізка, так що на кожному
кроці кінцева точка відрізка з ненульовим
кодом зовні/всередині замінюється на
точку, яка лежить на стороні вікна або
на прямій, що містить сторону. При цьому
порядок перебору сторін вікна не має
значення.