图形碰撞反射!

公式2:


/*     bounce(mtv, shapeMoving, shape);*/
function bounce(mtv, collider, collidee) {
   var dotProductRatio, vdotl, ldotl, point,
       velocityVector = new Vector(new Point(velocity.x, velocity.y)),
       velocityUnitVector = velocityVector.normalize(),/*单位向量*/
       velocityVectorMagnitude = velocityVector.getMagnitude(),/*求模*/
       perpendicular;
       
   if (shapeMoving) {
      checkMTVAxisDirection(mtv, collider, collidee)


      point = new Point();


      if (mtv.axis !== undefined) {
//         perpendicular = mtv.axis;/*最小重叠投影的边向量*/
          perpendicular = mtv.axis.perpendicular();
      }
      else {
         perpendicular = new Vector(new Point(-velocityUnitVector.y,
                                        velocityUnitVector.x));
      }


      vdotl = velocityUnitVector.dotProduct(perpendicular);
      ldotl = perpendicular.dotProduct(perpendicular);
      dotProductRatio = vdotl / ldotl;


      point.x = 2 * dotProductRatio * perpendicular.x - velocityUnitVector.x;
      point.y = 2 * dotProductRatio * perpendicular.y - velocityUnitVector.y;
/*此处注释是利用公式:R=V-2(V`L)`L*/
//       var vl = velocityUnitVector.dotProduct(perpendicular)*2;
//       var vll = perpendicular.changshuji(vl);
       /*注释changshuji在vector里的方法
         changshuji:function(C){
        var v = new Vector();
        v.x = this.x*C;
        v.y = this.y*C;
        return v;
        },*/
//       var r  = velocityUnitVector.subtract(vll);
//       point.x = r.x;
//       point.y = r.y;


      separate(mtv);


      velocity.x = point.x * velocityVectorMagnitude;
      velocity.y = point.y * velocityVectorMagnitude;
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值