Um diesen Thread den wesentlichen Inhalten vorzubehalten und weil er der Moderation unterliegt, postet bitte Meinungen, Fehlermeldungen und solstiges hier:
Diskussion zum Thema Kollision und Reflexion - Elastischer Stoß
Der Bitte vom @ErfinderDesRades folgend hab ich mich mal hingesetzt und das ganze in WinForm als Billiard-Spiel umgesetzt.
Hilfe bei Erstellung einer Kollisionserkennung
Kein Pong - Erstaunliches mit ItemsControl.Itemspanel
Hier war der bisher beste Ansatz: 2D Physic Engine (Kreise mit Kollision) [NEUE FRAGE]
Letztenendes sind zwei Prozeduren interessant: Die Behandlung der Reflexion an der Wand und die der Reflexion zweier Bälle.
Dazu wird getestet, ob die aktuelle Position zu dicht am jeweils anderen Objekt ist. Wenn ja, erfolgt eine Reflexion.
An der Wand muss nur die jeweilige Geschwindigkeitskomponente invertiert werden, beim elastischen Stoß liefert die Physik die Theorie:
de.wikipedia.org/wiki/Sto%C3%9F_(Physik)
Final sind die markierten Gleichungen relevant, und mit der entsprechenden Vektor-Klasse kann man sie direkt so in den Code schreiben:
Wie man sieht: Elementar einfach.
Zur Illustration 3 Szenen im Abstand von je ca. einer Sekunde:
Mit dem Button
Hierbei wird momentan nicht getestet, ob sich an der Einfügeposition eine Kugel befindet, da kann also Unsinn passieren.
Je kleiner die Zeiteinheiten sind (momentan 2 Einheiten) um so präziser werden die Stöße berechnet.
Sicher ist noch nicht alles optimal, aber dies soll nur ein Beispiel zur Lösung sein.
=====================
Defektes Projekt entfernt,
bitte den Anhang von @VaporiZed verwenden.
=====================
Anmerkung vom @ErfinderDesRades : Dieses Projekt behandelt (momentan nur) den zentralen elastischen Stoß, d.h., die Kugeln verhalten sich so, als ob die Richtungsvektoren eine gemeinsame Gerade beschreiben.
Den dezentralen Stoß reiche ich nach.
=====================
Neue Version vom 11.04.2018, unterschiedliche Massen und Reflexion an der Wand werden gut behandelt.
Collision.zip
Diskussion zum Thema Kollision und Reflexion - Elastischer Stoß
Der Bitte vom @ErfinderDesRades folgend hab ich mich mal hingesetzt und das ganze in WinForm als Billiard-Spiel umgesetzt.
Hilfe bei Erstellung einer Kollisionserkennung
Kein Pong - Erstaunliches mit ItemsControl.Itemspanel
Hier war der bisher beste Ansatz: 2D Physic Engine (Kreise mit Kollision) [NEUE FRAGE]
Letztenendes sind zwei Prozeduren interessant: Die Behandlung der Reflexion an der Wand und die der Reflexion zweier Bälle.
Dazu wird getestet, ob die aktuelle Position zu dicht am jeweils anderen Objekt ist. Wenn ja, erfolgt eine Reflexion.
An der Wand muss nur die jeweilige Geschwindigkeitskomponente invertiert werden, beim elastischen Stoß liefert die Physik die Theorie:
de.wikipedia.org/wiki/Sto%C3%9F_(Physik)
Final sind die markierten Gleichungen relevant, und mit der entsprechenden Vektor-Klasse kann man sie direkt so in den Code schreiben:
Zur Illustration 3 Szenen im Abstand von je ca. einer Sekunde:
Mit dem Button
Next
wird eine neue Kugel ins Spiel gebracht. Immer an derselben Position, aber mit Zufalls-Geschwindigkeiten.Hierbei wird momentan nicht getestet, ob sich an der Einfügeposition eine Kugel befindet, da kann also Unsinn passieren.
Je kleiner die Zeiteinheiten sind (momentan 2 Einheiten) um so präziser werden die Stöße berechnet.
Sicher ist noch nicht alles optimal, aber dies soll nur ein Beispiel zur Lösung sein.
=====================
bitte den Anhang von @VaporiZed verwenden.
Anmerkung vom @ErfinderDesRades : Dieses Projekt behandelt (momentan nur) den zentralen elastischen Stoß, d.h., die Kugeln verhalten sich so, als ob die Richtungsvektoren eine gemeinsame Gerade beschreiben.
Den dezentralen Stoß reiche ich nach.
=====================
Neue Version vom 11.04.2018, unterschiedliche Massen und Reflexion an der Wand werden gut behandelt.
Collision.zip
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „RodFromGermany“ ()