Thema: Delphi Kollision

Einzelnen Beitrag anzeigen

Mr.M

Registriert seit: 7. Mai 2004
5 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Kollision

  Alt 12. Mai 2004, 17:28
Hier ist noch die Prozdeur zur Kollisionserkennung und dem Geschwindigkeitstausch!

Delphi-Quellcode:
procedure TprogMain.BallKollision(i:integer);
var Distanz:double;
var vx1,vy1,vx2,vy2:double;
var m1,m2:double;
var j:integer;
var a:double;
begin
     for j:=i to MaxBaelle-1 do
     begin
          Distanz:=sqrt(sqr(Ball[i].x-Ball[j].x+Ball[i].vx) +sqr(Ball[i].y-Ball[j].y+Ball[i].vy));
               if ((Ball[i].r+Ball[j].r)>Distanz) and (Distanz<>0) then
               begin
// flag:=Snd_async;
                    if checkbox3.Checked=true then sndplaysound('SOUND111.WAV',snd_async);
                    m1:=round(pi*sqr(Ball[i].r));
                    m2:=round(pi*sqr(Ball[j].r));
                    vx1:=Ball[i].vx;
                    vy1:=Ball[i].vy;
                    vx2:=Ball[j].vx;
                    vy2:=Ball[j].vy;
{ ab hier ist das Problem, zwar ist die Formel für den elastischen Stoß richtig, aber etwas fehlt noch, das ich nicht beachtet habe}

                    Ball[i].vx:=((m1-m2)*vx1 + 2*m2*vx2)/(m1+m2);
                    Ball[i].vy:=((m1-m2)*vy1 + 2*m2*vy2)/(m1+m2);
                    Ball[j].vx:=((m2-m1)*vx2 + 2*m1*vx1)/(m1+m2);
                    Ball[j].vy:=((m2-m1)*vy2 + 2*m1*vy1)/(m1+m2);

          Distanz:=sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(Ball[i].y-Ball[j].y));
               if ((Ball[i].r+Ball[j].r)>Distanz) and (Distanz<>0) then Kollisionen:=Kollisionen+1;
                    progmain.Caption:='Ballsimulation (' + floattostr(Kollisionen) + ' Kollisionen)';
               end;
     end;
end;
  Mit Zitat antworten Zitat