Движение заряженной частицы в постоянных электрическом и магнитном полях

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.