Thema: Delphi Gasteilchen-Simulation

Einzelnen Beitrag anzeigen

mr.winkle

Registriert seit: 25. Mai 2006
98 Beiträge
 
Delphi 7 Personal
 
#16

Re: Gasteilchen-Simulation

  Alt 16. Feb 2008, 16:27
Hi Pungex,
ich bin der Typ mit Gasteilchen3D

Zitat von shmia:
Delphi-Quellcode:
function Kollision(A, B : TPoint; Squaredist:integer):boolean;
var
   x,y : integer;
begin
  x := A.x-B.x;
  y := A.x-B.x;
  result := ((x*x)+(y*y) <= Squaredist);
end;
Naja, bei y sollte man schon die Y-Koordinaten der Punkte voneinander subtrahieren, sonst wird das nichts
y:= A.Y-B.Y; Ich mach das immer mit folgender Funktion:
Delphi-Quellcode:
function abstand(a,b:tpoint):real;
begin
  result:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

//Abfrage
if abstand(punkta,punktb)<=radiusa+radiusb then kollision;
Allerdings reicht das alleine für die Abprallberechnungen von Teilchen nicht aus. Deshalb hab ich mal meine absoluten Anfänge angehängt. Ich bin mir ziemlich sicher das du das gebrauchen kannst

Meine Stossprozedur sieht so aus:
Delphi-Quellcode:
procedure tForm1.stoss(var b1,b2:tBall);
var M1,M2,delvx,delvy,dmx,dmy,dvx,dvy:single;
begin
  M1:=b1.masse;
  M2:=b2.masse;
  dmx:=b2.x-b1.x;
  dmy:=b2.y-b1.y;
  delvx:=b2.vx-b1.vx;
  delvy:=b2.vy-b1.vy;
  dvx:=2*M2*dmx*(dmx*delvx+dmy*delvy)/((SQR(dmx)+SQR(dmy))*(M1+M2));
  dvy:=2*M2*dmy*(dmx*delvx+dmy*delvy)/((SQR(dmx)+SQR(dmy))*(M1+M2));
  b1.vx:=b1.vx+dvx;
  b1.vy:=b1.vy+dvy;
  b2.vx:=b2.vx-(M1/M2)*dvx;
  b2.vy:=b2.vy-(M1/M2)*dvy;
  bewegeball(b1);
  bewegeball(b2);
end;
Damit werden auch sofort je nach Masse, Winkel und Radius die neuen Geschwindigkeiten und Richtungen angegeben. Allerdings treten noch ein paar Schönheitsfehler auf, die sich aber leicht beheben lassen. Im Anhang findest du eine laufende Simulation und bei Fragen kannst du diese gern an mich stellen.

mfg, mr.winkle
Angehängte Dateien
Dateityp: zip modellgas_355.zip (12,0 KB, 16x aufgerufen)
Dateityp: exe modellgas1_745.exe (402,0 KB, 39x aufgerufen)
  Mit Zitat antworten Zitat