在看到画布有多容易后,我最近开始使用画布。我的第一个项目是在移动时在其边界处保持一个圆圈。我还做了一些涉及圈子运动的事情,现在...

我目前正在努力使两个圆圈互相碰撞时相互跳动。您可以在此处查看示例: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球游戏。当球相互撞击时,它们会根据球相互撞击的方式在桌子上移动。

如果有任何提示,或者我应该等到对物理和数学有更深入的了解后,我将不胜感激。

最佳答案

太糟糕了,我们无法制定一个非常简单的方案。
就物理学而言,您知道总动量是守恒的,请参见
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。

然后,您需要返回到原始参考框架。

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

关于javascript - 确定两个圆相交的点和 Angular 。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20722145/

10-12 17:33