我正在为andorid 用java 开发一个台球游戏。我试图让球在它们之间碰撞时遇到问题。所有的球都具有相同的质量和半径。我知道每个球在碰撞之前的位置和它们的速度(在 x,y 中),我需要知道每个球在碰撞后的速度。
有人可以给我一个算法或公式来计算它们吗?
答案实际上属于物理学(碰撞动力学)而不是计算机科学。
主要有两种类型的碰撞 - 弹性和非弹性。要模拟真实世界的场景,您应该实施非弹性规则。然而,它们更复杂,除了粒子质量和速度之外,还涉及几个变量。因此,您最好从弹性碰撞开始。
解决方案(弹性):这里有两条规则始终成立——动量守恒和动能守恒。假设 u1,u2 是质量为 m1,m2 的球的初始速度,它们的最终速度是 V1,V2 :
m 1 u 1 + m 2 u 2 = m 1 V 1 + m 2 V 2
m 1 u 1 2 + m 2 u 2 2 = m 1 V 1 2 + m 2 V 2 2
根据已知值m 1、u 1、m 2、u 2求解上述方程,您将得到V 1和V 2。
我在游戏中使用了以下链接作为圆碰撞算法。对我来说效果很好。 https://sites.google.com/site/t3hprogrammer/research/circle-circle-collision-tutorial