
program kruznice_bezier;
uses crt,Graph;
var
 grDriver: Integer;
 grMode: Integer;
 ErrCode: Integer;
 x,y,x0,x1,x2,x3,y0,y1,y2,y3,s1,s2,r,i,p:integer;
 t:real;

procedure body(s1,s2,r,p:integer);
var uhel:integer;
begin
     uhel:=random(360);
     x:=s1 +round (r*cos(uhel+90+p));
     y:=s2 +round (r*sin(uhel+90+p));
end;

function PP (x0,x1,x2,x3: integer; t: real): integer;
begin
     PP:=round ((x0*(1-t)*(1-t)*(1-t)) + (x1*3*t*(1-t)*(1-t)) + (x2*3*t*t*(1-t)) + (x3*t*t*t));
end;
{
procedure sort(x0,x1,x2,x3:integer);
var a,b:integer;
begin
if(x2>x3) then begin
  a:=x2;  b:=y3;
  x2:=x3; y2:=y3;
  x3:=a;  y3:=b;
end;
if (x1>x2) then begin
      a:=x1;  b:=y1;
      x1:=x2; y1:=y2;
      x2:=a;  y2:=b;
end;
if (x0>x1) then begin
            a:=x0;  b:=y0;
            x0:=x1; y0:=y1;
            x1:=a;  y1:=b;
  end;

end;
}
begin
randomize;
 grDriver := Detect;
 InitGraph(grDriver, grMode,' ');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin  { Do graphics }
   s1:=200; s2:=200; r:=100; t:=0;
   x:=s1; y:=s2-r;
   circle(s1,s2,r);
   body(s1,s2,r,0); x0:=x; y0:=y; PutPixel(x,y,red);
   body(s1,s2,r,1); x1:=x; y1:=y; PutPixel(x,y,red);
   body(s1,s2,r,2); x2:=x; y2:=y; PutPixel(x,y,red);
   body(s1,s2,r,3); x3:=x; y3:=y; PutPixel(x,y,red);

   for i:=0 to 1000 do begin
         t:=t+0.001;
         PutPixel(PP(x0,x1,x2,x3,t), PP(y0,y1,y2,y3,t), green);
   end;

   Readln;
   CloseGraph;
   writeln(x0, ' ', y0);
   writeln(x1, ' ', y1);
   writeln(x2, ' ', y2);
   writeln(x3, ' ', y3);
   readln;
 end
 else
   Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
