这是我发现的公式:
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 和预览 http://jsfiddle.net/gj4Q7/4/
感谢您的宝贵时间,欢迎提供任何提示!
最佳答案
我认为你需要规范化 normal :)
之后
//Calculating normal
nx = 350 - SmileyReds[i].xpos;
ny = 350 - SmileyReds[i].ypos;
插入
var len = Math.sqrt(nx * nx + ny * ny);
nx = nx / len;
ny = ny / len;
您可以看到,您可以轻松获得 350*350 范围内的速度值,将您的物体弹射到太空...
关于javascript - 从圆形边界弹起球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917954/