unit
unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
const
L=
100
;
type
TForm1 =
class
(TForm)
Image1: TImage;
Timer1: TTimer;
procedure
DrawObject(x,y:
integer
);
procedure
Refreshsh;
procedure
intr(corr:Tpoint;k,area:
integer
);
procedure
FormCreate(Sender: TObject);
function
Calculate(t:
real
):Tpoint;
procedure
Timer1Timer(Sender: TObject);
procedure
Image1Click(Sender: TObject);
private
public
end
;
var
Form1: TForm1;
t:
real
;
TailLength:
integer
;
implementation
{$R *.dfm}
procedure
Tform1
.
intr(corr:Tpoint;k,area:
integer
);
var
a:
array
[
1..1000
,
1..1000
]
of
boolean
;
i,j:
integer
;
begin
for
i:=
1
to
area
do
for
j:=
1
to
area
do
a[i,j]:=(random(k)=
1
);
for
i:=
1
to
area
do
for
j:=
1
to
area
do
if
not
a[i,j]
then
image1
.
Canvas
.
Pixels[corr
.
x+i-
8
,corr
.
y-
8
]:=clblack;
end
;
procedure
TForm1
.
Refreshsh;
var
i,j:
integer
;
begin
image1
.
Canvas
.
Brush
.
Color:=clblack;
image1
.
Canvas
.
Rectangle(
0
,
0
,image1
.
width,image1
.
Height);
image1
.
Canvas
.
Brush
.
Color:=clblack;
image1
.
Canvas
.
Brush
.
Color:=clYellow;
for
i:=
1
to
image1
.
Width
do
for
j:=
1
to
image1
.
height
do
if
(random(
10000
)=
1
)
then
image1
.
canvas
.
pixels[i,j]:=clYellow;
image1
.
Canvas
.
ellipse((image1
.
Width
div
2
)-
20
,(image1
.
height
div
2
)-
20
,
(image1
.
Width
div
2
)+
20
,(image1
.
height
div
2
)+
20
);
end
;
procedure
Tform1
.
DrawObject(x,y:
integer
);
var
penbuf:TColor;
begin
penbuf:=image1
.
canvas
.
pen
.
color;
image1
.
Canvas
.
brush
.
Color:=clBlue;
image1
.
canvas
.
ellipse(x-
17
,y-
17
,x+
17
,y+
17
);
image1
.
canvas
.
brush
.
Color:=penbuf;
end
;
function
Tform1
.
Calculate(t:
real
):Tpoint;
var
f:
real
;
begin
f:=round(
10
+
20
*t-
2
*sqr(t));
result
.
X:=round((image1
.
Width
div
2
)+(L*cos(f/L)));
result
.
Y:=round((image1
.
height
div
2
)+L*sin(f/L));
end
;
procedure
TForm1
.
FormCreate(Sender: TObject);
begin
Timer1
.
interval:=
10
;
image1
.
Canvas
.
Pen
.
color:=clBlack;
TailLength:=
1
;
t:=
1
;
refreshsh;
end
;
procedure
TForm1
.
Timer1Timer(Sender: TObject);
begin
t:=t+
0.1
;
Refreshsh;
DrawObject(Calculate(t).X,Calculate(t).Y);
end
;
procedure
TForm1
.
Image1Click(Sender: TObject);
begin
inc(TailLength);
end
;
end
.