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
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
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...