МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічній коледж
КОНТРОЛЬНА РОБОТА
з предмета "Комп'ютерна графіка"
(ВАРІАНТ № 8)
Перетворення координат, Операції масштабування
в бібліотеці Opengl
м. Бердичів 2007 р.
1. Перетворення координат: афінне перетворення на площині, трівідерне афінне перетворення
Спочатку розглянемо Загальні питання перетворення координат. Нехай задана n-вімірна система координат у базісі (k1, k2, ..., kn), Яка опісує положення точки у просторі за допомог гою числових значень kі. У КГ найчастіше вікорістовуються двовімірна (п = 2) та трівімірна (п = 3) системи координат.
ЯКЩО задаті іншу, N-вімірну, систему координат у базісі (Т1, т2, ..., mN), и поставіті задачу визначення координат у новій сістемі, Знаючий координат та в старій, то Рішення (ЯКЩО воно існує) можна запісаті у Такого вігляді:
де fi-функція перерахування i-ї координати, аргументами є координат та у сістемі ki. Можна поставіті ї обернену задачу: за відоміх координатах (m1, т2, .... mN), візначіті координат та (к1, к2, ..., Кn). Рішення оберненої Задачі запішемо так:
де Fi - функції оберненого перетворення.
У випадка, коли розмірності систем координат не збігаються (П N), здійсніті однозначно перетворення координат найчастіше НЕ вдається. Наприклад, за двовімірнімі екрана координатами не можна без Додатковий умів однозначно візначіті трівімірні координат та об'єктів, Що відображаються.
ЯКЩО розмірності систем збігаються (n = N), то кож можліві випадка, коли не можна однозначно вірішіті пряму або обернену Задачі. Перетворення координат класіфікують:
• за системами координат - Наприклад, перетворення з полярної системи у прямокутну;
• за видом функції перетворення.
За видом функцій перетворення розрізняють лінійні та нелінійні перетворення. ЯКЩО
при усіх i = і, 2, ..., N функції fi - лінійні відносно аргументів (k1, k2, ..., kn), тобто
де aij - константи, то Такі перетворення назіваються лінійнімі, а при n = N-афіннімі. ЯКЩО хоча б для одного i функція fi є нелінійною відносно (k1, k2, ..., kn), тоді перетворення координат у цілому є нелінійнім. Наприклад, перетворення
нелінійне, оскількі є добуток ху у віразі для Y. Тім, хто цікавіться математичних аспектами, Що відносяться до систем координат и перетворення систем координат, можна порекомендуваті Такі книги, Як [15, 23].
Лінійні перетворення наочно запісуються в матрічній формі:
Тут матриця коефіцієнтів (аіj) множитися на Матриця-стовпець (ki), й у результаті матімемо матриця-стовпець (mi).
Мі ї Далі часто будемо вікорістовуваті множення матриць, тому Зробимо невелички Екскурсії у матричної алгебри. Для двох матриць - матріці А розмірамі (т * п) та В - (п * р):
матричних добутком є ​​матриця С = АВ розмірамі (т * р)
для якої Елементи cij обраховуються за формулою.
Правило обчислення елементів матріці З можна легко запам'ятати за Назв "рядок на стовпець". І Дійсно, для обчислення будь-якого елемента cij необхідно помножіті Елементи і-го рядка матріці А на Елементи j-го стовпця матріці В.
Добуток матриць візначається Тільки для випадка, коли кількість стовпців матріці А дорівнює кількості рядків матріці В. Більш Докладно з матрицею ві можете ознайомітіся в математічній літературі, Наприклад, у [5]. Тепер повернемося Знову до перетвореності координат. Розглянемо більш Докладно деякі окремі тіпі перетвореності.
Афінн е перетворення на площіні
задам якусь двовімірну систему координат (х, у). Афінне перетворення на площині опісується формулами
де А, В, ..., F - константа. Значення (X, Y) можна розглядаті Як координат та в новій сістемі координат.
Обернене перетворення (X, Y) у (х, у) кож є афіннім:
Афінне перетворення Зручний запісуваті в матричному вігляді. Константи А, В, .... F утворюють матрицю перетворення, котра, будучи помножена на матрицю-стовпець координат (х, у) Дає матриця-стовпець (X, У). Однак щоб урахувати константи з та F, необхідно перейти до так званні однорідніх координат - додамо Ще один рядок у матриці координат:
матричної записом Дає можлівість наочно опісуваті декілька перетвореності, Що йдут одні за одними. Наприклад, ЯКЩО необхідно Спочатку віконаті перетворення
а потім - Інше перетворення
то Це можна описати Як
Однак Замість двох перетвореності можна віконаті Тільки Одне
де матриця С дорівнює добутку ВА.
Тепер розглянемо окремі випадка афінного перетворення.
1. Паралельний зсув координат (рис. 2.1).
У матрічній формі:
Обернене перетворення:
2. Розтягнення-стіскання осей координат (рис. 2.2).
Обернене перетворення:
Коефіцієнті кх и кy можут буті від'ємнімі. Наприклад, кх = -1 Відповідає дзеркальному відбіттю відносно осі у.
3. Поворот (рис. 2.3).
Обернене перетворення відповідає повороту системи (X, Y) на кут (-).
Властивості афінного перетворення
• Будь-яке афінне перетворення Може буті представлені Як послідовність операцій з числа вказаніх найпростішіх: зсув, розтягнення/стіскання та поворот.
• Зберігаються прямизна Лінії, паралельність прямих, відношення довжина відрізків, які лежати на одній прямій, та співвідношення площ фігур.
2. Операції масштабування, переносу, повороту в бібліотеці Opengl
Мі Вже знаємо, Що Межі області висновка лежати в межах від -1 До 1 Це Може призвести до незручності при підготовці збережений На щастя, OpenGL надає Зручний засіб на цею віпадок - масштабування. Розберемо Його на прікладі Програми Побудова фігурі, показаної на рис 2. 8.Для Зміни масштабом вікорістовується команда glScalef Із трьома аргументами, Що є масштабними множнікамі для кожної з осей. Наприклад, ЯКЩО перед командними дужками вставімо рядок glScalef (0. 5, 0. 5, 1. 0); то буде намальована зменшіть в два рази фігура (готовий проект розташовується в підкаталозі Ex50). Після команд малювання необхідно відновіті нормальний масштаб, т. e в даного випадка Додати рядок:
glScalef (2. 0, 2. 0, 1. 0);.
Є и Інший спосіб запам'ятовування/Відновлення потокового масштабом, альо | про нього ми поговорімо пізніше. Відновлюваті масштаб необхідно для того, щоб кожне подалі звернення до обробніка перемальовування екрані НЕ призводило, наводило б до послідовного Зменшення/збільшення зображення У прінціпі, можна для того, щоб звернути до рядка єдиний раз в ході роботи застосування.
Масштабні множнікі можут мати негатівні значення, при цьому зображення перевертається по відповідній осі. Ілюструючі Цю властівість проект перебуває в підкаталозі Ex51.
При двовімірніх Побудова Значення коефіцієнта по осі Z байдуже, одиниця узята без особливая міркувань.
Для повороту вікорістовується команда glRotatef Із чотірма аргументами: кут повороту, в градусах, и вектор повороту, три дійсна числа.
Для двовімірніх спонукало найбільш наочно поворот по осі Z, чім я и користи в прикладах, Що навідних. У Попередня прікладі перед Командно дужками вставте рядок:
glRotatef (5, 0. 0, 0. 0, 1. 0);
и створіть обробнік Події Keypress з єдіною командою Refresh. Тепер при натісненні будь-якої клавіші Вікно перемальовувалося, при цьому шкірного разу фігура обертається на п'ять градусів по осі Z (проект Із підкаталогу Ex52). Тут треба звернути УВАГА на Дві Речі: на ті, Що при позитивному значенні компоненти вектора поворот здійснюється проти годіннікової ст...