Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра «Захисту інформації»
Розрахункова робота
З курсу:
“Копм’ютерна графіка”
Варіант: 18
№ варіанту
Функція f(x)
Діапазон зміни аргументу
18
z=arcctg(x)
[-1000; 1000]
№ варіанту
Структура зображення
Пояснення
18
Хрест з довжинами сторін a та b безперервно котиться по горизонтальній поверхні довжиною L. При досягненні стінок напрямок кочення змінюється на протилежний.
Код програми:
Program rozrah;
Uses Crt, Graph;
Var Gd, Gm, xs, ys, n, kr:integer;
x, xprv, xcrnt, xnxt, y, yprv, ycrnt, ynxt, k: extended;
xh, yh, xc, yc, tmp: extended;
startx, endx, r: extended;
alpha,alpha1:extended;
h:real;
s:string;
size:word;
p:pointer;
rn,xn,yn:extended;
Procedure Linii;
Begin
line (1,GetMaxY div 2,GetMaxX-2,GetMaxY div 2); line (GetMaxX div 2,1,GetMaxX div 2,GetMaxY-200);
OutTextXY ((GetMaxX div 2)+10,(GetMaxY div 2)+10,'0');
line (319,1,317,10); line (319,1,321,10); OutTextXY (325,2,'Y');
line (639,239,629,237); line (639,239,629,241); OutTextXY (631,224,'X');
end;
Procedure ArcCtgX;
Begin
x:=-1000.0; y:=k*(pi/2-arctan(x)); xprv:=k*y+xs; yprv:=k*x+ys; x:=x+h;
while x<=1000.0 do begin
y:=k*(pi/2-arctan(x)); xcrnt:=k*x+xs; ycrnt:=k*y+ys;
line(trunc(xprv),trunc(yprv),trunc(xcrnt),trunc(ycrnt));
xprv:=xcrnt; yprv:=ycrnt;
x:=x+h; end; end;
Procedure ramka;
Begin
line((GetMaxX div 2)+10, GetMaxY-1, (GetMaxX div 2)+172, GetMaxY-1);
line((GetMaxX div 2)+10, GetMaxY-1, (GetMaxX div 2)+10, GetMaxY-20);
line((GetMaxX div 2)+172, GetMaxY-1, (GetMaxX div 2)+172, GetMaxY-20);
end;
Procedure hrest(xh,yh:integer; alpha:extended);
var r,rm,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12:extended;
alpha1,alpha2,alpha3,alpha4,alpha5,alpha6,alpha7,alpha8,alpha9,alpha10,alpha11,alpha12:extended;
Begin
alpha:=alpha*pi/180;
r:=16; rm:=8;
alpha1:=(alpha+22)*pi/180; alpha2:=(alpha+45)*pi/180;
alpha3:=(alpha+67)*pi/180; alpha4:=(alpha+112)*pi/180;
alpha5:=(alpha+135)*pi/180; alpha6:=(alpha+157)*pi/180;
alpha7:=(alpha+202)*pi/180; alpha8:=(alpha+225)*pi/180;
alpha9:=(alpha+247)*pi/180; alpha10:=(alpha+292)*pi/180;
alpha11:=(alpha+315)*pi/180; alpha12:=(alpha+337)*pi/180;
x1:=r*cos(alpha1)+xh; y1:=r*sin(alpha1)+yh; x2:=rm*cos(alpha2)+xh; y2:=rm*sin(alpha2)+yh;
x3:=r*cos(alpha3)+xh; y3:=r*sin(alpha3)+yh; x4:=r*cos(alpha4)+xh; y4:=r*sin(alpha4)+yh;
x5:=rm*cos(alpha5)+xh; y5:=rm*sin(alpha5)+yh; x6:=r*cos(alpha6)+xh; y6:=r*sin(alpha6)+yh;
x7:=r*cos(alpha7)+xh; y7:=r*sin(alpha7)+yh; x8:=rm*cos(alpha8)+xh; y8:=rm*sin(alpha8)+yh;
x9:=r*cos(alpha9)+xh; y9:=r*sin(alpha9)+yh; x10:=r*cos(alpha10)+xh; y10:=r*sin(alpha10)+yh;
x11:=rm*cos(alpha11)+xh; y11:=rm*sin(alpha11)+yh; x12:=r*cos(alpha12)+xh; y12:=r*sin(alpha12)+yh;
line(trunc(x1),trunc(y1),trunc(x2),trunc(y2)); line(trunc(x2),trunc(y2),trunc(x3),trunc(y3));
line(trunc(x3),trunc(y3),trunc(x4),trunc(y4)); line(trunc(x4),trunc(y4),trunc(x5),trunc(y5));
line(trunc(x5),trunc(y5),trunc(x6),trunc(y6)); line(trunc(x6),trunc(y6),trunc(x7),trunc(y7));
line(trunc(x7),trunc(y7),trunc(x8),trunc(y8)); line(trunc(x8),trunc(y8),trunc(x9),trunc(y9));
line(trunc(x9),trunc(y9),trunc(x10),trunc(y10)); line(trunc(x10),trunc(y10),trunc(x11),trunc(y11));
line(trunc(x11),trunc(y11),trunc(x12),trunc(y12)); line(trunc(x12),trunc(y12),trunc(x1),trunc(y1));
end;
Begin
clrscr;
Gd:=DETECT; InitGraph(Gd, Gm, ''); if GraphResult = grOK then begin
h:=1.0; k:=5; xs:=GetMaxX div 2; ys:=(GetMaxY div 2)-80; alpha:=0;
startx:=(GetMaxX div 2)+26; endx:=(GetMaxX div 2)+156;
xc:=startx; yc:=GetMaxY-17; xh:=startx; yh:=yc; r:=16.0; n:=5; xn:=16; yn:=0;
while (not keypressed) do
begin
ClearDevice;
linii; ArcCtgX; ramka; hrest(trunc(xh),trunc(yh),alpha);
if xh=endx then alpha1:=-80; if xh=startx then alpha1:=80; alpha:=alpha+alpha1;
if xh=endx then n:=-1; if xh=startx then n:=1; xh:=xh+n;
delay(2500); end; end;
ReadLn; FreeMem(p,size); CloseGraph;
End.
Блок-схема:
Ні Так
Висновок:
На даній лабораторній роботі я згадав навички роботи в графічному середовищі мови програмування Турбо Паскаль та здійснив вивід на екран заданого зображення.