Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ballprogramm / Gassimulierung (https://www.delphipraxis.net/101332-ballprogramm-gassimulierung.html)

sana1666 11. Okt 2007 14:44


Ballprogramm / Gassimulierung
 
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

matashen 11. Okt 2007 15:00

Re: Ballprogramm / Gassimulierung
 
Nachdem dies hier kein Hausaufgabenforum ist, sollte dir fairerweise keiner die Lösung senden,

aber es ist eigentlich ganz einfach.

Zerleg die Prozeduren ganz einfich in Worten zwischen dem Begin und end, die var sind Platzhalter.

Hier noch als Hilfe die erste Zeile

setze in i die Zahlen von 1 bis max-1 ein und mache //ähm so etwas, vieleicht ist es dir dann leichter verständlich. Spezielle Befehle hab ich nich entdeckt. sqr = Quadrat (Square) und sqrt = Quadratwurzel(Squareroot)

Gruß Matthias

DeddyH 11. Okt 2007 15:04

Re: Ballprogramm / Gassimulierung
 
Die Zeile
Delphi-Quellcode:
 d := sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(ball[i].y-ball[j].y));
sieht mir sehr nach Pythagoras aus.

Diamondback2007 11. Okt 2007 15:22

Re: Ballprogramm / Gassimulierung
 
Zitat:

Zitat von sana1666
d := sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(ball[i].y-ball[j].y));

und damit soll wohl irgendetwas berechnet werden ;)
was braucht man um die kollision von zwei bällen zu prüfen?
richig die entfernung! und das geschieht hier! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz