我正在编写扩展Circle-Rectangle collision detection (intersection)以包含对碰撞的响应的软件。圆形边和圆形矩形相当直接。但是圈子让我难倒了。解决圆圈碰撞问题
例如,在离散事件模拟中,让两个圆形碰撞,一个红色和一个绿色。我们可能有以下情况:
它们相撞后,我们立即可以有:
这里RIP和GIP是圆的,在之前的时钟滴答的位置。在当前的时钟周期,冲突在RDP和GDP检测到。然而,当两个圆圈位于RCP和GCP时,两个圆圈之间发生冲突。在时钟刻度上,红色圆圈向右移动RVy并向右移动RVx;绿色圆圈向下移动GVy,向左移动GVx。 RVy不等于GVy; RVx也不等于GVx。
相撞当圆中心间的距离小于或等于该圈子半径之和时,也就是,前面的图中,d < =(RR + GR)。在发生碰撞时,我们需要在调整圆的速度分量之前将DP定位回CP。在d ==(Rr + Gr)的情况下,由于DP位于CP,因此不需要重新定位。
这就是问题所在:我该如何回到CP?一些作者建议,在下图中用p给出的渗透的一半被应用。
对我来说,这是完全错误的。它假定两个圆的速度矢量相等,在这个例子中,情况并非如此。我认为渗透与计算有关,但是如何避开我。我知道这个问题可以改写为我们想要为Gcdy和GCdx解决的类似三角形的问题。
碰撞本身将被模拟成弹性,以及惯性交换数学已经到位。唯一的问题是将圆圈置于碰撞的位置。
你在找什么样的碰撞?弹性(不会损失能量)?无弹性(能量损失)?这两个圈子粘在一起,并继续移动一对? – John
这个问题似乎是题外话题,因为它是关于物理而不是编程。 – tom10
@john碰撞将被建模为弹性。惯性交换的数学已经到位。问题是在哪里定位圈子。 – Gus