НОУ ІНТУЇТ | лекція | Основи машинної графіки
Математичні основи комп'ютерної графіки
Для того щоб відображати графічні об'єкти на дисплеї потрібно мати якийсь інструмент, що дозволяє легко і просто описувати ці об'єкти на мові математики. Положення точок на площині дуже зручно описувати за допомогою декартової системи координат. Щоб створити декартову систему координат потрібно провести дві прямі неколінеарна лінії, які називають осями. Нехай вони перетинаються в точці O, яку називають початком координат. Виберемо на побудованих осях одиницю виміру. Тоді положення будь-якої точки площини можна описати через координати цієї точки, які представляють собою відстані від початку координат до проекцій точки на відповідні осі координат. Проекцією точки на координатну вісь називається точка перетину прямої, що проходить через задану точку і паралельної інший осі координат. Взагалі введені осі координат можуть розташовуватися під довільним кутом ( Мал. 1.1 ).
Однак, на практиці зручно користуватися системою координат зі взаємно перпендикулярними осями. Така система координат називається ортогональної. Осі координат мають назви; горизонтальна вісь називається віссю абсцис (Ox), вертикальна - віссю ординат (Oy). Таким чином, точка на площині представляється двома своїми координатами, що записується у вигляді двовимірного вектора P = (x, y).
Математичний апарат опису точок на площині за допомогою декартової системи координат ідеально підходить для виконання різних афінних перетворень над точками (зрушення, масштабування, обертання).
Крапку P (x, y), задану на площині можна перенести (зрушити) в нову позицію шляхом додавання до координат цієї точки констант переносу. Для довільної точки P = (x, y), яка переміщується в нову точку P '= (x', y '), зрушуючи на Tx одиниць паралельно осі абсцис і на Ty одиниць паралельно осі ординат, можна записати наступні вирази: x' = x + Tx, y '= y + Ty. Так, наприклад, точка з координатами P (1,2) зміщуючись на відстань (5,7) перетворюється в точку P '(6,9). Визначаючи точку і перенос як вектор -строкі P = (x, y), P '= (x', y ') і T = (Tx, Ty) можна записати перетворення перенесення (зсуву) у векторній формі: (x', y ') = (x, y) + (Tx, Ty) або P' = P + T. Перетворенню можна піддати не тільки одні точки. Геометричний об'єкт можна перемістити, застосувавши до кожної його точці перетворення перенесення. Так, якщо в описі об'єкта є відрізки прямої, то досить застосувати перетворення до кінців відрізка і потім провести пряму лінію між двома перетвореними точками. Це правило справедливо і для операцій масштабування і повороту. на Мал. 1.2 представлений результат дії на трикутник операції перенесення на відстань (2, -1).
Точки можна піддати операції масштабування (розтягування або стиснення) в Sx раз уздовж осі абсцис і в Sy раз уздовж осі ординат. Отримані в результаті нові точки будуть виражатися як: x '= x * Sx; y '= y * Sy. Визначивши S як
дані вирази можна записати в матричній формі: або P '= P * S. на Мал. 1.3 показаний трикутник, промасштабірованний з коефіцієнтами 0,5 по осі абсцис і коефіцієнтом 2 уздовж осі ординат.
Слід зазначити, що операція масштабування проводиться щодо початку координат. В результаті перетворення об'єкт може стати менше / більше в розмірах і ближче / далі від початку координат. Пропорції об'єкта також можуть змінитися при масштабуванні з різними коефіцієнтами: . Для збереження пропорцій необхідно, щоб масштабні коефіцієнти були рівні: Sx = Sy.
Точка площині P = (x, y) може бути повернута на довільний кут щодо початку координат і перейде в нову точку P '= (x', y ') ( Мал. 1.4 )
Виведемо формули для перерахунку точки (x, y) в точку (x ', y'). Позначимо відстань від початку координат до точки P (x, y) через Очевидно, що відстань від початку координат до точки P '(x', y ') також буде Нехай Q і Q '- проекції точок P і P' відповідно на вісь абсцис. Тоді з прямокутного трикутника OP'Q 'і тригонометричних визначень синуса і косинуса маємо:
Домножим праву і ліву частини рівнянь на
Використовуючи найпростіші тригонометричні властивості прямокутного трикутника OPQ, слід зауважити, що , а . Таким чином, формула "перекладу" точки P (x, y) в точку P '(x', y ') поворотом на кут щодо початку координат буде:
У матричному вигляді перетворення обертання буде виглядати так:
Так трикутник з координатами вершин (20,0), (60,0), (40,100) після повороту на кут 45 градусів за годинниковою стрілкою щодо початку координат градусів матиме нові значення координат вершин: .
Точка площині P (x, y) може бути легко відображена щодо прямих y = 0, x = 0, y = x наступним чином. Відображення відносно прямої y = 0 (вісь абсцис) може бути отримано з використанням матриці Так, наприклад, точка P = (2,3) при такому відображенні перетворюється в точку ( Мал. 1.5 ).
Подібним чином матриця відображення відносно прямої x = 0 (вісь ординат) буде мати вигляд Точка P = (2,3) при відображенні щодо осі ординат перетворюється в точку ( Мал. 1.5 ).
Відображення відносно прямої y = x здійснюється за допомогою матриці Точка P = (2,3) в результаті такого відображення перетворюється в точку ( Мал. 1.5 ).
Розглянуті вище аффінниє перетворення перенесення, масштабування, обертання і відображення можна записати в матричній формі наступним чином: P '= P + T, P' = P * S, P '= P * R, P' = P * M, де P ' - координати перетвореної точки, P - координати вихідної точки, T - вектор зсуву (translate), S - матриця масштабування (scale), R - матриця обертання (rotate), M - матриця відображення (mirror). На жаль, операція переносу (зсуву) реалізується окремо (за допомогою додавання) від масштабування, повороту і відображення (за допомогою множення). Проте, існує можливість, щоб всі ці елементарні перетворення (перенос, масштабування, обертання, відображення) можна було реалізувати за допомогою тільки операцій множення матриць. Дана можливість реалізується за допомогою так званих однорідних координат точки.