Смекни!
smekni.com

Построение траектории Броуновского движения (стр. 4 из 4)

Общая структура файла модуля:

Unit < имя модуля >;

Interface // Открытый интерфейс модуля (могут помещаться списки подключаемых модулей, объявление типов, констант, переменных, функций и процедур, к которым будет доступ из других модулей)

Implementation // Реализация модуля (могут помещаться списки подключаемых модулей, объявление типов, констант, переменных, функций и процедур, к которым не будет доступа из других модулей)

Initialization // (Необязательный раздел – операторы выполняются один раз при первом обращении к модулю)

Finalization // (Необязательный раздел – операторы выполняются при любом завершении работы модуля)

End.

Рассмотрим теперь текст модуля с пустой формой:

UnitUnit1;

Interface // Открытый интерфейс модуля

Uses {Список подключаемых модулей}

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

Type {Объявление класса формы}

TForm1 = class (TForm)

Private // закрытый раздел класса

Public // открытый раздел класса

End;

VarForm 1: TForm1;

Implementation // Реализациямодуля

{$R *. dfm}

End.


4.1 Код программы «Броуновское движение, как хаотичное движение частиц»

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, math;

type

TForm1 = class(TForm)

Label1: TLabel;

GroupBox1: TGroupBox;

Label2: TLabel;

Edit1: TEdit;

Button1: TButton;

Label3: TLabel;

Edit2: TEdit;

Label4: TLabel;

Edit3: TEdit;

Panel1: TPanel;

PaintBox: TPaintBox;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

procedure GetData;

end;

Molecula = record

x, y:Integer; // координатычастицы

Vx, Vy: Integer; // составляющие скорости

angle: real; // угол полета

speed: byte;

end;

var

Form1: TForm1;

R, Vmax, n: integer;

mol: array [1..100] of molecula;

run: boolean;

implementation

{$R *.dfm}

procedure TForm1.GetData;

begin

R:=strtoint(Edit1.Text); // радиусчистицы

Vmax:=strtoint(Edit2.Text); // максимальная скорость движения

n:=strtoint(Edit3.Text); // количествочастиц

end;

procedure TForm1.Button1Click(Sender: TObject);

var i, j: byte;

temp: integer;

begin

GetData;

// запускдвижения

PaintBox.Refresh;

PaintBox.Canvas.Brush.Color:=clBlack;

PaintBox.Canvas.Pen.Color:=clBlack;

PaintBox.Canvas.Rectangle(0,0,400,400);


PaintBox.Canvas.Brush.Color:=clBlue;

PaintBox.Canvas.Pen.Color:=clBlue;

Randomize;

// определение начального положения частиц

for i:=1 to N do

begin

// начальные координаты

mol[i].x:=RandomRange(R, PaintBox.Width-R);

mol[i].y:=RandomRange(R, PaintBox.Height-R);

// начальное направление движения

mol[i].angle:=Random(360)*Pi/180;

mol[i].speed:=RandomRange(1, Vmax);

// cоставляющиедвижениячастицыпоосям

mol[i].Vx := Round(mol[i].speed * Sin(mol[i].angle));

mol[i].Vy := Round(mol[i].speed * Cos(mol[i].angle));

// выводнаэкран

PaintBox.Canvas.Ellipse(mol[i].x-R, mol[i].y-R, mol[i].x+R, mol[i].y+R);

end;

Run:=True;

repeat

for i:=1 to N do

begin

// стираеммолекулу

PaintBox.Canvas.Brush.Color:=clBlack;

PaintBox.Canvas.Pen.Color:=clBlack;

PaintBox.Canvas.Ellipse(mol[i].x-R, mol[i].y-R, mol[i].x+R, mol[i].y+R);

// обработка столкновения

for j:=1 to n do

if j<>i then

begin

// определяем столкновение молекулы

if sqrt(sqr(mol[i].x-mol[j].x)+sqr(mol[i].y-mol[j].y))<2*R+1 then

begin

temp:=mol[i].Vx; mol[i].Vx:=mol[j].Vx; mol[j].Vx:=temp;

temp:=mol[i].Vy; mol[i].Vy:=mol[j].Vy; mol[j].Vy:=temp;

end;

end;

// сдвигаем на новую позицию.

mol[i].x:=mol[i].x+mol[i].Vx;

mol[i].y:=mol[i].y+mol[i].Vy;

// проверка на выход за границы области

if mol[i].x>PaintBox.Width-R then

begin

mol[i].x:=PaintBox.Width-R;

mol[i].Vx:=-mol[i].Vx;

end;

if mol[i].x<R then

begin

mol[i].x:=R;

mol[i].Vx:=-mol[i].Vx;

