我有一个球和一个矩形。球可以移动,矩形是固定的(质量=无限)。
球有一个位置、一个速度、一个半径、一个质量。
矩形具有位置、宽度和高度。
我已经有在碰撞时检测碰撞并计算正确响应的函数,但是在计算正确响应之前解决交叉点有问题。在图像中:
http://i.stack.imgur.com/Xq5Vk.png
我使用Java。
编辑:通过使用此算法解决:
- 计算矩形边界和球之间的最近点(我称之为 P)(用 Clamp 函数很容易做到)
- 计算连接球中心点(我称其为 C)和 P 的向量(我称其为 n)(向量的分量为 (Px - Cx, Py - Cy))
- 计算交叉点的“长度”(我称之为偏移量)(ball.radius - n.length)
- 归一化 n 并乘以偏移量。
- 将 n 减去球位置向量。
在 Java 代码中:
private void resolveIntersectionWith(Ball ball){
double closestX = clamp(ball.position.x, left(), right());
double closestY = clamp(ball.position.y, top(), bottom());
Vector n = new Vector(closestX - ball.position.x, closestY - ball.position.y);
double offset = ball.radius - n.length;
n.normalize().multiply(offset);
ball.position.subtract(n);
}