Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何计算球在有角度曲面上反弹时的反射角_Javascript_Html_Math_Physics_Angle - Fatal编程技术网

Javascript 如何计算球在有角度曲面上反弹时的反射角

Javascript 如何计算球在有角度曲面上反弹时的反射角,javascript,html,math,physics,angle,Javascript,Html,Math,Physics,Angle,我一直在尝试创建“plinko”游戏的纯javascript版本。我没有数学或物理背景,所以我从谷歌/youtube上学到的一切 我试图计算一个球在与一个有角度的表面接触时应该反弹的角度。我已经计算出了球在碰撞时的角度以及它与之接触的线的角度,分别使用反向tan和球与线的速度x和y。然后我通过求两个角度的差来求入射角,根据斯奈尔定律,这应该给我相对于它所影响的线的反射角 然而,在代码中实现了这一点(或者至少我认为我已经实现了),计算出的角度和球的运动方向没有意义。以下是代码中处理该问题的部分:

我一直在尝试创建“plinko”游戏的纯javascript版本。我没有数学或物理背景,所以我从谷歌/youtube上学到的一切

我试图计算一个球在与一个有角度的表面接触时应该反弹的角度。我已经计算出了球在碰撞时的角度以及它与之接触的线的角度,分别使用反向tan和球与线的速度x和y。然后我通过求两个角度的差来求入射角,根据斯奈尔定律,这应该给我相对于它所影响的线的反射角

然而,在代码中实现了这一点(或者至少我认为我已经实现了),计算出的角度和球的运动方向没有意义。以下是代码中处理该问题的部分:

           var lineVelX = startPos[0] - endPos[0];
           var lineVelY = startPos[1] - endPos[1];

           var lineAngle = Math.atan(lineVelY / lineVelX) * 180 / Math.PI;

           var ballAngle = Math.atan(window[ball].velY / window[ball].velX) * 180 / Math.PI;

           var angleOfIncidence = ballAngle - lineAngle;

           var newBallAngle = ballAngle - angleOfIncidence;


           window[ball].velX = Math.cos(newBallAngle) * 2;
           window[ball].velY = Math.sin(newBallAngle) * 2;
希望有人对数学和物理有更深入的了解,能解释我的错误所在


提前感谢您的帮助:)

我将首先使用
requestAnimationFrame
而不是
setInterval
,并引入“增量时间”的概念,以便您可以正确执行计算。很明显,碰撞检测有点不准确。我建议使用矢量而不是角度。360°(或±180°)处极坐标的不连续性使生活变得更艰难,90°奇数倍处的
tan
散度也是如此。@meowgoesthedog我以前一直在研究向量,但我遇到了一些问题,因为我不完全确定如何使用入射向量来计算反射向量。你能解释一下怎么做,或者知道我可以遵循的任何指南吗?向量应该采取什么形式?例如(velx,vely)或(direction,magnity)中的“vectors”我指的是笛卡尔矢量(与您已经使用的极坐标表示法
[direction,magnity]
相反)。看看