Я ищу алгоритм для расчета направления и скорости мячей в бильярдной игре. Я уверен, что для этого должен быть какой-то тип открытого исходного кода, поскольку бильярдные игры - одни из самых старых компьютерных игр, которые я могу вспомнить.
Я имею в виду, что когда один мяч попадает в другой, мне нужен алгоритм для расчета направления их обоих. Это будет зависеть от точного угла, где они бьют друг друга, и от скорости.
Я хочу попрактиковаться в Java-кодировании, поэтому я ищу Java-код или пакет с таким типом кода.
Ответы:
Хотя базовое обнаружение / реакция столкновения сфера-сфера довольно простое, сделать это достаточно точно для хорошей симуляции пула будет сложнее, так как вам придется иметь дело с вращением.
Знаете ли вы о существовании физических двигателей? Вот некоторые популярные примеры (и они могут сделать гораздо больше, чем просто столкновения с мячом). Вероятно, хороший выбор для создания игры в пул, но не так много для изучения Java ...
В 2D
Box2D: http://www.box2d.org
Бурундук: http://code.google.com/p/chipmunk-physics/
В 3D
Bullet: http://bulletphysics.org/
ODE: http://www.ode.org
Если вы делали большую бюджетную коммерческую игру:
Havok: http://www.havok.com
источник
Возможно, вас заинтересует статья « Уроки в бильярдном зале: быстрое, точное обнаружение столкновений между кругами или сферами », если вы решите пойти по пути «катите сами». Это не специфично для Java, но обсуждает некоторые алгоритмы, используемые для простого моделирования.
источник
Для простой игры в пул, где спин не моделируется, алгоритм довольно прост.
В псевдокоде это становится:
Вы можете опустить массу из алгоритма, если все шары имеют одинаковую массу, а также принять постоянный радиус для всех шаров для игры в пул, но код будет более полезным для вас без этих упрощений.
Код основан на этом уроке , но я помню, что умножение импульсов там было неверным.
источник