Движение заряженной частицы в постоянных электрическом и магнитном полях
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Shape1: TShape;
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xx,yy,vx,vy,ax,ay,dt,E,B: double;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
xx:=shape1.Left; yy:=panel1.Height-5-shape1.Top;
vx:=0; vy:=0;
dt:=0.05; // Шаг по времени
E:=1; B:=0.2; // Напряжённости полей
end;
// Кнопка «пуск»
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ax:=B*vy; ay:=E-B*vx; // Проекции ускорения
xx:=xx+vx*dt+ax*dt*dt/2; // Пересчёт координат
yy:=yy+vy*dt+ay*dt*dt/2;
vx:=vx+ax*dt; vy:=vy+ay*dt; //Пересчёт скоростей
shape1.Left:=round(xx); shape1.Top:=round(panel1.Height-5-yy); // Рисование в новых положениях
end;
// Ввод новых параметров
procedure TForm1.Button2Click(Sender: TObject);
begin
vx:=0; vy:=0; shape1.Left:=5; shape1.Top:=296; xx:=5; yy:=panel1.Height-5-shape1.Top;
timer1.Enabled:=false;
E:=strtofloat(edit1.text);
B:=strtofloat(edit2.text);
end;
end.