矩形角球的碰撞响应

时间:2014-04-24 05:21:10

标签: java collision-detection physics

我有一个固定的矩形。当球击中三角形的顶点时,我计算接触点(矩形顶点)的切线。然后我旋转速度矢量以与切线重合,翻转速度的y值并将其旋转回来。这是我的左上角代码:

double c1x=rec.x-ball.getX();
double c1y=rec.y-ball.getY();
if(c1*c1+c2*c2<ball.getRadius()*ball.getRadius())
    {
        double angle=Math.atan2(-c1x,c1y); //angle made by tangent
        Vector2D v=ball.velocity.rotate(angle); //rotate velocity vector by 'angle'
        if(v.y<0.0f)     //ball is already moving away from corner
            return;
        v.setY(-v.y);    //flip y
        ball.velocity=v.rotate(-angle);   //rotate back
        return;

    }

但是这段代码不起作用。当球撞到角落时,它会卡住,沿着顶部边缘移动然后脱落,而不会弹回。我做得对吗?

1 个答案:

答案 0 :(得分:0)

对您的惯例做出一些猜测,我建议:

double angle=Math.atan2(-c1x,-c1y);

如果这不起作用,我们可以做一些实验来弄清楚究竟发生了什么。

修改

好吧,我们必须从更简单的解决方案中建立起来。试试这些实验:

1)将速度设置为(0,1)并确认球在碰撞后直线向上移动。

2)将速度设置为(-1,1)并确认球向上和向左移动。

如果这些按预期工作,那么选择一个你希望以正常方式表现的轨迹,例如从上方到左方接近,然后几乎直线向上但向左稍微反弹,然后通过你的代码运行< em>但打印出碰撞中的所有值并告诉我们它们是什么。最初和每次轮换后至少c1xc1yangle以及velocity的值。您可能会注意到事情变得棘手,如果你不喜欢我们会的。