2D简单球碰撞向量

时间:2015-05-21 02:27:08

标签: javascript canvas collision-detection

试图让两个球碰撞并以适当的角度弹回。 当球碰撞时,它们会卡在一起,我不知道我在这里做错了什么。

我在我的动画函数中调用了这个checkCollision()函数 显然cx是ball1 xposcx2是ball2 xpos。与cy相同。

function checkCollision () {
    var dx = cx2 - cx;  // distance between x
    var dy = cy2 - cy;  // distance between y
    var distance = Math.sqrt(dx * dx + dy * dy); 

    if (distance < (radius1 + radius2)) {
        // Collision detected. Find the normal.
        var normalX = dx / distance;
        var normalY = dy / distance;

        //find the middle point of the distance
        var midpointX = (cx + cx2)/2;
        var midpointY = (cy + cy2)/2;

        //bounce back
        cx = midpointX - radius1*normalX;
        cy = midpointY - radius1*normalY;
        cx2 = midpointX - radius2*normalX;
        cy2 = midpointY - radius2*normalY;

        var dVector = (vx - vx2) * normalX;
        dVector += (vy - vy2) * normalY;

        var dvx = dVector * normalX;
        var dvy = dVector * normalY;

        vx -= dvx;
        vy -= dvy;
        vx2 += dvx;
        vy2 += dvy;
    }
    ...

我从未做过太多/任何矢量工作。有没有更简单的方法来做到这一点? 我怎么用角度写这个呢?

1 个答案:

答案 0 :(得分:0)

您需要使用一些基本数学来检测两个圆圈之间的交点。

此处描述了类似的问题:

algorithm to detect if a Circles intersect with any other circle in the same plane

有一个C#示例可以很容易地适应Javascript。