Je recherche un algorithme pour calculer la direction et la vitesse des balles dans un jeu de billard. Je suis sûr qu'il doit y avoir un certain type de code open source pour cela, car les jeux de billard sont parmi les plus anciens jeux informatiques dont je me souvienne.
Je veux dire, quand une balle frappe une autre, j'ai besoin d'un algorithme pour calculer la direction des deux. Cela dépendra de l'angle exact où ils se heurtent et de la vitesse.
Je veux pratiquer le codage Java, donc je recherche du code Java ou un package qui a ce type de code.
Réponses:
Bien que la détection / réponse de collision sphère-sphère de base soit assez simple, il serait plus difficile de le faire avec suffisamment de précision pour une bonne simulation de pool, car vous auriez à faire face à la rotation.
Connaissez-vous l'existence de moteurs physiques? Voici quelques exemples populaires (et ils peuvent faire bien plus que de simples collisions avec des balles de billard). Probablement un bon choix pour faire un jeu de billard, mais pas tant pour apprendre Java ...
En 2D
Box2D: http://www.box2d.org
Chipmunk: http://code.google.com/p/chipmunk-physics/
En 3D
Bullet: http://bulletphysics.org/
ODE: http://www.ode.org
Si vous faisiez un jeu commercial à gros budget:
Havok: http://www.havok.com
la source
Vous pouvez être intéressé par l'article " Leçons de la salle de billard: détection rapide et précise des collisions entre cercles ou sphères " si vous choisissez de suivre la voie "roulez vous-même". Ce n'est pas spécifique à Java, mais traite de certains des algorithmes impliqués pour une simulation simple.
la source
Pour un jeu de billard simple où le spin n'est pas modélisé, l'algorithme est assez simple.
En pseudo code cela devient:
Vous pouvez omettre la masse de l'algorithme si toutes les boules ont la même masse et assumer également un rayon constant pour toutes les boules pour un jeu de billard, mais le code vous sera plus utile sans ces simplifications.
Le code est basé sur ce tutoriel , mais je me souviens que la multiplication d'impulsions y était incorrecte.
la source