Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 15:50   #1
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость Тело по наклонной

Написал программу, движения тела по наклонной плоскости(только там стоит поступальное движение), а мне нужно равноприскоренное, на листке расчертил действие всех сил, вывел формулы (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.
Вложения
Тип файла: rar Сам роб.rar (183.6 Кб, 21 просмотров)
Lemo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вставка в тело тригера INTITY_INSERT Pitbull SQL, базы данных 0 21.02.2008 23:45