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

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

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

Рік:
2010
Тип роботи:
Графіки
Предмет:
Інші
Група:
СІ-22

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”   ПОБУДОВА РУХОМИХ ЗОБРАЖЕНЬ ДО ЛАБОРАТОРНОЇ РОБОТИ № 4 З КУРСУ “КОМП’ЮТЕРНА ГРАФІКА” ПОВНИЙ ТЕКСТ ЗАВДАННЯ 1. Вивчити основні матричні перетворення на площині для побудови рухомих зображень. 2. Вивести результуючу матрицю руху для свого варіанту завдання, визначеного викладачем. Параметри зображення задані в таблиці 1 в пікселах. 3. Написати програму мовою Турбо-Паскаль, що дозволяє сформувати на екрані комп’ютера рухоме зображення. Таблиця 1. № варіанту Структура зображення Пояснення   11    Рух квадрата по видимому квадратному контуру за годинниковою стрілкою. В кожній вершині контура квадрат повертається на 90 градусів. Кольори контура і квадрата різні. Параметри : a=20, A=80   ОСТАТОЧНА ВЕРСІЯ БЛОК-СХЕМИ АЛГОРИТМУ Процедура NCORNERBUILDER ні так Процедура R2Move 1 2 ні 4 так 3 5 6 так ні 7 так ні 8 9 10 так ні 11 так ні 12 13 14 15 16 17 18 ні 19 так 20 21 22 23 24 Процедура R2ShapeRotator 1 2 3 4 ні так 5 6 7 ні так 8 9 10 11 12 13 14 15 ні так 16 17 18 19 20 21 22 23 Процедура R2Shape 1 2 3 4 5 6 7 8 9 10 11 12 13 1 14 15 16 17 18 Головна програма 1 2 3 4 5 6 7 ні так 8 9 10 11 12  13 14 ні 15 так 16  17 18 19 20 21 22 23 24 25 26 27 ні так 28  29 30 ні так 31 32 33 СПИСОК ІДЕНТИФІКАТОРІВ КОНСТАНТ, ЗМІННИХ, ПРОЦЕДУР ТА ФУНКЦІЙ, ВИКОРИСТАНИХ У БЛОК-СХЕМІ АЛГОРИТМУ І ПРОГРАМИ, ТА ЇХ ПОЯСНЕННЯ СПИСОК : Q R1 R2 N DRIVER MODE I K W P FLOODPOINTX FLOODPOINTY PIX MAS POINT X0 Y0 DX0 DY0 X Y F FW DQ DDQ XC YC BUFX BUFY MOVEX MOVEY XW YW X1 Y1 X2 Y2 X3 Y3 MOVETYPE1 MOVETYPE2 SWITCH1 SWITCH2 ПОЯСНЕННЯ ІДЕНТИФІКАТОРІВ ЗМІННИХ : Q – кут повороту R1 – радіус кола, описаного навколо 1 квадрата R2 – радіус кола, описаного навколо 2 квадрата N – кількість сторін многокутника Driver – тип графічного адаптера Mode – режим роботи адаптера I – лічильник K – лічильник W - лічильник P – лічильник Floodpointx – координата по осі абсцис точки для заливки об’єкта Floodpointy – координата по осі ординат точки для заливки об’єкта Pix – кількість пройдених проміжків об’єктом під час руху Mas – лічильник Point - номер точки повороту X0 – абсциса центру квадрата Y0 – ордината центру квадрата Dx0 – переміщення по осі абсцис Dy0 – преміщення по осі ординат X – абсциса реперної точки Y – ордината реперної точки F – кут між реперними точками FW – кут повороту фігури при побудові Dq – крок кута повороту Ddq – кут повороту Xc – абсциса точки повороту Yc – ордината точки повороту Bufx – абсциса положення центру фігури після повороту Bufy – ордината положення центру фігури після повороту Movex – абсциса положення центру фігури під час руху Movey – ордината положення центру фігури під час руху Xw – проміжний масив абсцис реперних точок Yw – проміжний масив ординат реперних точок X1 – масив абсцис реперних точок 1 квадрата Y1 – масив ординат реперних точок 1 квадрата X2 – масив абсцис реперних точок 2 квадрата Y2 – масив ординат реперних точок 2 квадрата X3 – масив абсцис реперних точок для графічної побудови квадрата Y3 – масив ординат реперних точок для графічної побудови квадрата Movetype1 – рух вверх або вперед Movetype2 – рух вниз або назад Switch1 – 1 тип руху для комбінацій Movetype1 Switch2 – 2 тип руху для комбінацій Movetype2 ПОЯСНЕННЯ ПРОЦЕДУР ТА ФУНКЦІЙ : INITGRAPH – ініціалізує графічний режим GRAPHRESULT – тестує роботу графічного режиму SETFILLSTYLE – задає тип та колір штрихування FLOODFILL – штрихує замкнену фігуру за точкою що знаходиться в ній та заданим кольором границі Lineto – проводить лінію з поточного положення курсора в точку (x,y) Delay – затримка Clrscr – очистка текстового екрану ClearDevice – очистка графічного екрану CloseGraph – закриття графічного режиму Moveto – переміщення курсора у вказану точку Setcolor – задання кольору ОСТАТОЧНА ВЕРСІЯ ПРОГРАМИ Program Lab_4_11; uses crt,graph; const Q=pi/2; R1=(40/sin((45/180)*pi)); R2=(10/sin((45/180)*pi)); N=4; type massiv=array [1..4] of real; var driver,mode,i,k,w,p,floodpointx,floodpointy,pix,mas,point:integer; x0,y0,dx0,dy0,x,y,f,fw,dq,ddq,xc,yc,bufx,bufy,movex,movey:real; xw,yw,x1,y1,x2,y2,x3,y3:massiv; Movetype1,Movetype2,switch1,switch2:boolean; procedure nCornerBuilder(n:integer;R:real;fw:real;x0:real;y0:real); begin f:=fw; y:=sin(f)*R+y0; x:=cos(f)*R+x0; moveto(round(x),round(y)); f:=2*pi/n+fw; i:=1; while(f<=2*pi+fw) do begin y:=sin(f)*R+y0; x:=cos(f)*R+x0; xw[i]:=(x); yw[i]:=(y); lineto(round(x),round(y)); f:=f+2*pi/n; i:=i+1; end; end; procedure R2Shape(x1:massiv;x2:massiv;y1:massiv;y2:massiv); procedure R2Move(pix:integer;Movetype1:boolean;Movetype:boolean;switch1:boolean;switch2:boolean); begin for w:=1 to pix do begin cleardevice; fw:=pi/4; if(switch1) then if(Movetype1) then movey:=movey-5 else movex:=movex+5; if(switch2) then if(Movetype2) then movey:=movey+5 else movex:=movex-5; y0:=movey; x0:=movex; setcolor(green); Ncornerbuilder(n,R2,fw,x0,y0); setfillstyle(1,green); floodfill(trunc(movex),trunc(movey),green); for mas:=1 to n do begin x2[mas]:=xw[mas]; y2[mas]:=yw[mas]; end; x0:=(Getmaxx/2); y0:=(Getmaxy/2); fw:=pi/4; setcolor(blue); Ncornerbuilder(n,R1,fw,x0,y0); delay(150); end; end; procedure R2ShapeRotator(point:integer); begin xc:=x1[point]; yc:=y1[point]; dq:=q/10; ddq:=0; for p:=1 to 10 do begin ddq:=ddq+dq; cleardevice; for k:=1 to n do begin xw[k]:=x2[k]*cos(ddq)-y2[k]*sin(ddq)+xc*(1-cos(ddq))+yc*sin(ddq); yw[k]:=x2[k]*sin(ddq)+y2[k]*cos(ddq)+yc*(1-cos(ddq))-xc*sin(ddq); x3[k]:=xw[k]; y3[k]:=yw[k]; end; x0:=Getmaxx/2; y0:=Getmaxy/2; fw:=pi/4; setcolor(blue); Ncornerbuilder(n,R1,fw,x0,y0); delay(100); setcolor(green); moveto(round(x3[1]),round(y3[1])); for w:=1 to n do lineto(round(x3[w]),round(y3[w])); lineto(round(x3[1]),round(y3[1])); setfillstyle(solidfill,green); floodpointx:=round((x3[2]+x3[4])/2); floodpointy:=round((y3[2]+y3[4])/2); floodfill(floodpointx,floodpointy,green); delay(100); end; bufx:=movex*cos(q)-movey*sin(q)+xc*(1-cos(q))+yc*sin(q); bufy:=movex*sin(q)+movey*cos(q)+yc*(1-cos(q))-xc*sin(q); movex:=bufx; movey:=bufy; end; begin {move part 1} pix:=2; switch1:=true; switch2:=false; movetype1:=true; R2Move(pix,Movetype1,Movetype2,switch1,switch2); point:=2; R2ShapeRotator(point); {move part 2} pix:=16; switch1:=true; switch2:=false; movetype1:=false; R2Move(pix,Movetype1,Movetype2,switch1,switch2); point:=3; R2ShapeRotator(point); {move part 3} pix:=16; switch1:=false; switch2:=true; movetype2:=true; R2Move(pix,Movetype1,Movetype2,switch1,switch2); point:=4; R2ShapeRotator(point); {move part 4} pix:=16; switch1:=false; switch2:=true; movetype2:=false; R2Move(pix,Movetype1,Movetype2,switch1,switch2); point:=1; R2ShapeRotator(point); {move part 5} pix:=14; switch1:=true; switch2:=false; movetype1:=true; R2Move(pix,Movetype1,Movetype2,switch1,switch2); end; begin clrscr; driver:=15; mode:=4; initgraph(driver,mode,'C:\Program Files\Free Pascal\Bin\Win32\SVGA256.bgi'); if graphresult <> 0 then begin writeln('Џа®Ў«Ґ¬  § ®Ў« ¤­ ­­п¬  Ў® ўi¤бгв­i© Ја дiз­Ё© ¤а ©ўҐа.I­iжi «i§ жiп ­Ґ¬®¦«Ёў '); halt end; x0:=Getmaxx/2; y0:=Getmaxy/2; fw:=pi/4; Ncornerbuilder(n,R1,fw,x0,y0); for i:=1 to n do begin x1[i]:=xw[i]; y1[i]:=yw[i]; end; fw:=pi/4; ncornerbuilder(n,R2,fw,x0,y0); for i:=1 to n do begin x2[i]:=xw[i]; y2[i]:=yw[i]; end; {Moving parameters} dx0:=x1[2]-x2[3]; dy0:=y1[2]-y2[3]; {Moving parameters} {Moving to start pozition} cleardevice; x0:=(Getmaxx/2); y0:=(Getmaxy/2); fw:=pi/4; setcolor(blue); Ncornerbuilder(n,R1,fw,x0,y0); x0:=(x0+dx0); y0:=(y0+dy0); movey:=y0; movex:=x0; fw:=pi/4; setcolor(green); Ncornerbuilder(n,R2,fw,x0,y0); setfillstyle(1,green); floodfill(trunc(x0),trunc(y0),green); {Moving to starting pozition} {Writing coordinates to massive} for i:=1 to n do begin x2[i]:=xw[i]; y2[i]:=yw[i]; end; {Writing coordinates to massive} {Shape R1 rotating} delay(1400); while(not(keypressed)) do begin R2shape(x1,x2,y1,y2); end; readln; closegraph; end. РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ 
Антиботан аватар за замовчуванням

14.11.2011 03:11-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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