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

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

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

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

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

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

Міністерство освіти і науки України Національний університет “Львівська Політехніка” кафедра САПР Звіт до лабораторної роботи № 2 по темі: “ Афінні перетворення та анімація засобами мови Turbo Pascal версії 7.0” з курсу “ Геометричне моделювання у конструюванні інженерних об’єктів і систем” 1. МЕТА РОБОТИ Ознайомитись із законами руху геометричних об(єктів на площині та у просторі. Оволодіти математичною мовою опису динаміки та візуалізації на основі закономірностей геометричних перетворень. Набути практичних навиків розробки графічних процедур у середовищі Turbo Pascal в графічному режимі. 2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ. Елементарні афінні перетворення: перенос; масштабуваня; зсув; поворот (обертання); Процедура setcolor(<колір>), де <колір> – змінна типу word, яка задає колір. У модулі Graph є такі константи для задання кольору: Black=0; {чорний} Blue=1; {синій} Green=2; {зелений} Gray=3; {голубий} Red=4; {червоний} Magenta=5; {фіолетовий} Brown=6; {коричневий} LightGrey=7; {світло-сірий} DarkGrey=8; {темно-сірий} LightBlue=9; {яскраво-синій} LightGreen=10; {яскраво-зелений} LightCyan=11; {яскраво-голубий} LightRed=12; {рожевий} LightMagenta=13; {малиновий} Yellow=14; {жовтий} White=15; {білий} MoveTo(x,y) — встановлює невидимий графічний курсор у точку із координатами (x,y). LineTo(x,y) — проводить лінію із точки, в яку встановлено невидимий графічний курсор у точку із координатами (x,y). SetFillStyle(<штриховка>,<колір>) — встановлює стиль (тип і колір) штриховки. FloodFill(x,y,<колір контура>) — заштриховує замкнутий контур, x,y– координати точки всередині замкнутого контура, <колір контура> — колір лінії, яка формує замкнутий контур. Rectangle(x1,y1,x2,y2) — малює прямокутник за координатами точок відрізка – головної діагоналі. InitGraph(<драйвер>,<режим>,’<шлях до файлу *.BGI відповідного драйвера>’). Драйвери, наприклад: EGA, VGA, IBM8514 …, для кожного із яких існує свій відповідний номер, наприклад для VGA – 9, який потрібно ввести на місце першого параметра процедури ініціалізації графічного режиму InitGraph. Лабораторне завдання. Ознайомитись із графічними командами мови Turbo Pascal. Створити алгоритм розв(язку індивідуального завдання. Скласти програму на мові Паскаль, набрати у текстовому редакторі інтегрованого середовища. Записати створену програму на диск. Запустити на виконання програму. Отримати результати виконання програми згідно індивідуального завдання. Здійснити аналіз результатів та сформулювати висновки по роботі. Оформити звіт про роботу. Варіант індивідуального завдання №3. Написати імітаційну програму із застосуванням афінних перетворень, яка дозволяє в автоматичному та при ручному керуванні створювати динамічно змінну візуалізацію, при якій моделюється процес випару суміші трьох рідин із різною температурою кипіння.  ТЕКСТ ПРОГРАМИ Program lab2_gr; Uses Crt, Graph; Type coord=record x,y:integer end; zv=^pointer; pointer=record cord:coord; col:word; prev:zv; next:zv end; Label l1; Var driver,mode,maxX,maxY,i,x,y,k,la2,la3:integer; cords:array[1..10] of coord; ozn1,ozn2,ozn3,choise:byte; vbaz,vcur,vlast:zv; colbuf,kol:word; ch:char; str:string; Procedure setcoords; Begin cords[1].x:=0; cords[1].y:=200; cords[2].x:=100; cords[2].y:=190; cords[3].x:=150; cords[3].y:=205; cords[4].x:=220; cords[4].y:=195; cords[5].x:=300; cords[5].y:=180; cords[6].x:=410; cords[6].y:=195; cords[7].x:=550; cords[7].y:=205; cords[8].x:=580; cords[8].y:=220; cords[9].x:=600; cords[9].y:=170; cords[10].x:=639; cords[10].y:=200; End; Procedure fon; Var ifon:integer; Begin setcolor(colbuf); if ozn1<>0 then begin moveto(0,250); for ifon:=1 to 10 do lineto(cords[ifon].x,cords[ifon].y); lineto(maxX,250); lineto(0,250); setfillstyle(10,14); floodfill(10,240,colbuf) end; if ozn2<>0 then begin rectangle(0,la2,639,300); setfillstyle(10,12); floodfill(10,275,colbuf) end; if ozn3<>0 then begin rectangle(0,la3,maxX,maxY); setfillstyle(10,13); floodfill(10,maxY-2,colbuf) end End; Procedure delbuble; Begin if vbaz<>nil then begin vcur:=vbaz; vbaz:=vbaz^.next; vbaz^.prev:=nil; vcur^.next:=nil; dispose(vcur) end End; Procedure addbuble(adx,ady:integer;adkol:word); Begin if vbaz=nil then begin new(vbaz); vbaz^.prev:=nil; vbaz^.next:=nil; vbaz^.cord.x:=adx; vbaz^.cord.y:=ady; vbaz^.col:=adkol end else begin vcur:=vbaz; while vcur^.next<>nil do vcur:=vcur^.next; new(vcur^.next); vcur^.next^.prev:=vcur; vcur:=vcur^.next; vcur^.next:=nil; vcur^.cord.x:=adx; vcur^.cord.y:=ady; vcur^.col:=adkol; vlast:=vcur end End; Procedure buble(ibub:integer); Var j:integer; Begin if ibub=1 then for j:=1 to ozn1 do begin x:=random(maxX); y:=185+random(55); kol:=14; addbuble(x,y,kol) end; if ibub=2 then for j:=1 to ozn2 do begin x:=random(maxX); y:=260+random(30); kol:=12; addbuble(x,y,kol) end; if ibub=3 then for j:=1 to ozn3 do begin x:=random(maxX); y:=maxY-random(39); kol:=13; addbuble(x,y,kol) end End; Procedure bubles; Var bx,by:integer; Begin vcur:=vbaz; while vcur<>nil do begin bx:=vcur^.cord.x; by:=vcur^.cord.y; setcolor(vcur^.col); circle(bx,by,4); vcur:=vcur^.next end; setcolor(colbuf) End; Procedure analyze; Label 1; Begin 1: while vbaz^.cord.y=0 do delbuble; vcur:=vbaz^.next; while vcur^.next<>nil do begin if vcur^.cord.y=0 then begin if vcur^.next<>nil then vcur^.next^.prev:=vcur^.prev; vcur^.prev^.next:=vcur^.next; dispose(vcur); goto 1 end; vcur:=vcur^.next end End; Procedure adcordbu(speed:integer); Begin { while vbaz^.cord.y<=1 do delbuble;} vcur:=vbaz; while vcur<>nil do begin vcur^.cord.y:=vcur^.cord.y-speed; vcur:=vcur^.next end; { analyze} End; Begin l1: writeln('Enter your chosie:'); writeln('1-Manual animation;'); writeln('2-Automatic animation.'); readln(str); if str='1' then choise:=1 else if str='2' then choise:=2 else choise:=0; if (choise<>1) and (choise<>2) then begin writeln('WRONG choise!!!'); goto l1 end; driver:=3; mode:=1; InitGraph(driver,mode,''); maxX:=GetMaxX; maxY:=GetMaxY; colbuf:=10; setcoords; la2:=250; la3:=300; ozn1:=1; ozn2:=1; ozn3:=1; vbaz:=nil; vcur:=nil; Randomize; for i:=1 to 100 do begin if (i div 5)=ozn1 then ozn1:=ozn1+1; if (i div 40)=ozn2 then ozn2:=ozn2+1; if (i div 40)=ozn3 then ozn3:=ozn3+1; if (i mod 3 = 0) and (ozn1<>0) then for k:=1 to 10 do cords[k].y:=cords[k].y+1; if (ozn1=0) and (ozn2<>0) then la2:=la2+1; if (i mod 2=0) and (ozn2=0) then la3:=la3+3; if i>50 then begin ozn1:=0; ozn2:=ozn2+2; ozn3:=ozn3+0 end; if i>75 then begin ozn2:=0; ozn3:=ozn3+2 end; if ozn1<>0 then buble(1); if ozn2<>0 then buble(2); if ozn3<>0 then buble(3); fon; bubles; adcordbu(1); if choise=1 then ch:=readkey; if ch='a' then choise:=2; if choise=2 then delay(100); ClearViewPort end; addbuble(maxX,maxY,13); while {vbaz^.cord.y>=30} vlast^.cord.y>=1 do begin bubles; adcordbu(3); delay(5); ClearViewPort end; moveto(trunc(maxX/2),trunc(maxY/2)); setcolor(white); outtext('The End.'); moverel(-100,15); outtext('(Press any key to exit)'); readkey; closegraph; End. Висновок: виконавши лабораторну роботу, я ознайомився із законами руху геометричних об(єктів на площині та у просторі, із математичною мовою опису динаміки та візуалізації на основі закономірностей геометричних перетворень, набув практичних навиків розробки графічних процедур у середовищі Turbo Pascal у графічному режимі, а також ознайомився і набув практичних навиків анімування зображень.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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