Моделирование броуновского движения
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Shape1: TShape;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Timer2: TTimer;
Button3: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xx,yy,xx1,yy1,H,t: real;
rr,gg,bb,N : integer;
implementation
{$R *.dfm}
// Пуск, генерируется случайный оттенок для рисования
// отрезка случайной траектории
procedure TForm1.Button1Click(Sender: TObject);
begin
rr:=round(255*random);
gg:=round(200*random);
bb:=round(200*random);
timer1.Enabled:=true;
end;
// Кнопка «стоп»
procedure TForm1.Button2Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
n:=n+1; t:=t+1;
if ((n div 100)*100=n) then label1.Caption:=floattostr(t/1000);
image1.Canvas.Pen.Color:=rgb (rr,gg,bb);
image1.Canvas.MoveTo(round(xx),round(yy));
xx:=xx+2*h*(random-0.5);
yy:=yy+2*h*(random-0.5);
shape1.Left:=round(xx);
shape1.top:=round(yy);
image1.canvas.lineto (round(xx),round(yy));
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
h:=5; t:=0; N:=0;
xx:=shape1.Left; yy:=shape1.Top;
for i:=0 to 200 do begin
if ((i div 5)*5=i) then image1.Canvas.Pen.Color:=rgb(200,200,250)
else image1.Canvas.Pen.Color:=rgb(220,220,250);
if ((i div 10)*10=i) then image1.Canvas.Pen.Color:=rgb(150,150,250)
else image1.Canvas.Pen.Color:=rgb(220,220,250);
image1.Canvas.MoveTo(0,3*i); image1.Canvas.lineTo(600,3*i);
image1.Canvas.MoveTo(3*i,0); image1.Canvas.lineTo(3*i,600);
end;
end;
// Прокрутка случайных чисел (на всякий случай)
// Процедура не очень существенна
procedure TForm1.Timer2Timer(Sender: TObject);
var i: integer;
begin
for i:=0 to 1000 do random;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
timer1.Enabled:=false;
shape1.Left:=300; shape1.Top:=300;
xx:=shape1.Left; yy:=shape1.Top;
t:=0; N:=0; label1.Caption:='0';
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i: integer;
begin
image1.Canvas.Pen.Color:=rgb(255,255,255);
for i:=0 to 600 do begin
image1.Canvas.MoveTo(0,i); image1.Canvas.lineTo(600,i); end;
for i:=0 to 200 do begin
if ((i div 5)*5=i) then image1.Canvas.Pen.Color:=rgb(200,200,250)
else image1.Canvas.Pen.Color:=rgb(220,220,250);
if ((i div 10)*10=i) then image1.Canvas.Pen.Color:=rgb(150,150,250)
else image1.Canvas.Pen.Color:=rgb(220,220,250);
image1.Canvas.MoveTo(0,3*i); image1.Canvas.lineTo(600,3*i);
image1.Canvas.MoveTo(3*i,0); image1.Canvas.lineTo(3*i,600);
end;
end;
end.