Ballprogramm / Gassimulierung
11. Okt 2007, 15:44
Hallo zusammen
Unserem Physik-Informatikkurs wurde ein Programm gegeben,dass die Gasmoleküle darstellen soll, das folgend aufgebaut ist:
Beim Öffnen des Programmes hüpfen 40 Bälle durch das Feld.
Die Bälle haben alle die gleiche Geschwindigkeit.
Wird ein Ball von einem oder mehreren anderen Bällen,wird der Ball in eine andere Richtung gestoßen,je nach dem von wo dieser angesoßen wurde.
Alle Bälle stoßen vom Programmfenster ab (einfallswinkel=ausfallswinkel)
Unsere Aufgabe soll es nun sein diesen Ausschnitt..:
procedure Stoss;
var h,d,dx,dy: single; i,j: integer;
begin
for i := 1 to max-1 do
for j := i+1 to max do
begin
d := sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(ball[i].y-ball[j].y));
if d <= Ball[i].r+Ball[j].r
then begin
h := Ball[i].vx; Ball[i].vx := Ball[j].vx;
Ball[j].vx := h;
h := Ball[i].vy; Ball[i].vy := Ball[j].vy;
Ball[j].vy := h;
if d < Ball[i].r+Ball[j].r then
begin
dx := (Ball[i].x-Ball[j].x)*(Ball[i].r+Ball[j].r-d)/(Ball[i].r+Ball[j].r);
dy := (Ball[i].y-Ball[j].y)*(Ball[i].r+Ball[j].r-d)/(Ball[i].r+Ball[j].r);
Ball[i].x:= Ball[i].x+dx;
Ball[i].y:=Ball[i].y+dy;
end
end
end
end;
...und diesen Ausschnitt des Programms zuerklären:
Ball[1].ZeigeDich;
for i := 2 to max do
begin
repeat
neu := true;
x := Random(Spielfeld.Bild.Width-100) + 25;
y := Random(Spielfeld.Bild.Height-50) + 25;
for j := 1 to i-1 do
if sqrt(sqr(x-Ball[j].x)+sqr(y-Ball[j].y)) <= 42
then neu := false;
until neu;
Ich hoffe mir kann dabei jemand helfen!
Danke schon mal im vorraus
Sana
|