![]() |
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 |
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 |
Re: Ballprogramm / Gassimulierung
Die Zeile
Delphi-Quellcode:
sieht mir sehr nach Pythagoras aus.
d := sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(ball[i].y-ball[j].y));
|
Re: Ballprogramm / Gassimulierung
Zitat:
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 14:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz