Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.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_Canvas_Vector - Fatal编程技术网

Javascript 从圆形边界反弹球

Javascript 从圆形边界反弹球,javascript,html,math,canvas,vector,Javascript,Html,Math,Canvas,Vector,这是我发现的公式: r=v− [2(n·v)n] 我就是这样申请的 //Calculating normal nx = 350 - SmileyReds[i].xpos ; ny = 350 - SmileyReds[i].ypos ; //new calc v_newx = SmileyReds[i].xspeed - (2 *( nx * SmileyReds[i].xspeed + ny * SmileyReds[i].yspeed ) ) * nx

这是我发现的公式:

r=v− [2(n·v)n]

我就是这样申请的

    //Calculating normal
    nx = 350 -  SmileyReds[i].xpos ;
    ny = 350 -  SmileyReds[i].ypos ;

  //new calc
   v_newx = SmileyReds[i].xspeed - (2 *( nx * SmileyReds[i].xspeed + ny * SmileyReds[i].yspeed ) ) * nx;
   v_newy = SmileyReds[i].yspeed - (2 *( nx * SmileyReds[i].xspeed + ny * SmileyReds[i].yspeed ) ) * ny;

   SmileyReds[i].xspeed = v_newx;
   SmileyReds[i].yspeed = v_newy;
但是,当球到达边界时,它们不会反弹,而是消失:

完整src和预览


谢谢您的时间,欢迎提供任何提示

我认为你需要正常化:)

之后

插入

var len = Math.sqrt(nx * nx + ny * ny);
nx = nx / len;
ny = ny / len;

你可以看到,你可以很容易地得到350*350范围内的速度值,将你的物体弹射到太空中…

我还没有全部修复,但我已经修复了一些东西。顺便说一句,为什么会有这么多循环?我已经删除了大部分。@plalx非常感谢,我知道循环是不必要的,但我打算在反弹正常工作的情况下最终合并它们,在你的版本中,红色笑脸正在退出循环:(你知道为什么吗?是的,这就是我说“修复了一些事情”的原因)。也许如果你告诉我你在哪里找到了公式以及解释它的地方,我会有所帮助。@plalx这里:我发现了错误并更新了小提琴,但微笑者在一段时间后仍然粘在圆圈的边界上并离开了圆圈……是的,我后来也发现了,现在的问题是,正如你在更新的小提琴上看到的,为什么红色笑脸在一段时间后会粘在圆的边界上,这是它应该工作的方式吗?当我更改选项卡时,我看到笑脸也会从圆中消失。。。
var len = Math.sqrt(nx * nx + ny * ny);
nx = nx / len;
ny = ny / len;