擅长:python、mysql、java
<p>检测碰撞只是第一步。让我们把它分解。</p>
<p>最快的方法是计算它们的方形边界框,看看它们是否碰撞。两个边需要交叉(1的顶部和底部或2,1的左侧和2的右侧,或反之亦然),以便边界框重叠。没有重叠,没有碰撞。</p>
<p>现在,当它们重叠时,你需要计算它们之间的距离。如果这个距离大于球半径的和,那么就没有碰撞。</p>
<p>好吧!我们有两个球相撞。<em>现在</em>什么?好吧,他们必须互相击退。它们反弹的方式取决于几个因素。</p>
<p>首先是它们的弹性。两个橡胶球互相弹跳的反弹方式不同于两个玻璃球。</p>
<p>第二个是它们的初始速度。惯性是指他们希望继续沿着他们开始的方向前进。</p>
<p>第三个是球的质量。质量较小的球会以较高的速度从质量大得多的球上反弹。</p>
<p>我们先来处理第二和第三个因素,因为它们是相互交织的。</p>
<p>两个球很少会完全击中。斜视打击的可能性要大得多。在任何情况下,碰撞都会沿着球碰撞的切线的法线发生。考虑到它们的初始速度,你需要计算它们沿这个法线的矢量分量。这将产生一对法向速度,这两个球将导致碰撞。把总数加起来,放在方便的地方。</p>
<p>现在我们得弄清楚每一个球会从中拿走什么。得到的每个球的法向速度与给定球的质量成反比。也就是说,取每个球质量的倒数,把两个质量加在一起,然后根据球质量与两个球质量倒数之和的比率,将碰撞产生的法向速度包裹起来。然后加上切向速度,得到球的合成速度。</p>
<p>弹性基本上是一样的,只是它需要一些基本的微积分,因为球在压缩时仍然在运动。我把它留给你去查相关的数学。</p>