
21.12.2009, 02:32
|
 |
Прохожий
|
|
Регистрация: 17.12.2009
Сообщения: 28
Репутация: 10
|
|
Смотри
Кавайненько получилось
Код:
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
{ Private declarations }
public
{ Public declarations }
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;
{if (round(t*10) mod TailLength)<>0 then intr(calculate(t),100,100) else }
Refreshsh;
DrawObject(Calculate(t).X,Calculate(t).Y);
end;
procedure TForm1.Image1Click(Sender: TObject);
begin
inc(TailLength);
end;
end.
Это только анимация, при небольшой доработке легко будет выводить угол наклона и ускорение точки
Последний раз редактировалось Енот, 21.12.2009 в 08:05.
|