在看到画布有多容易后,我最近开始使用画布。我的第一个项目是在移动时在其边界处保持一个圆圈。我还做了一些涉及圈子运动的事情,现在...
我目前正在努力使两个圆圈互相碰撞时相互跳动。您可以在此处查看示例: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/