Написал программу, движения тела по наклонной плоскости(только там стоит поступальное движение), а мне нужно равноприскоренное, на листке расчертил действие всех сил, вывел формулы (a,F(трения), v и тд), но не могу эти значения поставить в нужное место в программе!
Координаты при равноускоренном движении: x=x0+(a*t*t)/2 и y=y0;
Код:
unit Main;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, XPMan, ComCtrls;
type
TMainForm = class(TForm)
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
PaintBox1: TPaintBox;
Button4: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit5: TEdit;
Label7: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
end;
Poverhnya = Class
Xmax,scale,da,int,l:real;
Xpmax,Ypmax,a,dx,X0,Y0,r,X1,Y1, x, y:integer;
constructor Init;
procedure drawCircle(var x0:integer; y0:integer);
procedure draw;
end;
var
MainForm: TMainForm;
Tilo: Poverhnya;
implementation
{$R *.DFM}
var F,a,v:real;
Mt,m:extended;
const
g=9.81;
L=50;
t=3.3;
constructor Poverhnya.Init;
begin
Xpmax:=Mainform.Paintbox1.Width-90;
Ypmax:=Mainform.PaintBox1.Height;
Xmax:=1000;//максимальний розмір в метрах
x0:= Xpmax div 7;//початкове положення колеса
y0:= Ypmax div 7;
Scale:=Xmax/Xpmax; //маштаб
// кут площини повинен бути від 0..90
da:=50;
// радіус
r:=25;
l:=xpmax;
a:=0;
x:=xpmax-round(xpmax*cos(da/57.3));
y:=ypmax-round(xpmax*sin(da/57.3));
dx:=x-Round(r/sin(da/57.3));
end;
procedure Poverhnya.drawCircle(var x0:integer; y0:integer);
begin
with MainForm,PaintBox1,Canvas do
begin
// побудовва колеса
Ellipse(x0-r,y0-r,x0+r,y0+r);
//перша спиця
Moveto(x0,y0);
X1:=x0 - Round((r*sin(a/57.3)));
Y1:=y0 + Round((r*cos(a/57.3)));
LineTo(X1,Y1);
//друга спиця
Moveto(X0,Y0);
X1:=x0 - Round((r*sin((a+90)/57.3)));
Y1:=y0 + Round((r*cos((a+90)/57.3)));
LineTo(X1,Y1);
//третя спиця
Moveto(X0,Y0);
X1:=x0 - Round((r*sin((a+180)/57.3)));
Y1:=y0 + Round((r*cos((a+180)/57.3)));
LineTo(X1,Y1);
//четверта спиця
Moveto(X0,Y0);
X1:=x0 - Round((r*sin((a+270)/57.3)));
Y1:=y0 + Round((r*cos((a+270)/57.3)));
LineTo(X1,Y1);
If (a>360) then a:=a-360;
end;
end;
procedure Poverhnya.draw;
begin
with MainForm,PaintBox1,Canvas do
begin
//замальовуємо тіло
Pen.Width:=3;
Mainform.PaintBox1.Canvas.Brush.Color :=clSilver;
Mainform.PaintBox1.Canvas.Rectangle(0,0,Mainform.PaintBox1.Width,Mainform.PaintBox1.Height);
Mainform.PaintBox1.Canvas.Pen.Color:=$00004080;
Mainform.PaintBox1.Canvas.Brush.Color :=$00808040;
l:=l-4;
if (da<>90) then
begin
a:=a+10;
end;
//обраховуємо координати центра колеса
x0:=xpmax-round(l*cos(da/57.3));
y0:=ypmax-round(l*sin(da/57.3));
//малюємо площину під кутом
Moveto(xpmax-Round(r/sin(da/57.3)),ypmax);
LineTo(dx,y);
// малюэмо колесо
Tilo.drawCircle(x0,y0);
// якщо виходимо за межу Paintbox1 зупиняємо таймер
if ((y0>=(ypmax-r))) then Mainform.Timer1.Enabled:=false;
//(x0>=(xpmax-r)) or
end;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
Tilo.draw;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
if (edit1.Text='') or (edit2.Text='') then
begin
showmessage('__ Потрібно заповнити фізичні дані =) __');
end;
//ініціалізуємо обєкт Tilo
Tilo:=Poverhnya.Init;
// вмикаэмо таймер
Timer1.Enabled:=true;
if trystrtofloat(edit1.text, Mt) and trystrtofloat(edit1.text, m) then
begin
F:=Mt*m*g*cos(L/57.7);
a:=-Mt*g*cos(L/57.7)+g*sin(L/57.7);
v:=a*t;
edit3.Text:=floattostrF(F, ffFixed,6,2);
edit4.Text:=floattostrF(a, ffFixed,6,2);
edit5.Text:=floattostrF(v, ffFixed,6,2);
end;
end;
procedure TMainForm.Button3Click(Sender: TObject);
begin
// останавливаем таймер
Timer1.Enabled:=false;
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TMainForm.Button4Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
End.