point_black
Все, что живет в нашем воображении, может стать реальностью.
const nn=100;
cf=clwhite;

var
Form1: TForm1;
x,y:array[1..nn] of integer;
t:real;
dx,dy:integer;
xc,yc:real;//КООРДИНАТЫ ЦЕНТРА МАСШТАБИРОВАНИЯ
kx,ky:real;
implementation

procedure ris();

begin

with form1.canvas do
begin
pen.Color:=clgreen;
brush.Color:=clgreen;
brush.style:=bssolid;
ellipse(x[1],y[1],x[2],y[2]);

pen.Color:=clred;
brush.color:=clred;
brush.style:=bssolid;
pie(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4]);

pen.Color:=clred;
brush.color:=clred;
brush.style:=bssolid;
pie(x[1],y[1],x[2],y[2],x[5],y[5],x[6],y[6]);
end;
end;



procedure ris2();

begin

with form1.Canvas do
begin
pen.Color:=clwhite;
brush.Color:=clwhite;
brush.style:=bssolid;
ellipse(x[1],y[1],x[2],y[2]);

pen.Color:=clwhite;
brush.color:=clwhite;
brush.style:=bssolid;
pie(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4]);

pen.Color:=clwhite;
brush.color:=clwhite;
brush.style:=bssolid;
pie(x[1],y[1],x[2],y[2],x[5],y[5],x[6],y[6]);
end;
end;


procedure perenos(); //МЕНЯЕТ НАПРАВЛЕНИЕ ПО ДИАГОНАЛИ
var i,j:integer;
k: Integer;
begin

for I := 1 to 6 do
begin
x[i]:=x[i]+dx;
y[i]:=y[i]+dy;
{if x[i]>300 then
begin
for j := 1 to 2 do
begin
y[j]:=y[j]-dy;
{ y[j]:=y[j]-dy;
end;
if x[i]>600 then
begin
for k := 1 to 2 do
y[k]:=y[k]+dy;
end;

end;}
end;
end;
procedure perenos2(); //ДВИЖЕНИЕ ПО СИНУСОИДЕ
var i:integer;

begin
t:=t+dy;
for i :=1 to nn do
begin
x[i]:=x[i]+dx;
y[i]:= y[i]+round(10*sin(t*pi/180));
end;
end;

procedure mashtab();
var
i:integer;

begin
xc:=(x[1]+x[2])/2;
yc:=(y[1]+y[2])/2;
for i := 1 to nn do
begin
x[i]:=round(kx*x[i]+xc*(1-kx));
y[i]:=round(ky*y[i]+yc*(1-ky));

if (xc>100) and (xc<150) then
begin
x[i]:=round((1/kx)*x[i]+xc*(1-(1/kx)));
y[i]:=round((1/ky)*y[i]+yc*(1-(1/ky)));
end;

end;
end;

procedure povorot(); //ПОВОРОТ ВОКРУГ ПРОИЗВОЛЬНОЙ ТОЧКИ
var
i:integer;
tp:integer;
begin
xc:=300;//координаты центра вращения
yc:=300;
for I := 1 to 2 do
begin
tp:=x[i];

x[i]:=round(xc+(x[i]-xc)*cos(2*pi/180)+(y[i]-yc)*sin(2*pi/180));

y[i]:=round(yc-(tp-xc)*sin(2*pi/180)+(y[i]-yc)*cos(2*pi/180));


end;

end;

procedure povorot2();
var i:integer;
tp:integer;
begin
xc:=(x[1]+x[2])/2;
yc:=(y[1]+y[2])/2;
for i := 3 to 6 do
begin
tp:=x[i];

x[i]:=round(xc+(x[i]-xc)*cos(2*pi/180)+(y[i]-yc)*sin(2*pi/180));

y[i]:=round(yc-(tp-xc)*sin(2*pi/180)+(y[i]-yc)*cos(2*pi/180));
end;


end;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ris();
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
dx:=strtoint(edit1.Text);
dy:=strtoint(edit2.Text);
kx:=strtofloat(edit3.Text);
ky:=strtofloat(edit4.Text);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
perenos2();
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
mashtab();
end;

procedure TForm1.FormCreate(Sender: TObject); //ОЧЕНЬ ВАЖНАЯ ПРОЦЕДУРА!!!!
begin
x[1]:=100;//КООРДИНАТЫ НАДО ЗАПИСЫВАТЬ ТОЛЬКО ЗДЕСЬ В ФОРМ КРЕЭЙТ1!!!!!!!!!
y[1]:=100;
x[2]:=200;
y[2]:=200;

x[3]:=200;y[3]:=150;
x[4]:=150;y[4]:=100;


x[5]:=100;y[5]:=150;
x[6]:=150;y[6]:=200;

t:=0;
timer1.Enabled:=false; //!!!!
timer1.Interval:=40;//!!!!!!!
edit1.Text:='2';
edit2.Text:='2';
edit3.Text:='1,04';
edit4.Text:='1,04';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with form1.Canvas do
begin
pen.Color:=cf;
ris2();
{mashtab();}
perenos2();
{povorot(); }
povorot2();
ris();
end;
end;
end.