确定两个圆相交的点和角度。

时间:2013-12-21 18:26:04

标签: javascript math canvas physics

我最近开始玩帆布后看到它有多容易。我的第一个项目就是在它移动时保持一个圆圈。我做了一些涉及圈子运动的事情,现在......

我正在努力在他们击中时互相弹跳两个圆圈。您可以在此处查看示例:http://jsfiddle.net/shawn31313/QQMgm/7/

但是,我想使用更真实的物理世界。此刻,当圆圈相互碰撞时,他们只是颠倒了他们的路径。

如下所示:

    // Dont be confused, this is just the Distance Formula
    // We compare the distance of the two circles centers to the sum of the radii of the two
    // circles. This is because we want to check when they hit each other on the surface
    // and not the center.
    var distance = Math.sqrt(Math.pow(c1.x - c2.x, 2) + Math.pow(c1.y - c2.y, 2));
    var r1       = c1.rad;
    var r2       = c2.rad;
    if (distance < r1 + r2) {
        // Change the slope of both circle
        // I would like to figure out a more effecience way of bouncing the circles back
        // However, I have no idea how to determine the angle the ball was struck,
        // and with that information bounce it off at that angle
        c1.xi = -c1.xi; // path is reversed
        c1.yi = -c1.yi;
        c2.xi = -c1.xi;
        c2.yi = -c1.yi;
    }

但是,我希望圆圈的方向和角度确定相反的方向。

我只是在9年级,不知道这样的公式怎么样。但我知道这是有可能的,因为这种物理学存在于许多游戏中。一个例子是8球比赛。当球相互碰撞时,它们会根据球相互撞击的方式在桌子上移动。

我很感激有关如何做到这一点的任何提示,或者我是否应该等到我对物理和数学有更深入的理解。

2 个答案:

答案 0 :(得分:2)

太糟糕了,我们无法得出一个非常简单的方案。 就物理学而言,你知道总动量是守恒的,参见 http://en.wikipedia.org/wiki/Momentum

这里有一个很好的插图和公式http://en.wikipedia.org/wiki/Elastic_collision#Two-_and_three-dimensional 如果两个对象具有相同的权重,则可以简化公式。

现在,让我们考虑c2固定的参考系,并以(0,0)为中心。 此参考文献中的c1速度为:

c1.xfi=c1.xi-c2.xi
c1.yfi=c1.yi-c2.yi

现在当两者之间的距离是半径之和时发生碰撞。考虑两个圆的切平面。

你现在必须将c1的速度分解为一个守恒的正切分量和一个垂直(跟在c1和c2之间的直线),它被转移到c2。

然后你需要回到你的原始参考框架。

(对不起,我没有给你确切的公式,但它们在我提供的链接上)

答案 1 :(得分:0)

如果我自己这样做,我会使用Newtons law of restitution来实现动作。基本上,这是一个系数,它涉及2个粒子在撞击之前/之后的接近速度和分离速度,它的值取决于粒子的材料属性。

您的分析基本上等于识别撞击点,然后将接近速度分解为与撞击点处圆的中心线平行且垂直的分量。

粒子的动量保持垂直于中心线(因此碰撞时该方向的速度保持不变)并且恢复原则适用于平行于中心线的速度。因此,如果您将恢复系数(必须介于0和1之间)固定到您选择的某个值,您可以使用此定律计算碰撞后沿着粒子中心线的分离速度,使用方法的值速度。

如果您的粒子具有相同的质量和半径,则计算变得更简单。您可以通过将系数设置为1来模拟弹性碰撞(这表明粒子的分离速度与接近速度相同),这可能是最容易开始的地方。通过更改值,您将在碰撞后看到粒子之间的不同行为。

很抱歉不能在公式中写下这一切,但这不是真正合适的地方。住在英国我不知道“9年级”是什么,所以我无法评估上述内容对你目前的教育水平是否过高。在英国,这类问题通常会在A-level数学教育水平上进行讨论。

希望它会告诉您自己教学/研究的术语和主题,以实现您的目标。