end;

if Mol[i].y>PaintBox.Height-R then

begin

mol[i].y:=PaintBox.Height-R;

mol[i].Vy:=-mol[i].Vy;

end;

if mol[i].y<R then

begin

mol[i].y:=R;

mol[i].Vy:=-Mol[i].Vy;

end;

// выводнаэкран

PaintBox.Canvas.Brush.Color:=clBlue;

PaintBox.Canvas.Pen.Color:=clBlue;

PaintBox.Canvas.Ellipse(mol[i].x-R, mol[i].y-R, mol[i].x+R, mol[i].y+R);

Application.ProcessMessages;

end;

sleep(5);

Application.ProcessMessages;

if run=false then break;

until false;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Run:=False;

end;

end.

{

// temp:=mol[i].Vx; mol[i].Vx:=mol[j].Vx; mol[j].Vx:=temp;

// temp:=mol[i].Vy; mol[i].Vy:=mol[j].Vy; mol[j].Vy:=temp;

// Random(360)*Pi/180;

mol[j].angle:=360*Pi-mol[j].angle;

// temp:=mol[i].angle; mol[i].angle:=mol[j].angle; mol[j].angle:=temp;

// cоставляющие движения частицы по осям

mol[j].Vx := Round(mol[j].speed * Sin(mol[j].angle));

mol[j].Vy := Round(mol[j].speed * Cos(mol[j].angle));

mol[i].angle:=360*Pi-mol[i].angle;

// cоставляющие движения частицы по осям

mol[i].Vx := Round(mol[i].speed * Sin(mol[i].angle));

mol[i].Vy := Round(mol[i].speed * Cos(mol[i].angle));

// сдвигаем на новую позицию.

mol[i].x:=mol[i].x+mol[i].Vx;

mol[i].y:=mol[i].y+mol[i].Vy;

//mol[j].Vx:=mol[j].Vx+mol[i].Vx;

// mol[j].Vy:=mol[j].Vy+mol[i].Vy;

4.2 Код программы «Построение траектории броуновское движение»

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Timer1: TTimer;

ScrollBar1: TScrollBar;

StaticText1: TStaticText;

Button2: TButton;

Button3: TButton;

Bevel1: TBevel;

ColorDialog1: TColorDialog;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure initz;

procedure paint;

procedure ScrollBar1Change(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

x1,x2,y1,y2,time,tx,ty:integer;

implementation

{$R *.dfm}

procedure tform1.initz;

begin

tx:=136;

ty:=120;

x1:=tx;

y1:=ty;

canvas.MoveTo(x1,y1);

canvas.Pen.Color:=clblue;

canvas.Pen.Width:=3;

scrollbar1.SetParams(80,0,99);

time:=100-scrollbar1.Position;

timer1.Enabled:=false;

end;

procedure tform1.paint;

begin

x2:=random(bevel1.Width)+tx;

y2:=random(bevel1.Height)+ty;

canvas.LineTo(x2,y2);

canvas.Pen.color:=canvas.pen.color+1;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

if not timer1.Enabled then

begin

timer1.Enabled:=true;

timer1.Interval:=time;

button1.Caption:='STOP!';

end else

begin

timer1.enabled:=false;

button1.Caption:='GO!';

end;

end;

procedure TForm1.ScrollBar1Change(Sender: TObject);

begin

time:=100-scrollbar1.Position;

timer1.Interval:=time;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

initz;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

repaint;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

paint;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

if colordialog1.Execute then

canvas.Pen.color:=colordialog1.Color;

end;

end.

Этапы выполнения программы:



ЗАКЛЮЧЕНИЕ

В данной работе мною была освещена основная теория броуновского движения и история его открытия. Были рассмотрены вопросы моделирования броуновского движения на DELPFI, а также основная характеристика, преимущества и возможности данной среды программирования.

В итоге можно сказать, что изучение фракталов и хаоса, в нашем случае― это броуновское движение, открывает замечательные возможности, как в исследовании бесконечного числа приложений, так и в области чистой математики.


ЛИТЕРАТУРА

Архангельский А.Я. «Программирование в Delphi». Учебник по классическим версиям Delphi. – М.: ООО «Бином-Пресс», 2006

Барлет М.С. «Введение в теория случайных процессов»

Булинский А.В., Ширяев А.Н. «Теория случайных процессов». ―М.:

ФИЗМАТЛИТ, 2005 г

Кроновер Р.М. «Фракталы и хаос в динамических системах. Основы теории». Москва: Постмаркет, 2000 г.

Миллер Б.М., Панков А.Р. « Теория случайных процессов»

«Немного о фракталах» http://edu.ioffe.ru