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
... давайте посмотрим, как это в действительности происходит. Используя фрактал, называемый Деревом Пифагора, не рассматриваемого здесь (который, кстати, не изобретен Пифагором и никак не связан с теоремой Пифагора) и Броуновского движения (которое хаотично), давайте, попытаемся сделать имитацию реального дерева. Упорядочение листьев и веток на дереве довольно сложно и случайно и, вероятно не является ...
... Поэма Лукреция состоит из 6 книг; в книгах 1 и 2 излагается атомистическая теория мироздания и идея к о р п у с к у л я р н о й модели атома. 3. От физики Аристотеля до физики Ньютона. Построение целостной астрономической картины мира - геоцентрической системы Аристотеля-Птоломея исходило из того, что непосредственно наблюдаемые перемещения небесных светил есть их действительные перемещения. ...
... сложным физическим понятием для учащихся. К этому понятию учащихся подводят на основе опытов по электризации тел. На основе опытов по электризации различных тел (стекла, эбонита, капрона, и т.д.) ищут ответ на следующие вопросы: 1. Только ли эбонит при натирании шерстью электризуется? 2. Обязательно ли натирать тела шерстью? 3. Электризуются оба или одно из натертых тел? 4. Зависит ли род заряда ...
... характеризуют мощностью. Она показыввает, какая работа совершается телом в еденицу времени. Это скорость совершения работы N=A/t. Измеряется в ваттах (за 1 с выполняется работы в 1 Дж). Билет 27 1. 1. Поверхностное натяжение. Смачивание и капиллярность. Поверхностное натяжение в природе и технике. 2. 2. Активное и реактивное сопротивление. Закон Ома для цепи переменного тока. 3. ...
0 комментариев