Афінні перетворення та анімація засобами мови TURBO PASCAL версії 7.0

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2005
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Моделювання

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет “Львівська політехніка” кафедра САПР З В І Т до лабораторної роботи №2 з курсу: “ Геометричне моделювання у конструюванні інженерних об’єктів і систем ” на тему: “ Афінні перетворення та анімація засобами мови TURBO PASCAL версії 7.0.” Тема роботи: Афінні перетворення та анімація засобами мови TURBO PASCAL версії 7.0. Мета роботи: ознайомитись із законами руху геометричних об'єктів на площині та у просторі. Оволодіти математичною мовою опису динаміки та візуалізації на основі закономірностей геометричних перетворень. Набути практичних навиків розробки графічних процедур у середовищі TURBO PASCAL в графічному режимі . Короткі теоретичні відомості Геометричне перетворення - це відображення р' = f(р) точки р є Rn n- мірного простору образу в точку р' є Rn’ n’ -мірного простору перетворення (де Rn - евклідів простір розмірності п. Геометричне перетворення поділяються на нелінійні (наприклад, відображення у кривому дзеркалі) та лінійні. Лінійне перетворення точки описується векторним рівнянням: р'= рА + В з матрицями перетворення А є Rn×n та В є Rl×n, що не залежать від вектора p/ У залежності від розмірності просторів п, n’ та властивостей матриці А лінійні перетворення поділяються на невироджені (афінні) та вироджені (проективні). Властивості афінного перетворення: п = n’, rang(А) = п (де rang(A) — ранг матриці А, рівний числу її лінійно незалежних строк чи стовпців), що означає квадратність та невиродженість матриці А. Існування зворотної матриці А1 дозволяє по точці р' відновити точку образу р: р = (р'-В)А-1 При проективному перетворенні т<п та не існує оберненої матриці А , тому однозначне відновлення образу за прообразом неможливе через втрату інформації про одну чи декілька координат образу. Афінні перетворення (від англ. affinity — подібність) — точкові взаємно однозначні відображення площини (простору) на себе, при яких прямі переходять у прямі. Якщо на площині задана декартова система координат, то кожне афінне перетворення цієї площини може бути визначене за допомогою так званого невирожденого лінійного перетворення координат х та у точок цієї площини. Кожний афінний простір може бути визначений за допомогою невирождених лінійних перетворень координат точок простору. Сукупність усіх афінних перетворень площини (простору) на себе утворить групу афінних перетворень. Це означає, зокрема , що послідовне проведення двох афінни перетворень еквівалентно деякому одному афіннму перетворенню. Прикладами афінних перетворень можуть бути ортогональне перетворення (це перетворення є переміщення чи площини чи простору, переміщення із дзеркальним відображенням); перетворення подоби; рівномірне „стиснення". Рівномірне „стиснення" з коефіцієнтом к площини п до розташованого на ній прямої а — перетворення, при якому точки а залишаються на місці, а кожна точка М, що не лежить на а площини n зміщається по променю, що проходить через М перпендикулярно а, у таку точку М', що відношення відстаней від М i М' до а дорівнює к, аналогічно визначається рівномірне "стиснення" простору до площини. Всяке афінне перетворення площини можна одержати, виконавши деяке ортогональне перетворення і послідовне „стиснення" до деяких двох перпендикулярним прямим. Кожне афінне перетворення простору можна здійснити за допомогою деякого ортогонального перетворення і послідовних „стиснень" до деяких трьох взаємно перпендикулярним площинам. При афінному перетворенні паралельні прямі та площини перетворяться в паралельні прямі та площини. Властивості афінних перетворень широко використовуються в різних розділах математики, механіки і теоретичної фізики. Так, у геометрії афінні перетворення застосовуються для так званої афінної класифікації фігур. У механіці афінні перетворення використовуються при вивченні малих деформацій безупинного суцільного середовища; при таких деформаціях малі елементи середовища в першому наближенні піддаються афінному перетворенню. Афінне перетворення має наступні властивості: відображає n-мірний об'єкт у п' -мірний — точку в точку, лінію в лінію, поверхню уповерхню; зберігає паралельність ліній та плоскостей; зберігає пропорції паралельних об'єктів — довжин відрізків на паралельних прамих таплощин на паралельних площинах. Прийоми створення динамічних графічних образів Перерисовка об’єкта Найбільш простий метод моделювання об'єкта, що рухається, складається в багаторазовому його перемальовуванні зі зсувом координат — на поточному кроці по поточним координатах об'єкт малюється, запам'ятовуються старі та визначаються його нові координати, задається затримка (її величина визначить швидкість об'єкта). Потім проходить малювання кольором по старих координатах і повторення процесу на наступному кроці. Цей метод застосуємо для виводу не занадто складних об'єктів невеликого розміру, прорисовувати які можна досить швидко. До того ж колір у всій області руху повинний бути тим самим. Індивідуальне завдання Варіант № 16 Написати імітаційну програму з застосуванням афінних перетворень, яка дозволяє в автоматичному режимі та при ручному керуванні створювати динамічно змінну візуалізацію при якій моделюється переміщення кола по екрану з відбиванням від країв екрану. У центрі екрану помістити стрілку-вказівник, що орієнтується на центр кола, що рухається. Алгоритм розв’язку завдання Першим кроком є ініціалізація графічного режиму. Далі малюємо прямокутну область на весь екран синього кольору, як би створюємо поле руху кола. Рух кола здійснюється наступним чином: малюється коло з координатами центра х, у, викликається затримка на 20 мілісекунд. Стирається коло і малюється наступне коло того самого радіуса, але з координатами центра x+dx, y+dy. Як тальки відстані між центром кола і „стінкою поля” приріст відповідної координати змінює свій знак на протилежний. Малювання стрілки описане в окремій функції. Відстань між центром і кола і серединою екрану можна визначити за формулою: , і маючи різницю х1 - х2 можна визначити косинус кута нахилу стрілки до осі абсцис, а потім і сам кут нахилу. Маючи кут нахилу і довжину стрілки можна визначити другі координати стрілки і намалювати стрілку. Аналогічно до кола, рух стрілки здійснюється по принципу „перерисовка об’єкту”. Кожний цикл програма перевіряє чи було натиснута хоча б одна клавіша. Якщо був натиснутий пробіл – ми переходимо в автоматичний режим, в якому за допомогою стрілок можна керувати рухом кола. Повторний натиск пробілу поверне нас в автоматичний режим. Клавіша ESC – вихід. Текст програми #include<conio.h> #include<dos.h> #include<graphics.h> #include<iostream.h> #include<math.h> #include<stdio.h> #include<stdlib.h> #define FALSE 0 #define TRUE 1 #define BOOL int void Strilka(int xc, int yc) { double x1, y1, len, deg; int cx = 320, cy = 240, clen = 40; int a, b; int xa1, xa2, ya1, ya2; double adeg = M_PI/180 * 4; len = sqrt(pow(cx-xc,2) + pow(cy-yc,2)); a = xc - cx; // b = yc - cy; deg = acos(double(a/len)); if(yc < cy) { y1 = clen * sin(-deg) + cy; ya1 = (clen - clen/4) * sin(-(deg - adeg)) +cy; ya2 = (clen - clen/4) * sin(-(deg + adeg)) +cy; } else { deg = acos(double(a/len)); y1 = clen * sin(deg) + cy; ya1 = (clen - clen/4) * sin((deg - adeg)) +cy; ya2 = (clen - clen/4) * sin((deg + adeg)) +cy; } x1 = clen * cos(deg) + cx; xa1 = (clen - clen/4) * cos(-(deg - adeg)) +cx; xa2 = (clen - clen/4) * cos((deg + adeg)) +cx; fillellipse(cx, cy, 3, 3); line(cx, cy, x1, y1); line(x1, y1, xa1, ya1); line(x1, y1, xa2, ya2); } int main() { int x, y, r; int dx = 1, dy = 1; int i; int gdriver = DETECT, gmode, errorcode; BOOL fexit, fauto; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if (errorcode != grOk) { printf ("Graphics eror: %s \n", grapherrormsg(errorcode)); return 0; } randomize(); x = random(500) + 20; y = random(400) + 20; r = 10; rectangle(0,0,632,472); setfillstyle(1,1); bar(0,0,632,472); fexit = FALSE; fauto = TRUE; int ch; int rd = 10; do { if(kbhit()) { ch = getch(); switch(ch) { case 27: fexit = TRUE; break; case 32: fauto = !fauto;break; case 72: if(!fauto) //up { y-=rd; } break; case 80: if(!fauto) //down { y+=rd; } break; case 75: if(!fauto) //left { x-=rd; } break; case 77: if(!fauto) //right { x+=rd; } default: break; } } if(fauto) { x=x+dx; y=y+dy; if((x<12)||(x>620)) dx = -dx; if((y<14)||(y>458)) dy = -dy; } else { if(x<14) { x = 12; dx = 10; fauto = TRUE; } if(x>618) { x = 616; dx = -5; fauto = TRUE; } if(y<14) { y = 12; dy = 10; fauto = TRUE; } if(y>458) { y = 460; dy = -10; fauto = TRUE; } } setcolor(15); circle(x, y, r); setfillstyle(1, 15); fillellipse(x, y, r, r); Strilka(x, y); delay(10); setcolor(1); circle(x, y, r); setfillstyle(1, 1); fillellipse(x, y, r, r); Strilka(x, y); } while (!fexit); return 0; } Висновок:Під час даної лабораторної роботи я ознайомилась із законами руху геометричних об'єктів на площині та у просторі, математичною мовою опису динаміки та візуалізації на основі закономірностей геометричних перетворень.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!