Ich suche einen Algorithmus, um die Richtung und Geschwindigkeit von Bällen in einem Poolspiel zu berechnen. Ich bin mir sicher, dass es dafür eine Art Open-Source-Code geben muss, da Pool-Spiele zu den ältesten Computerspielen gehören, an die ich mich erinnern kann.
Ich meine, wenn ein Ball auf einen anderen trifft, brauche ich einen Algorithmus, um die Richtung beider zu berechnen. Es hängt vom genauen Winkel des Aufeinandertreffens und von der Geschwindigkeit ab.
Ich möchte Java-Codierung üben, daher suche ich nach Java-Code oder einem Paket mit diesem Codetyp.
Antworten:
Während die grundlegende Erkennung / Reaktion von Kugel-Kugel-Kollisionen recht einfach ist, wäre es schwieriger, sie genau genug für eine gute Pool-Simulation durchzuführen, da Sie sich mit dem Spin befassen müssten.
Kennen Sie die Existenz von Physik-Motoren? Einige beliebte Beispiele sind diese (und sie können viel mehr als nur Poolballkollisionen). Wahrscheinlich eine gute Wahl, um ein Poolspiel zu machen, aber nicht so sehr, um Java zu lernen ...
In 2D
Box2D: http://www.box2d.org
Chipmunk: http://code.google.com/p/chipmunk-physics/
In 3D
Aufzählungszeichen: http://bulletphysics.org/
ODE: http://www.ode.org
Wenn Sie ein kommerzielles Spiel mit großem Budget erstellt haben:
Havok: http://www.havok.com
quelle
Der Artikel " Lektionen in der Billardhalle: Schnelle, genaue Kollisionserkennung zwischen Kreisen oder Kugeln " könnte Sie interessieren , wenn Sie sich für die Route "Roll your own" entscheiden. Es ist nicht Java-spezifisch, bespricht jedoch einige der Algorithmen, die für eine einfache Simulation erforderlich sind.
quelle
Für ein einfaches Poolspiel, bei dem der Spin nicht modelliert ist, ist der Algorithmus recht einfach.
Im Pseudocode wird dies:
Sie können die Masse aus dem Algorithmus auslassen, wenn alle Bälle die gleiche Masse haben und für alle Bälle für ein Poolspiel einen konstanten Radius annehmen. Ohne diese Vereinfachungen ist der Code jedoch für Sie nützlicher.
Der Code basiert auf diesem Tutorial , aber ich erinnere mich, dass die Impulsmultiplikation dort falsch war.
quelle