我正在编写扩展圆矩形碰撞检测(交叉点)以包括对碰撞的响应的软件。圆边和圆矩形相当直接。但是一圈圈让我难住了。
例如,在离散事件模拟中,让两个圆相撞,一个红色和一个绿色。我们可能有以下情况:
在它们发生碰撞后,我们可以立即:
这里 RIP 和 GIP 是上一个时钟滴答时圆圈的位置。在当前时钟滴答处,在 RDP 和 GDP 上检测到冲突。然而,当两个圆圈位于 RCP 和 GCP 时,时钟滴答之间发生了冲突。在时钟滴答声中,红色圆圈使 RVy 向下移动,RVx 向右移动;绿色圆圈向下移动 GVy,向左移动 GVx。RVy 不等于 GVy;RVx 也不等于 GVx。
碰撞发生在圆心之间的距离小于或等于圆半径之和时,即上图中d <= ( Rr + Gr )。在 d < ( Rr + Gr ) 的碰撞中,我们需要在调整圆的速度分量之前将 DP 定位回 CP。在 d == ( Rr + Gr ) 的情况下,不需要重新定位,因为 DP 位于 CP 处。
这就是问题所在:我如何回到 CP。一些作者建议应用下图中由 p 给出的一半穿透。
对我来说,这完全是错误的。它假设两个圆的速度矢量相等,但在本例中并非如此。我认为渗透与计算有关,但我如何逃避。我确实知道这个问题可以重新定义为直角相似三角形的问题,我们要在其中解决 Gcdy 和 GCdx。
碰撞本身将被建模为弹性,并且惯性交换的数学已经到位。唯一的问题是碰撞时圆圈的位置。