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


Информация о работе «Построение траектории Броуновского движения»
Раздел: Промышленность, производство
Количество знаков с пробелами: 32197
Количество таблиц: 4
Количество изображений: 5

Похожие работы

Скачать
10322
0
4

... давайте посмотрим, как это в действительности происходит. Используя фрактал, называемый Деревом Пифагора, не рассматриваемого здесь (который, кстати, не изобретен Пифагором и никак не связан с теоремой Пифагора) и Броуновского движения (которое хаотично), давайте, попытаемся сделать имитацию реального дерева. Упорядочение листьев и веток на дереве довольно сложно и случайно и, вероятно не является ...

Скачать
29928
0
0

... Поэма Лукреция состоит из 6 книг; в книгах 1 и 2 излагается атомистическая теория мироздания и идея к о р п у с к у л я р н о й модели атома. 3. От физики Аристотеля до физики Ньютона. Построение целостной астрономической картины мира - геоцентрической системы Аристотеля-Птоломея исходило из того, что непосредственно наблюдаемые перемещения небесных светил есть их действительные перемещения. ...

Скачать
107106
0
0

... сложным физическим понятием для учащихся. К этому понятию учащихся подводят на основе опытов по электризации тел. На основе опытов по электризации различных тел (стекла, эбонита, капрона, и т.д.) ищут ответ на следующие вопросы: 1. Только ли эбонит при натирании шерстью электризуется? 2. Обязательно ли натирать тела шерстью? 3. Электризуются оба или одно из натертых тел? 4. Зависит ли род заряда ...

Скачать
95433
0
6

... характеризуют мощностью. Она показыввает, какая работа совершается телом в еденицу времени. Это скорость совершения работы N=A/t. Измеряется в ваттах (за 1 с выполняется работы в 1 Дж). Билет 27 1.   1.   Поверхностное натяжение. Смачивание и капиллярность. Поверхностное натяжение в природе и технике. 2.   2.   Активное и реактивное сопротивление. Закон Ома для цепи переменного тока. 3.   ...

0 комментариев


Наверх