4

在此处输入图像描述

这是我发现的公式:

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/

感谢您的宝贵时间,欢迎任何提示!

4

1 回答 1

3

我认为你需要正常化:)

//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 范围内的速度值,将您的物体弹射到太空中......

于 2013-11-12T00:46:39.757 回答