【发布时间】:2016-11-15 09:34:27
【问题描述】:
我正在编写扩展Circle-Rectangle collision detection (intersection) 的软件,以包括对碰撞的响应。圆边和圆矩形相当直接。但是一圈圈让我难住了。
例如,在离散事件模拟中让两个圆相撞,一个红色和一个绿色。我们可能会遇到以下情况:
它们碰撞后我们可以立即:
这里的 RIP 和 GIP 是上一个时钟滴答时圆圈的位置。在当前时钟滴答处,在 RDP 和 GDP 上检测到冲突。然而,当两个圆圈位于 RCP 和 GCP 时,时钟滴答之间发生了冲突。在时钟滴答声中,红色圆圈使 RVy 向下移动,RVx 向右移动;绿色圆圈向下移动 GVy,向左移动 GVx。 RVy 不等于 GVy; RVx 也不等于 GVx。
当圆心之间的距离小于或等于圆的半径之和时发生碰撞,即上图中d
这就是问题所在:我如何重新回到 CP。一些作者建议应用下图中 p 给出的一半穿透。
对我来说这是完全错误的。它假设两个圆的速度矢量相等,但在本例中并非如此。我认为渗透与计算有关,但我如何逃避。我确实知道这个问题可以重新定义为直角相似三角形问题,我们要在其中解决 Gcdy 和 GCdx。
碰撞本身将被建模为弹性,并且惯性交换的数学已经到位。唯一的问题是碰撞时圆圈的位置。
【问题讨论】:
-
你在寻找什么样的碰撞?有弹性(没有能量损失)?无弹性(能量损失)?两个圆圈粘在一起并继续成对移动?
-
这个问题似乎是题外话,因为它是关于物理而不是编程。
-
@john 碰撞将被建模为弹性。惯性交换的数学已经到位。问题在于圆圈的位置。
-
@tom10 问题与编写简单的离散事件动画有关。碰撞后定位圆将被合并到动画中。
-
@Gus:仅仅因为它最终会在程序中使用并没有提出关于编程的问题。题目是关于物理的,结果会在程序中使用。
标签: math geometry collision-detection