Registriert seit: 7. Mai 2004
5 Beiträge
Delphi 7 Enterprise
|
Re: Kollision
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;
|
|
Zitat
|