uses crt,graph;
const nmax=1000;
type point=record
x,y,k:longint;
c:integer;
n,r,ht,hr,t:real;
end;
tch=array[1..nmax] of point;
var gd,gm:integer;
xc,yc:longint;
xx,yy:longint;
a:array[1..nmax] of point;
z,i,j,maxk,n,d:integer;
u:real;
c:char;
begin
clrscr;
randomize;
write('Kolichestvo tochek n=');
readln(n);
repeat
write('Zaderzka v mls(1-20) z=');
readln(z);
until z in [1..20];
gd:=0;
initgraph(gd,gm,'');
xc:=getmaxx div 2;
yc:=getmaxY div 2;
setcolor(12);
setfillstyle(1,15);
bar(0,0,getmaxX,20);
outtextXY(xc-30,5,'Abort any key...');
for i:=1 to n do
begin
repeat
a[i].x:=random(2*yc);
a[i].y:=random(2*yc);
until sqrt(sqr(xc-a[i].x)+sqr(yc-a[i].y))<yc-20;
a[i].n:=random(5)+1;
a[i].r:=sqrt(sqr(a[i].x-xc)+sqr(a[i].y-yc));
a[i].ht:=(random(16)+1)/1000;
a[i].k:=round(a[i].n*pi*2/a[i].ht);
a[i].hr:=a[i].r/a[i].k;
if (abs(xc-a[i].x)<1) then
begin
if a[i].y>yc then a[i].t:=pi/2
else a[i].t:=3*pi/2;
end
else
begin
u:=arctan((a[i].y-yc)/(a[i].x-xc));
if a[i].x<xc then a[i].t:=pi+u
else a[i].t:=2*pi-u;
end;
a[i].c:=random(14)+2;
end;
maxk:=0;
for i:=1 to n do
if a[i].k>maxk then maxk:=a[i].k;
i:=1;
while (i<=maxk)and not keypressed do
begin
delay(z);
setfillstyle(1,0);
bar(0,20,getmaxX,getmaxY);
for j:=1 to n do
if i<a[j].k then
begin
xx:=round(xc+a[j].r*cos(a[j].t));
yy:=round(yc-a[j].r*sin(a[j].t));
setcolor(a[j].c);
circle(xx,yy,1);
a[j].t:=a[j].t+a[j].ht;
a[j].r:=a[j].r-a[j].hr;
end;
i:=i+1;
end;
outtextXY(xc-30,yc,'Press any key...');
readkey;
end.