![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Пытаюсь смоделировать движение многоступенчатой ракеты.(ракета имеет N ступеней с одинаковым количеством топлива в каждой)
Для упрощения задачи представил ,что топливо сжигается моментально, но чтобы ступени моментално не отстыковывались и приращения к скорости проходили не моментально, задал период Код:
per:=MTEK/MC; // где MTEK-это текущая масса, а MC-это сухая масса ракеты Я не знаю как задать начальные параметры так, чтобы скорость ракеты после всех приращения стала постоянная. Прикладываю архив с проектом. Вот код первого юнита Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; PaintBox1: TPaintBox; Edit4: TEdit; Label4: TLabel; Button3: TButton; Timer1: TTimer; Button2: TButton; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button4: TButton; Label9: TLabel; Button5: TButton; Label10: TLabel; Button6: TButton; Label11: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; h,w,u0,v0,i,mx,my,k,o,kt:integer; Vx,Vy,dt,x,y,r,dx,dy,Fx,Fy,Ax,Ay,nt,cn,MT,MC,N,m,u,MTEK,per,stper,Vn,Vtek,t,Vstat:real; x2,y2:integer; implementation uses Unit2,Unit4; {$R *.dfm} procedure perevod(x1,y1:real; mx,my,v0,u0:integer;var x2,y2:integer); begin x2:=round(u0+x1*mx); y2:=round(v0-y1*my); end; procedure TForm1.Button1Click(Sender: TObject); begin MT:=strtoint(form2.edit1.Text); MC:=strtoint(form2.edit2.Text); N:=strtoint(form2.Edit3.Text); m:=MT/N; u:=strtoint(form2.edit4.Text); x:=5; y:=0; Vx:=0; Vy:=0.2; Vstat:=0.4; dt:=0.1; t:=0; stper:=0; Vtek:=1; MTEK:=50; per:=MTEK/MC; Vn:=(m*u)/(MC+(1*m)); u0:=strtoint(edit1.Text); v0:=strtoint(edit2.Text); mx:=strtoint(edit3.Text); my:=strtoint(edit4.Text); paintbox1.Canvas.MoveTo(0,v0); paintbox1.Canvas.LineTo(w,v0); paintbox1.Canvas.MoveTo(u0,h); paintbox1.Canvas.LineTo(u0,0); k:=u0; o:=1; i:=1; while (o<20) do begin k:=k+mx; paintbox1.Canvas.MoveTo(k,v0-4); paintbox1.Canvas.LineTo(k,v0+4); paintbox1.Canvas.TextOut(k,v0+20,inttostr(i)); i:=i+1; o:=o+1; end; k:=u0; o:=1; i:=-1; while (o<20) do begin k:=k-mx; paintbox1.Canvas.MoveTo(k,v0-4); paintbox1.Canvas.LineTo(k,v0+4); paintbox1.Canvas.TextOut(k,v0+20,inttostr(i)); i:=i-1; o:=o+1; end; k:=v0; i:=-1; o:=1; while (o<20) do begin k:=k+my; paintbox1.Canvas.MoveTo(u0-4,k); paintbox1.Canvas.LineTo(u0+4,k); paintbox1.Canvas.TextOut(u0+15,k,inttostr(i)); i:=i-1; o:=o+1; end; k:=v0; i:=1; o:=1; while (o<20) do begin k:=k-my; paintbox1.Canvas.MoveTo(u0-4,k); paintbox1.Canvas.LineTo(u0+4,k); paintbox1.Canvas.TextOut(u0+15,k,inttostr(i)); i:=i+1; o:=o+1; end; end; procedure TForm1.Button2Click(Sender: TObject); begin timer1.Enabled:=true; form1.Label10.Visible:=false; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Button4Click(Sender: TObject); begin if form2.Visible=true then form2.Hide else form2.Show; end; procedure TForm1.Button5Click(Sender: TObject); begin timer1.Enabled:=false; form1.label10.Visible:=true; end; procedure TForm1.Button6Click(Sender: TObject); begin if form4.Visible then form4.Hide else form4.Show; end; procedure TForm1.FormCreate(Sender: TObject); begin w:=paintbox1.Width; h:=paintbox1.Height; end; procedure TForm1.Timer1Timer(Sender: TObject); begin MTEK:=MT-m; y:=y+Vtek*dt; t:=t+dt; stper:=stper+dt; if stper=per then begin Vtek:=Vtek+Vn; stper:=0; end; nt:=y; perevod(x,y,mx,my,v0,u0,x2,y2); paintbox1.Canvas.Pixels[x2,y2]:=clred; form4.Label1.caption:=floattostr(y); form4.Label2.Caption:=floattostr(Vtek); form4.Label3.Caption:=floattostr(MT); label11.Caption:=floattostr(t); end; end. |