DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Побудова графіка функції та рухомого зображення на екрані комп’ютера

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

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

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

Рік:
2010
Тип роботи:
Розрахункова робота
Предмет:
Комп'ютерна графіка
Група:
ІБ – 44
Коротко про документ

Про що ця робота

У роботі реалізовано побудову графіків функцій за табличними даними в середовищі Turbo Pascal. Також створено алгоритм анімації рухомого зображення із затухаючими перекочуваннями кола.

У роботі розглядаються

  • Комп'ютерна графіка
  • Моделювання рухомих зображень
  • Побудова графіків функцій
  • Програмування на Turbo Pascal
  • Графічні примітиви
  • Алгоритми анімації

Зміст і розділи

  1. Завдання
  2. Список ідентифікаторів програми
  3. Блок-схема алгоритму програми
  4. Код програми
  5. Висновок
Для кого:Студенти технічних спеціальностей та викладачі комп'ютерної графіки.
Викладачі:Баран Р. Д.

Ключові поняття

графік функціїрухоме зображенняTurbo Pascalініціалізація графічного режимумасштабуванняанімаціякола зі спицямитрикутникпідпрограмакоординати

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” ІКТА кафедра „Захист Інформації” ГРАФІЧНО-РОЗРАХУНКОВА РОБОТА ПОБУДОВА ГРАФІКА ФУНКЦІЇ ТА РУХОМОГО ЗОБРАЖЕННЯ НА ЕКРАНІ КОМП’ЮТЕРА з курсу "КОМП’ЮТЕРНА ГРАФІКА" Львів - 2010 ЗАВДАННЯ 1) Побудувати графік функції, заданої таблично. Масштаб розмітки осей координат графіка повинен відповідати реальним результатам розрахунків. Параметри для побудови графіка визначені в таблиці 2. Варіант завдання визначає викладач. Необхідно передбачити “плаваючий” центр координат – основну частину екрану мають займати ті чверті, в яких знаходиться графік функції. № варіанту Функція f(x) Діапазон зміни аргументу  17 y=ch(x) [0; 20]   Параметри графіку № варіанту Тип лінії для побудови кривої графіка Товщина лінії (пікселів) Колір лінії Шрифт розмітки осей графіка  17  2 Green Gothic   2) Створити на екрані комп’ютера графічне вікно і сформувати в ньому рухоме зображення. Вікно розмістити в верхньому правому куті екрану. Навести межі вікна. Параметри рухомого зображення визначені в таблиці 3. Параметри зображення задані в пікселах. Варіант завдання визначає викладач. Графік і вікно з рухомим зображенням повинні бути присутні на екрані одночасно, причому вікно не має перекривати графік (рис.1).  № варіанту Структура зображення Пояснення   17    Затухаючі перекочування кола зі спицями діаметру d з гіпотенузи одного прямокутного трикутника на гіпотенузу іншого. Катети трикутників рівні і становлять a і b. Параметри : a=150, b=90, d=25   СПИСОК ІДЕНТИФІКАТОРІВ ПРОГРАМИ Підпрограмми та процедури InitGrp – підпрограма для ініціалізації необхідного графічного режиму відео адаптера; GetMinMaxY – підпрограма для визначення максимального та мінімального значення функції на проміжку; GetY – підпрограма для обчислення значення функції в точці; ToX – підпрограма для приведення значень х до значень на дисплеї; ToY – підпрограма для приведення значень у до значень на дисплеї; PaintXY – підпрограма для побудови осей координат та їх підпису; Fon – підпрограма для виводу вікна та трикутників; PaintGraph – підпрограма яка будує графік функції; Solve – підпрограма яка моделює рух кола по поверхні трикутника; GoPlay – підпрограма яка виводить зображення кола, що рухається по поверхнях трикутників; Функції Setfillstyle – підпрограма яка задає тип заливки Bar – підпрограма яка виводить прямокутник; Setcolor – підпрограма для задання кольору фігур; InitGraph – підпрограма для ініціалізації графічного режиму адаптера; Writeln – підпрограма для виведення тексту на екран; Halt- підпрограма для завершення роботи програми з кодом виходу; Round – підпрограма заокруглення дійсного числа; Floodfill – підпрограма заливки області графічного зображення; Delay – підпрограма для вичікування затримки між операціями; Keypressed – підпрограма яка сигналізує про натиск клавіші на клавіатурі; Circle – підпрограма яка виводить на екран коло заданого радіусу; Div – функція ділення націло числа; Блок-схема алгоритму програми  Код програми Uses Graph, CRT; var xmax, ymax, px0, py0: integer; kx, ky, x0, y0:real; const delta:integer = 25; {vidstup vid kray ekrana} ws_delta:integer = 10; {vidstan u vikni} a:integer = 150; {razmir trucutnuka} b:integer = 90; d:integer = 25; cur_x:integer = 11; {razmir cursora} cur_y:integer = 5; cur_p:integer = 8; {rozmir podilku} np_x:integer = 10; {kilkist' tochok na graph} np_y:integer = 7; c_xa:integer = 0; {pochatok tabuluvanna} c_xb:integer = 20; {kinec' tabuluvanna} procedure InitGrp; {iniciluvann9 grafi4nogo regumu ta pobudiva bar. and pol9} var r,d:integer; begin d:=detect; InitGraph(d, r, 'bgi'); r:=GraphResult; if r<>grok then begin Writeln (GraphErrorMsg(r)); readln; Halt(1); end; setfillstyle(1,7); bar(0,0,GetMaxX,GetMaxY); end; function GetY(x:real) : real; {ob4uslue zna4enn9 y v dannoy to4ci} begin GetY:=(exp(x)+exp(-x))/2; end; procedure GetMinMaxY(var min:real; var max:real; ax:real; bx:real); var h,y,x:real; begin h:=(bx-ax)/(GetMaxX-2*delta); min:=1e23; max:=-1e23; x:=ax; while (x<=bx) do begin y:=GetY(x); if(y>max) then max:=y; if(y<min) then min:=y; x:=x+h; end; end; function ToX(x:real):integer; var ret:real; begin ret:=px0 + (x0+x)*kx; ToX:=round(ret); end; function ToY(y:real):integer; var ret:real; begin ret:=py0 + (y0-y)*ky; ToY:=round(ret); end; procedure PaintXY(ax:real; bx:real); var fmin, fmax, gx_min, gx_max, gy_min, gy_max, t:real; x,y,i:integer; s:string[50]; begin {graph x} gx_min:=ax; gx_max:=bx; if(bx<0) then begin gx_max:=0; end else if(ax>0) then gx_min:=0; {graph y} GetMinMaxY(gy_min, gy_max, ax, bx); if(gy_max<0) then begin gy_max:=0; end else if(gy_min>0) then gy_min:=0; {calc kx, ky} if((kx=0) or (ky=0)) then begin kx:=(GetMaxX-2*delta)/(gx_max-gx_min); ky:=(GetMaxY-2*delta)/(gy_max-gy_min); x0:=gx_min; y0:=gy_min; px0:=delta; py0:=GetMaxY-delta; end; {paint oX} SetColor(0); SetLineStyle(0,0,0); SetTextStyle(SmallFont,0,0); y:=ToY(0); Line(px0, y, GetMaxX-delta, y); MoveTo(GetMaxX-delta, y); LineRel(-cur_x,-cur_y); MoveRel(cur_x, cur_y); LineRel(-cur_x, cur_y); t:=(gx_max-gx_min)/np_x; for i:=1 to np_x-1 do begin x:=ToX(gx_min+t*i); MoveTo(x,round(y+cur_p/2)); LineRel(0,-cur_p); str(gx_min+t*i:0:0, s); OutTextXY(x-3, y+cur_p, s); end; OutTextXY(GetMaxX-delta, y+10, 'X'); {paint oY} x:=ToX(0); Line(x, py0, x, delta); MoveTo(x, delta); LineRel(cur_y,cur_x); MoveRel(-cur_y, -cur_x); LineRel(-cur_y, cur_x); t:=(gy_max-gy_min)/np_y; for i:=1 to np_y-1 do begin y:=ToY(gy_min+t*i); MoveTo(round(x-cur_p/2), y); LineRel(cur_p, 0); if(gy_max-gy_min>100) then begin str(gy_min+t*i:0, s); OutTextXY(round(x+cur_p/2), y-3, s); end else begin str(gy_min+t*i:3:1, s); OutTextXY(round(cur_p/2), y-3, s); end; end; OutTextXY(x+10, delta, 'Y'); end; procedure Fon(first:boolean); var cx, cy, ws_x, ws_y:integer; begin {window} setfillstyle(1,15); setcolor(8); SetLineStyle(0,0,0); ws_x:=2*(b+ws_delta); ws_y:=a+ws_delta+d; cx:=round(GetMaxX/2-ws_x/2); bar(cx,0,cx+ws_x,ws_y); MoveTo(cx, 0); LineRel(0, ws_y); LineRel(ws_x,0); LineRel(0,-ws_y); LineRel(-ws_x,0); {tr left} setfillstyle(1,2); MoveTo(cx+ws_delta, ws_y-ws_delta); LineRel(b,0); LineRel(-b,-a); LineRel(0,a); FloodFill(cx+ws_delta+1, ws_y-ws_delta-1, 8); {tria right} MoveTo(cx+ws_x-ws_delta, ws_y-ws_delta); LineRel(-b,0); LineRel(b, -a); LineRel(0, a); FloodFill(cx+ws_x-ws_delta-1, ws_y-ws_delta-1, 8); end; procedure PaintGraph(ax:real; bx:real); var h,x:real; px,py,nx,ny:integer; const dXY:integer = 4; begin PaintXY(ax, bx); SetColor(Green); SetLineStyle(2,0,3); h:=(bx-ax)/(GetMaxX-2*delta); x:=ax; px:=ToX(x); py:=ToY(GetY(x)); MoveTo(px,py); while (x<bx) do begin nx:=ToX(x); ny:=ToY(GetY(x)); if((abs(nx-px)>dXY) or (abs(ny-py)>dXY)) then begin LineTo(nx, ny); px:=nx; py:=ny; end; x:=x+h; end; end; procedure Solve(sx:integer; sy:integer; ymin:real; ymax:real; var x:real; var y:real; var s:real); var dx, dy, xx,yy, alpha:real; const maxd:integer = 5000; mind:integer = 500; begin dx:=b/200; dy:=a/200; while ( ((sy<0) and (y>ymin)) or ((sy>0) and (y<ymax))) do begin setcolor(0); setfillstyle(1,15); circle(round(x),round(y),round(d/2)); floodfill(round(x),round(y),0); setcolor(15); circle(round(x),round(y),round(d/2)); circle(round(x),round(y-1),round(d/2)); x:=x+sx*dx; y:=y+sy*dy; setcolor(8); circle(round(x),round(y),round(d/2)); if(sx>0) then s:=s+sqrt(dx*dx+dy*dy) else s:=s-sqrt(dx*dx+dy*dy); alpha:=8*3*s/d/d+pi/4; xx:=d/2*cos(alpha); yy:=d/2*sin(alpha); Line(round(x-xx),round(y-yy),round(x+xx),round(y+yy)); xx:=d/2*cos(alpha+pi/2); yy:=d/2*sin(alpha+pi/2); Line(round(x-xx),round(y-yy),round(x+xx),round(y+yy)); if(keypressed) then halt(0); delay(round((ymax-y)/(ymax-ymin)*maxd)+mind); end; end; procedure GoPlay; var x,y,ws_x, ws_y, beta, ymin, ymax, s,rr:real; r:integer; begin {Fon;} ws_x:=2*(b+ws_delta); r:=round(d/2); ws_y:=a+ws_delta+d; beta:=pi/2-Arctan(b/a); ymin:=ws_y-a-ws_delta; ymax:=147; x:=GetMaxX/2+ws_x/2-ws_delta-16; y:=ymin; s:=0; Fon(true); rr:=(ymax-ymin+1)/9; while (ymax-ymin>2) do begin Solve(-1,1,ymin, ymax, x,y,s); ymin:=ymin+rr; Solve(-1,-1,ymin, ymax, x,y,s); Solve(1,1,ymin,ymax,x,y,s); ymin:=ymin+rr;{(ymax-ymin)/5; } Solve(1,-1,ymin,ymax,x,y,s); end; end; begin InitGrp; PaintGraph(c_xa, c_xb); GoPlay; ReadLn; end. Висновок : Виконавши дану графічну-розрахункову роботу я покращив свої навики в розробці рухомих зображень в середовищі Турбо Паскаль.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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