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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 00:37   #1
pastuhdima
Немного нуб
Пользователь
 
Аватар для pastuhdima
 
Регистрация: 01.10.2011
Сообщений: 41
Смущение Смещение

Значит есть программа в которой тела притягиваются...
все хорошо да вот только все тела "едут" вверх или вниз по оси 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.
pastuhdima вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смещение Зод Win Api 1 26.08.2011 13:40
смещение цифр kop Общие вопросы C/C++ 2 31.05.2011 01:32
Смещение рисунка skrudjmagdak Общие вопросы Delphi 5 27.03.2010 15:23
Смещение компонента Volt Общие вопросы Delphi 9 20.01.2010 00:36
Смещение ячеек Zulius Microsoft Office Excel 3 26.11.2009 12:30