Series6.Clear;
Series7.Clear;
Series8.Clear;
Series9.Clear;
Series13.Clear;
Series14.Clear;
Series15.Clear;
Series16.Clear;
Series2.AddXY(X_O,Y_O,'',clBlack);
Series2.AddXY(X,Y,'',clBlack);
Series6.AddArrow(X,Y,X1,Y1,'T');
Series7.AddArrow(X,Y,X,Y-LVector,'G');
Series8.AddXY(X1+0.5,Y1,'T');
Series9.AddXY(X+0.5,Y-LVector,'G');
Series15.AddXY(X+0.5,Y+1,'Fa');
Series13.AddArrow(X,Y,X,Y+1);
Series14.AddArrow(X,Y,Xfc,Yfc);
Series16.AddXY(Xfcnad,Yfcnad,'Fc');
if (round((fi*180)/PI) = 0)and (round((w*180)/PI) = 0) and (round(E) = 0) thenbegin
Series14.AddArrow(0,0,0,0);
Series16.Clear;
Series14.Clear;
end
else
begin
Series14.AddArrow(X,Y,Xfc,Yfc);
Series16.AddXY(Xfcnad,Yfcnad,'Fc');
end;
Timer1.Enabled := true;
Series3.AddXY(X,Y,'',clRed);
OT:=0;
while (OT = 0) do Application.ProcessMessages;
end;
Timer1.Enabled := false;
BitBtn4.Enabled:=false;
BitBtn2.Enabled:=true;
end;
//созданиеформы
procedure TForm1.FormCreate(Sender: TObject);
begin
width:=GetSystemMetrics(SM_CXSCREEN);
height:=GetSystemMetrics(SM_CYSCREEN);
form1.height:=height;
form1.width:=width;
Chart1.Height:=((Form1.Height) div 2)-80;
Chart1.Width:=((Form1.width) div 2)-160;
Chart2.Height:=((Form1.Height) div 2)-50;
Chart2.Width:=((Form1.width) div 2)-120;
Chart3.Height:=((Form1.Height) div 2)-50;
Chart3.Width:=((Form1.width) div 2)-120;
Chart4.Height:=((Form1.Height) div 2)-50;
Chart4.Width:=((Form1.width) div 2)-120;
Chart2.Top:=Panel2.Top+20;
Chart1.Top:=Panel2.Top+Chart2.Height+50;
Chart3.Top:=Chart2.Top;
Chart3.Left:=Chart2.Left+Chart2.Width;
Chart4.Top:=Chart1.Top-20;
Chart4.Left:=Chart2.Left+Chart2.Width;
if (Form1.width<1024) and (Form1.Height<768) then
begin
LabeledEdit4.Height:=LabeledEdit4.Height-5;
LabeledEdit4.Width:=LabeledEdit4.Width-5;
LabeledEdit1.Height:=LabeledEdit1.Height-5;
LabeledEdit1.Width:=LabeledEdit1.Width-5;
LabeledEdit2.Height:=LabeledEdit2.Height-5;
LabeledEdit2.Width:=LabeledEdit2.Width-5;
LabeledEdit3.Height:=LabeledEdit3.Height-5;
LabeledEdit3.Width:=LabeledEdit3.Width-5;
LabeledEdit5.Height:=LabeledEdit5.Height-5;
LabeledEdit5.Width:=LabeledEdit5.Width-5;
LabeledEdit6.Height:=LabeledEdit6.Height-5;
LabeledEdit6.Width:=LabeledEdit6.Width-5;
LabeledEdit7.Height:=LabeledEdit7.Height-5;
LabeledEdit7.Width:=LabeledEdit7.Width-5;
LabeledEdit8.Height:=LabeledEdit8.Height-5;
LabeledEdit8.Width:=LabeledEdit8.Width-5;
LabeledEdit4.Top:=LabeledEdit4.Top-15;
LabeledEdit1.Top:=LabeledEdit1.Top-53;
LabeledEdit2.Top:=LabeledEdit2.Top-78;
LabeledEdit3.Top:=LabeledEdit3.Top-23;
LabeledEdit5.Top:=LabeledEdit5.Top-19;
LabeledEdit6.Top:=LabeledEdit6.Top-50;
LabeledEdit7.Top:=LabeledEdit7.Top-80;
LabeledEdit8.Top:=LabeledEdit8.Top-82;
StaticText2.Top:=StaticText2.Top-6;
StaticText6.Top:=StaticText6.Top-105;
StaticText7.Top:=StaticText7.Top-110;
StaticText8.Top:=StaticText8.Top-115;
StaticText1.Top:=StaticText1.Top-120;
StaticText5.Top:=StaticText5.Top-126;
StaticText3.Top:=StaticText3.Top-130;
StaticText4.Top:=StaticText4.Top-135;
StaticText9.Top:=StaticText9.Top-140;
BitBtn2.Top:=BitBtn2.Top-147;
BitBtn3.Top:=BitBtn3.Top-147;
BitBtn4.Top:=BitBtn4.Top-155;
BitBtn1.Top:=BitBtn1.Top-155;
BitBtn1.Height:=BitBtn1.Height-5;
BitBtn1.Width:=BitBtn1.Width-5;
BitBtn2.Height:=BitBtn2.Height-5;
BitBtn2.Width:=BitBtn2.Width-5;
BitBtn3.Height:=BitBtn3.Height-5;
BitBtn3.Width:=BitBtn3.Width-5;
BitBtn4.Height:=BitBtn4.Height-5;
BitBtn4.Width:=BitBtn4.Width-5;
Label16.Top:=Label16.Top-105;
Label17.Top:=Label17.Top-109;
Label18.Top:=Label18.Top-116;
Label9.Top:=Label9.Top-117;
Label11.Top:=Label11.Top-125;
Label14.Top:=Label14.Top-130;
Label15.Top:=Label15.Top-137;
Label12.Top:=Label12.Top-140;
end;
if (Form1.width>1024) and (Form1.Height>768) then
begin
LabeledEdit4.Height:=LabeledEdit4.Height+5;
LabeledEdit4.Width:=LabeledEdit4.Width+5;
LabeledEdit1.Height:=LabeledEdit1.Height+5;
LabeledEdit1.Width:=LabeledEdit1.Width+5;
LabeledEdit2.Height:=LabeledEdit2.Height+5;
LabeledEdit2.Width:=LabeledEdit2.Width-5;
LabeledEdit3.Height:=LabeledEdit3.Height+5;
LabeledEdit3.Width:=LabeledEdit3.Width+5;
LabeledEdit5.Height:=LabeledEdit5.Height+5;
LabeledEdit5.Width:=LabeledEdit5.Width-5;
LabeledEdit6.Height:=LabeledEdit6.Height+5;
LabeledEdit6.Width:=LabeledEdit6.Width+5;
LabeledEdit7.Height:=LabeledEdit7.Height+5;
LabeledEdit7.Width:=LabeledEdit7.Width+5;
LabeledEdit8.Height:=LabeledEdit8.Height+5;
LabeledEdit8.Width:=LabeledEdit8.Width+5;
LabeledEdit4.Top:=LabeledEdit4.Top+15;
LabeledEdit1.Top:=LabeledEdit1.Top+58;
LabeledEdit2.Top:=LabeledEdit2.Top+78;
LabeledEdit3.Top:=LabeledEdit3.Top+30;
LabeledEdit5.Top:=LabeledEdit5.Top+23;
LabeledEdit6.Top:=LabeledEdit6.Top+53;
LabeledEdit7.Top:=LabeledEdit7.Top+80;
LabeledEdit8.Top:=LabeledEdit8.Top+82;
StaticText2.Top:=StaticText2.Top+6;
StaticText6.Top:=StaticText6.Top+125;
StaticText7.Top:=StaticText7.Top+130;
StaticText1.Top:=StaticText1.Top+135;
StaticText3.Top:=StaticText3.Top+135;
StaticText4.Top:=StaticText4.Top+135;
StaticText5.Top:=StaticText5.Top+135;
StaticText8.Top:=StaticText8.Top+135;
StaticText9.Top:=StaticText9.Top+135;
BitBtn2.Top:=BitBtn2.Top+157;
BitBtn3.Top:=BitBtn3.Top+157;
BitBtn4.Top:=BitBtn4.Top+165;
BitBtn1.Top:=BitBtn1.Top+165;
BitBtn1.Height:=BitBtn1.Height+5;
BitBtn1.Width:=BitBtn1.Width+5;
BitBtn2.Height:=BitBtn2.Height+5;
BitBtn2.Width:=BitBtn2.Width+5;
BitBtn3.Height:=BitBtn3.Height+5;
BitBtn3.Width:=BitBtn3.Width+5;
BitBtn4.Height:=BitBtn4.Height+5;
BitBtn4.Width:=BitBtn4.Width+5;
Label16.Top:=Label16.Top+125;
Label17.Top:=Label17.Top+130;
Label18.Top:=Label18.Top+135;
Label9.Top:=Label9.Top+135;
Label11.Top:=Label11.Top+135;
Label14.Top:=Label14.Top+135;
Label15.Top:=Label15.Top+135;
Label12.Top:=Label12.Top+135;
end;
tend:=10;
fi0:=StrToFloat(LabeledEdit2.Text);
Chart2.BottomAxis.Maximum:=tend;
Chart2.LeftAxis.Maximum:=fi0;
Chart2.LeftAxis.Minimum:=-fi0;
Chart3.BottomAxis.Maximum:=tend;
Chart4.BottomAxis.Maximum:=tend;
fi0:=fi0*PI/180;
LVector:=2;
X_O:=5;
Y_O:=6;
OT := 0;
B_Close:=false;
X:=X_O+dl*sin(fi0);
Y:=Y_O-dl*cos(fi0);
if (fi < 0) then
begin
fiFc:=90;
Xfc:=X+1*sin((fiFc*180)/PI);
Yfc:=Y-1*cos((fiFc*180)/PI);
end
else
begin
fiFc:=-90;
Xfc:=X+1*sin((fiFc*180)/PI);
Yfc:=Y-1*cos((fiFc*180)/PI);
end;
Series1.AddXY(4,6,'',clBlack);
Series1.AddXY(6,6,'',clBlack);
Series5.AddXY(X_O,Y_O,'',clBlack);
Series5.AddXY(5,0.5,'',clBlack);
Series2.AddXY(X_O,Y_O,'',clBlack);
Series2.AddXY(X,Y,'',clBlack);
Series3.AddXY(X,Y,'',clRed);
//Силы, действующие на тело
X1:=X_O+LVector*sin(fi0);
Y1:=Y_O-LVector*cos(fi0);
Series6.AddArrow(X,Y,X1,Y1);
Series7.AddArrow(X,Y,X,Y-LVector);
Series8.AddXY(X1+0.5,Y1,'T');
Series9.AddXY(X+0.5,Y-LVector,'G');
Series13.AddArrow(X,Y,X,Y+1);
Series14.AddArrow(X,Y,Xfc,Yfc);
Series15.AddXY(X+0.5,Y+1,'Fa');
Series16.AddXY(Xfc+0.5,Yfc,'Fc');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
B_Close:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
OT:=1;
end;
procedure TForm1.BStopClick(Sender: TObject);
begin
Form4.LabeledEdit4.Enabled:=false;
Chart3.LeftAxis.RoundFirstLabel:=true;
Chart2.LeftAxis.RoundFirstLabel:=true;
BitBtn3.Enabled:=false;
if BitBtn3.Enabled=false then
begin
BitBtn2.Enabled:=true;
BitBtn4.Enabled:=false;
B_Close:=true
end else exit;
end;
procedure TForm1.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit2KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit4KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit5KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit6KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit7KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.LabeledEdit8KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
#8,'0'..'9',',':;
else Key:=Chr(0);
end;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
if MessageDlg('Выдействительнохотитевыйтиизпрограммы?',MtConfirmation,[MbYes,mbNo],0)=MrYes then Form1.Close;
end;
//очиститьграфики
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form4.LabeledEdit4.Enabled:=true;
Chart3.LeftAxis.Maximum:=3;
Chart3.LeftAxis.Minimum:=-3;
Chart2.LeftAxis.Maximum:=85;
Chart2.LeftAxis.Minimum:=-85;
Chart4.LeftAxis.Maximum:=2;
Chart4.LeftAxis.Minimum:=0;
BitBtn2.Enabled:=false;
BitBtn3.Enabled:=true;
BitBtn4.Enabled:=false;
Timer1.Enabled := false ;
Chart4.LeftAxis.AutomaticMaximum:=false;
Chart4.LeftAxis.AutomaticMinimum:=false;
Chart2.LeftAxis.AutomaticMaximum:=false;
Chart2.LeftAxis.AutomaticMinimum:=false;
LabeledEdit1.Enabled:=true;
LabeledEdit2.Enabled:=true;
LabeledEdit3.Enabled:=true;
LabeledEdit4.Enabled:=true;
LabeledEdit5.Enabled:=true;
LabeledEdit6.Enabled:=true;
LabeledEdit7.Enabled:=true;
LabeledEdit8.Enabled:=true;
Chart2.Series[0].Clear;
Chart3.Series[0].Clear;
Chart4.Series[0].Clear;
B_Close:=true;
LVector:=2;
fi0:=StrToFloat(LabeledEdit2.Text);
fi0:=fi0*PI/180;
X_O:=5;
Y_O:=6;
OT := 0;
B_Close:=false;
X:=X_O+dL*sin(fi0);
Y:=Y_O-dL*cos(fi0);
//очистить прошлый кадр
Series2.Clear; //нить
Series3.Clear; // шар
Series6.Clear; // стрелкакрасная
Series7.Clear; // стрелкасиняя
Series8.Clear; // T
Series9.Clear; // G
// рисуем нить и шарик
Series2.AddXY(X_O,Y_O,'',clBlack);
Series2.AddXY(X,Y,'',clBlack);
Series3.AddXY(X,Y,'',clRed);
//Силы действующие на тело
X1:=X_O+LVector*sin(fi0);
Y1:=Y_O-LVector*cos(fi0);
Series6.AddArrow(X,Y,X1,Y1);
Series7.AddArrow(X,Y,X,Y-LVector);
Series8.AddXY(X1+0.5,Y1,'T');
Series9.AddXY(X+0.5,Y-LVector,'G');
Series13.Clear;
Series14.Clear;
Series15.Clear;
Series16.Clear;
Series13.AddArrow(X,Y,X,Y+1); //Fa стрелка
Series15.AddXY(X+0.5,Y+1,'Fa'); // Fa
fiFc:=-90;
Xfc:=X+1*sin((fiFc*180)/PI);
Yfc:=Y-1*cos((fiFc*180)/PI);
Series14.AddArrow(X,Y,Xfc,Yfc);
Series16.AddXY(Xfc+0.5,Yfc,'Fc');
end;
procedure TForm1.N2Click(Sender: TObject);
begin
ShellExecute(Handle,'open','теоретическаясправка.htm',nil,nil,SW_RESTORE);
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with Form6.MediaPlayer1 do
begin
Filename := 'Video.mpg';
Open;
Form6.Show;
Display := Form6.Panel1;
DisplayRect := Form6.Panel1.ClientRect;
end;
end;
end.
При запуске программы перед пользователем открывается главное окно, содержащие поля ввода параметров физического эксперимента, поля вывода посчитанных значений, поле для вывода графика и кнопки.
Внесём значения в поля ввода физического эксперимента: диаметр шара, массу шара, длину стержня, плотность среды, вязкость среды, начальный угол, начальная угловая скорость, конечное время.
В пункте меню в разделе настройки введём значение: предел угла
на графике, предел угловой скорости на графике, нижний предел энергии Е на графике и шаг интегрирования, те значения которые вы считаете нужными. Нажмём ОК.Нажмём кнопку «Старт», наблюдаем построение графиков:
1) график зависимости угла от времени
2) график зависимости угловой скорости от времени
3) график зависимости полной энергии колебаний от времени
4) анимация движения маятника
А также в полях вывода посчитанных значений выводится значение: собственная частота, собственный периода, декремент затухания, частота, период, добротность, плотность шарика.
В любой момент мы можем остановить построение, нажав кнопку «Стоп».
При нажатии на кнопку «Очистить графики» происходит очищение графических полей:
· графика зависимости угла от времени
· графика зависимости угловой скорости от времени
· графика зависимости полной энергии колебаний от времени
· анимация движения маятника возвращается в исходное начальное положение
При нажатии на кнопку «Видео» воспроизводится демонстрационное видео. На данном видео можно посмотреть порядок выполнения эксперимента.
По завершению выполнения эксперимента нажимаем кнопку «Выход».