我有一个球和一个矩形。球可以移动,矩形是固定的(质量=无限)。
球具有位置,速度,半径,质量。
矩形具有位置,宽度和高度。
我已经有碰撞时检测碰撞并计算正确响应的函数,但是在计算正确响应之前我有问题要解决交点。 在图像中:
http://i.stack.imgur.com/Xq5Vk.png
我使用Java。
编辑:使用此算法解决:
在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);
}
答案 0 :(得分:0)
为了避免这些交叉点,你应该将球移向远离rektangle的地方,直到它不再被击中为止。
这样做的一个简单方法是计算最靠近球心P的球场中的点Q.然后将球从这一点移开
P=P+(P-Q)*(r/abs(P-Q)-1)
其中r是半径。 另外,您可以使用较小的时间步长来避免交叉
编辑:Missclick
答案 1 :(得分:0)
问题可能是由于您检测到碰撞的原因造成的。我假设您检查球是否在矩形边界内或之内。在这种情况下,您已经将位置更新为矩形。但是,如果在将速度添加到其位置(x += v * dt
)后检查是否会发生碰撞,您将能够确定碰撞的确切时间,这意味着球将移动剩余的时间。这个迭代在新的方向。