МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ « ЛЬВІВСЬКА ПОЛІТЕХНІКА »
РОЗРАЧУНКОВА РОБОТА
З КУРСУ «КОМП’ЮТЕРНА ГРАФІКА»
НА ТЕМУ:
«ПОБУДОВА РУХОМИХ ЗОБРАЖЕНЬ»
Варіант 25.
Блок-схеми основної програми та підпрограм.
4.1. Основна програма. 4.2. Підпрограма Tabul.
4.3. Підпрограма Graphic.
Варіант 6
4.1. Блок-схема основної програми.
4.2. Блок-схема підпрограми Kwadrat.
Текст програми:
program task_2546;
uses crt,graph;
type matrix=array [1..4] of integer;
var xc,yc,xc1,yc1,dr,reg,xt,yt,k,i,j,x0,y0,r,xe,ye,l0,m0,f1,f2,l01,m01:integer;
a2,a1,a,b,h,ay,dx,kx,ky,xm,yr,ym,miny,maxy,x,y,xm1,ym1,k1,yd,xd:real;
s:string;f:text;
x2,y2,x1,y1:matrix;
begin
dr:=detect;
a:=-19;
b:=-2;
h:=(b-a)/200;
initgraph (dr,reg,'');
x:=a;
dx:=b-a;
if x<1.914 then
begin
miny:=-exp((1/5)*ln(abs(2*x*x*x-7)));
maxy:=-exp((1/5)*ln(abs(2*x*x*x-7)));
end
else
begin
miny:=exp((1/5)*ln(2*x*x*x-7));
maxy:=exp((1/5)*ln(2*x*x*x-7));
end;
assign(f,'c:\rozr.dat');
rewrite(f);
while x<=b+h/6 do
begin
if x<1.914 then
yr:=-exp((1/5)*ln(abs(2*x*x*x-7)))
else
yr:=exp((1/5)*ln(2*x*x*x-7));
if yr<miny then miny:=yr;
if yr>maxy then maxy:=yr;
writeln(f,x:2:4,' ',yr:2:4);
x:=x+h;
end;
settextstyle(2,0,2);
ay:=maxy-miny;
xt:=getmaxx-40;
yt:=getmaxy-40;
kx:=xt/dx;
ky:=yt/ay;
x0:=xt-round(b*kx)+20;
xe:=x0;
if a>0 then xe:=xt-round(kx*dx)+20;
if b<0 then xe:=xt+20;
y0:=yt+round(miny*ky)+20;
ye:=y0;
if y0<0 then ye:=yt-round(ay*ky)+20;
if y0>yt then ye:=yt+20;
line (xe,20,xe,yt+20);
line (20,ye,xt+20,ye);
setlinestyle(3,0,3);
setcolor(lightgray);
flush(f);
reset(f);
while not eof(f) do
begin
readln(f,x,yr);
xm:=x0+(x*kx);
ym:=y0-(yr*ky);
if x>a then
begin
k1:=arctan(abs(ym-ym1)/abs(xm-xm1));
yd:=cos(k1)*2;
xd:=sin(k1)*2;
end;
if x=a then moveto (round(xm),round(ym))
else
begin
lineto (round(xm),round(ym));
line(round(xm1+xd),round(ym1+yd),round(xm+xd),round(ym+yd));
end;
xm1:=xm;ym1:=ym;
end;
setlinestyle(0,0,1);
settextstyle(2,0,2);
setcolor(white);
r:=round(yt/7);
for i:=1 to 6 do
begin
line(xe-2,i*r,xe,i*r);
yr:=(y0-i*r)/ky;
str(yr:2:3,s);
outtextxy(xe+3,i*r,s);
end;
r:=round(xt/5);
for i:=0 to 5 do
begin
line(i*r+20,ye-2,i*r+20,ye+2);
x:=(i*r+20-x0)/kx;
str(x:2:3,s);
outtextxy(i*r+20,ye+3,s);
end;
outtextxy(xe,10,'Y');
outtextxy(xt+30,ye-5,'X');
x0:=120;
y0:=120;
xc:=x0;
yc:=y0-90;
r:=90;
x1[1]:=xc-12;
y1[1]:=yc-12;
x1[2]:=xc-12;
y1[2]:=yc+12;
x1[3]:=xc+12;
y1[3]:=yc+12;
x1[4]:=xc+12;
y1[4]:=yc-12;
a:=0;
a1:=0;
setlinestyle(0,0,1);
rectangle(50,50,291,281);
setviewport(51,51,290,280,clipoff);
repeat
begin
clearviewport;
xc1:=round(xc*cos(a)+yc*sin(a)+x0*(1-cos(a))-y0*sin(a));
yc1:=round(-xc*sin(a)+yc*cos(a)+y0*(1-cos(a))+x0*sin(a));
x1[1]:=xc1-12;
y1[1]:=yc1-12;
x1[2]:=xc1-12;
y1[2]:=yc1+12;
x1[3]:=xc1+12;
y1[3]:=yc1+12;
x1[4]:=xc1+12;
y1[4]:=yc1-12;
for i:=1 to 4 do
begin
x2[i]:=round(x1[i]*cos(a1)+y1[i]*sin(a1)+xc1*(1-cos(a1))-yc1*sin(a1));
y2[i]:=round(-x1[i]*sin(a1)+y1[i]*cos(a1)+yc1*(1-cos(a1))+xc1*sin(a1));
if i>1 then line(x2[i-1],y2[i-1],x2[i],y2[i]);
if i=4 then line(x2[i],y2[i],x2[1],y2[1]);
end;
floodfill(round((x2[3]+x2[1])/2),round((y2[3]+y2[1])/2),white);
circle(x0,y0,r);
a:=a+0.02;
a1:=a1+0.1;
delay(10000);
end;
until KeyPressed;
end.