我最近开始玩帆布后看到它有多容易。我的第一个项目就是在它移动时保持一个圆圈。我做了一些涉及圈子运动的事情,现在......
我正在努力在他们击中时互相弹跳两个圆圈。您可以在此处查看示例: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球比赛。当球相互碰撞时,它们会根据球相互撞击的方式在桌子上移动。
我很感激有关如何做到这一点的任何提示,或者我是否应该等到我对物理和数学有更深入的理解。
答案 0 :(得分:2)
这里有一个很好的插图和公式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数学教育水平上进行讨论。
希望它会告诉您自己教学/研究的术语和主题,以实现您的目标。