【问题标题】:Determining the point and angle at which two circles intersect.确定两个圆相交的点和角度。
【发布时间】:2013-12-21 18:26:03
【问题描述】:

在看到画布有多简单后,我最近开始使用它。我的第一个项目只是在它移动时保持一个圆圈的边界。我又做了一些涉及圆圈运动的东西,现在......

我目前正在研究当它们击中时将两个圆圈相互弹开。您可以在此处查看示例: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 球比赛。当球相互撞击时,它们会根据球的撞击方式在桌子上移动。

如果我应该等到我对物理和数学有更深入的了解,我将不胜感激。

【问题讨论】:

  • 如果圆的质量和速度相同,那么速度就会交换。但如果速度不同,事情就会变得更加复杂。
  • @Teepeemm 感谢您的评论。但是相交的角度是否重要?
  • 我不这么认为。跟随 Pixou,我们可以旋转所有东西(至少在我们的脑海中),使重心向右移动。由于质量和速度匹配,这意味着速度的垂直分量完全相反。然后当圆圈撞击时,就像它们从水平墙上反弹一样,因此水平速度不会改变,垂直速度会被抵消。但这正是来自另一个圆圈的速度。取消旋转所有内容,您就会回到开始的参考框架中。

标签: javascript math canvas physics


【解决方案1】:

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

那么你需要回到原来的参考系。

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

【讨论】:

    【解决方案2】:

    如果我自己做这个,我会使用Newtons law of restitution 来实现这个动作。本质上,这是一个与撞击前后 2 个粒子的接近和分离速度相关的系数,它的值取决于粒子的材料特性。

    您的分析基本上相当于确定撞击点,然后将接近速度分解为与撞击点处的圆心线平行和垂直的分量。

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

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

    很抱歉不能用公式为你写下这一切,但这并不是真正适合它的地方。住在英国我不知道“9 年级”是什么,所以我无法评估以上对于您目前的教育水平是否太先进。在英国,这类问题通常会在 A-level 数学教育级别中涵盖。

    但希望它可以为您指明可以自学/研究以实现目标的术语和主题。

    【讨论】:

    • 9年级14岁左右。 9 年级的数学是从预代数到代数 2 或几何或三角学的任何内容。
    • @Teepeemm 哦,对了,这一切可能有点太高级了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多