计算移动圆碰到矩形时的位置

Calculate the position of moving circle when it touches a rectangle


我有以下情况: 一个圆正朝着一个不动的矩形线性移动。有没有一种有效的方法来计算圆接触矩形时的位置?

我需要这个来处理碰撞。如果移动会导致相交,圆应该尽可能靠近矩形而不是简单地停止移动。我能够解决一个圆向另一个圆移动的问题,因为你可以只使用移动方程加上半径。但是对于矩形,我目前不知道如何在不沿圆的路径进行二进制搜索的情况下(有效地)计算它。

为了解决这个问题,你可以想象一下,圆收缩成一个点,而矩形膨胀变成圆角矩形。现在你必须将中心的轨迹与那个形状相交。

现在你需要检查射线是否与膨胀矩形的直边相交(这很容易,检查端点是否在任一侧),或者角处的弧线之一(不太容易:通过使用射线的参数方程和圆的隐式方程,你得到二次方程,你必须消除不在右象限的解。

这需要一点解析几何知识,但非常易于管理。请注意,这会告诉您接触时中心的位置,但是通过沿射线继续长度 R,您会得到接触点。