Eu estou procurando um algoritmo para calcular a direção e a velocidade das bolas em um jogo de bilhar. Estou certo de que deve haver algum tipo de código-fonte aberto para isso, pois os jogos de sinuca são alguns dos jogos de computador mais antigos que me lembro.
Quero dizer, quando uma bola bate na outra, preciso de um algoritmo para calcular a direção de ambas. Depende do ângulo exato de onde eles se batem e da velocidade.
Eu quero praticar a codificação Java, por isso estou procurando código java ou pacote que tenha esse tipo de código.
Respostas:
Embora a detecção / resposta básica de colisão esfera-esfera seja bastante simples, fazê-lo com precisão suficiente para uma boa simulação de pool seria mais complicado, pois você teria que lidar com o spin.
Você está ciente da existência de mecanismos de física? Alguns exemplos populares são esses (e eles podem fazer muito mais do que apenas colisões com bolas de bilhar). Provavelmente uma boa escolha para fazer um jogo de bilhar, mas não tanto para aprender Java ...
Em 2D
Box2D: http://www.box2d.org
Esquilo: http://code.google.com/p/chipmunk-physics/
Em 3D
Bullet: http://bulletphysics.org/
ODE: http://www.ode.org
Se você estava criando um jogo comercial de grande orçamento:
Havok: http://www.havok.com
fonte
Você pode estar interessado no artigo " Lições do salão de bilhar: detecção de colisão rápida e precisa entre círculos ou esferas " se você optar por seguir a rota "rolar o seu próprio". Não é específico do Java, mas discute alguns dos algoritmos envolvidos para uma simulação simples.
fonte
Para um jogo simples de sinuca onde o spin não é modelado, o algoritmo é bastante simples.
No pseudo-código, isso se torna:
Você pode omitir a massa do algoritmo se todas as bolas tiverem a mesma massa e também assumir raio constante para todas as bolas em um jogo de bilhar, mas o código será mais útil para você sem essas simplificações.
O código é baseado neste tutorial , mas lembro que a multiplicação de impulsos estava incorreta lá.
fonte