Zitat von
freak4fun:
und wenn hier mal jemand ne komplette lösung posted bekommt man was aufn deckel weil doch jeder selbst alles rausfinden bzw wissen soll
Was ja auch völlig korrekt so ist. Sonst ist der Lerneffekt = 0, und darum geht es in der Schule nun mal
.
Man wird, wenn man in etwa an das Verhalten von Billiardkugeln heranzukommen, um Mathe+Winkel+Vektoren nicht herum kommen. Ich bin mir nichtmal mehr sicher, ob ich die Grundlagen dazu schon in der 11. Klasse komplett hatte
.
Alles in allem finde ich die Verwendung von Shapes schon... naja, reichlich unschön. Aber wenn es denn sein soll
.
Das Problem mit der Geschwindigkeit:
Du hast für jeden Kreis ja einen Ortsvektor, der dir angibt wo sich dein Kreis befindet, und zudem einen Richtungsvektor der jeden Bewegungsschritt auf den Ortsvektor addiert wird. Die Länge dieses Richtungsvektors ist die Geschwindigkeit des Kreises (in Pixel pro Intervall).
Wenn du den Aufprallwinkel dann mal hast, und man davon ausgeht, dass beide "Kugeln" die gleiche Masse haben, dann verteilen sich nach dem Stoß die beiden Richtungsvektoren beider Kugeln gleichmäßig. => Beide Kugeln sind nachher gleich schnell. Und das sogar nur bei einem direkten Stoß. Wenn die Kugeln dezentral aufeinanderprallen, dann verlagert sich der Impuls wiederum anders.
Wenn du dann auch noch möchtest dass man simuliert, dass bei einem Stoß ja ein Teil der Energie in Wärme übergeht, und somit der Geschwindigkeit fehlt, dann musst du die Richtungsvektoren auch noch um einen Faktor kleiner skalieren.
Alles in allem ist der dezentrale Stoß von Kugeln ein nicht zu unterschätzendes Thema. Und mit der Programmiereung braucht man
imho erst garnicht anzufangen, wenn man die Theorie dahinter nicht vertanden hat.
Wenn du weisst welche Größen du kennst, und wie sie miteinander zu verrechnen sind, dann ist der eigentliche Code die wenigste Arbeit, da Delphi ja syntaktisch so schön an der Mathematik orientiert ist
.
Wenn du die Aufgabe so von deinem Lehrer hast, würde ich ihn mal fragen ob das sein Ernst war - oder dich selbst, ob du im Unterricht alles mitbekommen hast
.
Nach fertigem Code fragen bringt dich idR kein Stück weiter - und zudem wirst du den hier wahrscheinlich auch nicht bekommen.
@StefanDP: Dort ist aber auch nur der zentrale Stoß beschrieben. Der ist deutlich einfacher, aber reicht für eine brauchbare Billard-Simulation leider nicht.
Zwar läuft das mit den Richtungen gleich ab, aber das Problem mit der Geschwindigkeitsverteilung bleibt.
Ist die Frage wie weit man gehen will
. (Der Tisch hat nen Reibungskoeffizenten, die Kugeln auch z.B.
)
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel