Gus*_*Gus 5 math geometry collision-detection
我正在编写扩展圆形-矩形碰撞检测(相交)以包括对碰撞的响应的软件。Circle-edge 和 circle-rectangle 是相当直接的。但是圈圈让我难住了。
例如,在离散事件模拟中,让两个圆圈相撞,一个红色一个绿色。我们可能会遇到以下情况:

在它们发生碰撞后,我们可以立即得到:

这里 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。

碰撞本身将被建模为弹性的,并且惯性交换的数学已经到位。唯一的问题是在碰撞时放置圆圈的位置。
如果您正在寻找有关圆形物体非弹性碰撞的基本参考, Joe van den Heuvel 和 Miles Jackson 编写的《台球厅课程:圆或球体之间的快速、准确碰撞检测》非常容易理解。
从最不正式到最正式,这里有一些关于实现支持问题解决方案(碰撞响应)的编程技术的后续参考资料。
您将不得不接受一些近似值 - 贝克曼在视频中演示,即使对于非常简单的情况,也无法通过分析预测会发生什么,这更糟糕,因为您正在模拟具有离散步骤的连续系统。