Моделирование броуновского движения

 

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.