Javascript 从圆形边界反弹球
这是我发现的公式: r=v− [2(n·v)n] 我就是这样申请的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
//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;