Значит есть программа в которой тела притягиваются...
все хорошо да вот только все тела "едут" вверх или вниз по оси OY.
В чем дело то быть может?
Код:
unit BBT;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, math;
type
TForm1 = class(TForm)
PaintBox1: TPaintBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Timer1: TTimer;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
end;
const n=1; m=10;
var
Form1: TForm1;
x,y,vx,vy,mass,dx,dy,dvx,dvy:array[n..m] of real;
i,j,g:integer;
sumax1,sumax2,sumay1,sumay2,R:real;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
begin
paintbox1.canvas.Brush.Color:=clBlack;
paintbox1.canvas.FillRect(paintbox1 .canvas.ClipRect);
if g<>1 then for i := n to m do
begin
x[i]:=randomrange(-100,100);
y[i]:=randomrange(-100,100);
mass[i]:=0.0000001;
vx[i]:=0;
vy[i]:=0;
g:=1;
end else begin
for i := n to m do
begin
dx[i]:=x[i];
dy[i]:=y[i];
dvx[i]:=vx[i];
dvy[i]:=vy[i];
end;
for i := n to m do
begin
sumax1:=0;
sumax2:=0;
sumay1:=0;
sumax2:=0;
for j := n to i-1 do
begin
if j<>i then begin
R:=sqrt(sqr(dx[j]-dx[i])+sqr(dy[j]-dy[i]));
sumax1:=sumax1+mass[j]*(dx[j]-dx[i])/R*R*R;
sumay1:=sumay1+mass[j]*(dy[j]-dy[i])/R*R*R;
end;
end;
for j := i+1 to m do
begin
if j<>i then begin
R:=sqrt(sqr(dx[j]-dx[i])+sqr(dy[j]-dy[i]));
sumax2:=sumax2+mass[j]*(dx[j]-dx[i])/R*R*R;
sumay2:=sumay2+mass[j]*(dy[j]-dy[i])/R*R*R;
end;
end;
vx[i]:=dvx[i]+sumax1+sumax2;
vy[i]:=dvy[i]+sumay1+sumay2;
x[i]:=dx[i]+vx[i];
y[i]:=dy[i]+vy[i];
end;
end;
paintbox1.Canvas.Pixels[round(x[m]+clientwidth/2),round(y[m]+clientheight/2)]:=clred;
for i := n to m-1 do
begin
paintbox1.Canvas.Pixels[round(x[i]+clientwidth/2),round(y[i]+clientheight/2)]:=clwhite;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
timer1.enabled:=true;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
timer1.enabled:=false;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
g:=0;
N1Click(Sender);
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
paintbox1.canvas.Brush.Color:=clBlack;
paintbox1.canvas.FillRect(paintbox1 .canvas.ClipRect);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
N1Click(Sender);
end;
end.