Kulki Newtona

0

Witam pisze właśnie małą animacje w delphi symulująca kulki newtona. animacja działa poprawnie z tym akurat nie mam problemu. Kulki odbijają się tak jak powinny w zaleznosci ile zostanie przeciagnietych. Problem jest w tym że pan kochany wykladowca zazyczyl sobie zeby dane wejsciowe wygladały w nastepujacy sposób:

Dane wejściowe:
Parametry fizyczne układu, odchylenie, masa kulek, średnica, sprężystość, długość nici na której jest zawieszona kulka, ilość uderzeń, rozproszenie energii

za cholere nie moge znalezc wzorów fizycznych na to :( i w tym jest problem aktualnie kullki poruszaja sie wg 1 paramatru tj. x na układzie wspolzednych, potrzebuje wzoru ktory uwzglednia te wszystkie paramatry.

Rodacy pomożecie? Moze ktos kiedys pisał cos takiego?

Pozdr.

0

Wzory których potrzebujesz możesz szybko wywieść z następujących zasad:

http://pl.wikipedia.org/wiki/Zasady_dynamiki
http://pl.wikipedia.org/wiki/Zasada_zachowania_energii

Jak widzisz wiedza której potrzebujesz zawiera się w zakresie kształcenia szkoły podstawowej toteż myślę że student powinien bez problemów poradzić sobie z zadaniem.

0

Dziękuję za odp. jestem po sieciach, zawsze u mnie było kiepsko z fizyką :) btw. Czuję nutkę ironii jaką słychać u wykładowców :P Pewnie tam u was w Poznaniu często można spotkać takich niesfornych studentów :)

Pozdrawiam, :)

0

Kiedyś w gwałtownym przypływie nudy spłodziłem coś takiego:(Już myśałem że nie znajdę)

type tob=record
vx,vy,            //predkosc w plaszczyznie x i y (w pixelach)
x,y,              //pozycja  w plaszczyznie x i y
m,                //masa kulki (masa > 0)
r                 //wielkosc kulki (w pixelach)
:real;
end;

const max=3;
const speed=50;

var
  Form1: TForm1;
  vx1,vx2,vy1,vy2,m1,m2,x1,x2,y1,y2,r1,r2:real;
  p:array[0..max] of tob;
  bool:boolean=true;
  bmp:tbitmap;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var a,s,d:integer;
var t,ix,iy:real;
begin
for a:=1 to speed do begin
  for s:=1 to max do begin
  // przemieszczenie
  p[s].x:=p[s].x+p[s].vx/100;
  p[s].y:=p[s].y+p[s].vy/100;
  // odbicia od scian
  if p[s].x<p[s].r then p[s].vx:=-p[s].vx;
  if p[s].y<p[s].r then p[s].vy:=-p[s].vy;
  if p[s].x>form1.ClientWidth-p[s].r then p[s].vx:=-p[s].vx;
  if p[s].y>form1.ClientHeight-p[s].r then p[s].vy:=-p[s].vy;
  end;
  for s:=1 to max-1 do
  for d:=s+1 to max do
  if ((sqr(p[s].x-p[d].x)+sqr(p[s].y-p[d].y))<sqr(p[s].r+p[d].r)) then begin
    // >>>>>>>>>>>>>> oto caly kod obliczajacy predkosci po zdezeniu
    p[s].x:=p[s].x-p[s].vx/100;
    p[s].y:=p[s].y-p[s].vy/100;
    p[d].x:=p[d].x-p[d].vx/100;
    p[d].y:=p[d].y-p[d].vy/100;
    ix:=0;
    iy:=0;
    t:=0;
    ix:=p[s].x-p[d].x;
    iy:=p[s].y-p[d].y;
    t:=-2*(ix*p[s].vx+iy*p[s].vy-ix*p[d].vx-iy*p[d].vy);
    t:=t/(ix*ix+iy*iy);
    t:=t/( 1/p[s].m + 1/p[d].m );
    p[s].vx:=p[s].vx+(t*ix/p[s].m);
    p[s].vy:=p[s].vy+(t*iy/p[s].m);
    p[d].vx:=p[d].vx-(t*ix/p[d].m);
    p[d].vy:=p[d].vy-(t*iy/p[d].m);
    // <<<<<<<<<<<<<<<  oto caly kod obliczajacy predkosci po zdezeniu
  end;
end;
form1.FormPaint(form1);
end;

procedure TForm1.FormCreate(Sender: TObject);
var a:integer;
begin
  bmp:=tbitmap.Create;
  bmp.Width:=600;
  bmp.Height:=600;
  // >>>>>>>>>>>>>>  ustawiwienie poczatkowych wartosci
  p[1].x:=100;
  p[1].y:=100;
  p[1].vx:=10;
  p[1].vy:=10;
  p[1].r:=30;
  p[1].m:=1;

  p[2].x:=150;
  p[2].y:=200;
  p[2].vx:=0;
  p[2].vy:=0;
  p[2].r:=30;
  p[2].m:=1;

  p[3].x:=100;
  p[3].y:=400;
  p[3].vx:=0;
  p[3].vy:=0;
  p[3].r:=90;
  p[3].m:=50;
  // <<<<<<<<<<<<<<<  ustawiwienie poczatkowych wartosci
end;

procedure TForm1.FormPaint(Sender: TObject);
var a:integer;
begin
  // >>>>>>>>>>>>>> odswierzanie obrazu
  bmp.Canvas.Brush.Color:=$ffffff;
  bmp.Canvas.Rectangle(0,0,600,600);
  bmp.Canvas.Brush.Color:=0;
  for a:=1 to max do
    bmp.Canvas.Ellipse(trunc(p[a].x-p[a].r+0.5),trunc(p[a].y-p[a].r+0.5),trunc(p[a].x+p[a].r+0.5),trunc(p[a].y+p[a].r+0.5));
  form1.Canvas.Draw(0,0,bmp);
  // <<<<<<<<<<<<<<<  odswierzanie obrazu
end;

Co prawda to nie jest dokładnie to co masz do zrobienia ale myślę że stanowi jakiś punkt zaczepienia i może się przydać.
Btw. Sugerujesz że jestem wykładowcą?

1 użytkowników online, w tym zalogowanych: 0, gości: 1