计算碰撞的2个盒子的法向量

时间:2015-11-21 00:28:15

标签: java vector physics collision normals

我一直在研究自己的物理引擎,只是为了加工。为了计算,我需要碰撞的两个盒子的法线。我想出了这段代码

PVector calcNormal(Box A, Box B) {

  PVector n = new PVector(B.pos.x-A.pos.x,B.pos.y-A.pos.y);
  PVector normal = new PVector(0,0);


  float a_extent = (A.max.x - A.min.x) / 2;
  float b_extent = (B.max.x - B.min.x) / 2;


  float x_overlap = a_extent + b_extent - abs( n.x );


  if(x_overlap > 0) {

     a_extent = (A.max.y - A.min.y) / 2;
     b_extent = (B.max.y - B.min.y) / 2;


    float y_overlap = a_extent + b_extent - abs( n.y );


    if(y_overlap > 0)
    {

      if(x_overlap > y_overlap)
      {

        if(n.x < 0) {
          normal.set( -1, 0 );
        }
        else {
          normal.set( 1, 0 );
        }

      }
      else
      {
        if(n.y < 0) {
          normal.set( 0, -1 );
        }
        else{
          normal.set( 0, 1 );
        }
      }
    } 
  }
  return normal;
}

我在一个名为制作你自己的自定义2d物理引擎的网站上找到了它。但在实施之后,它不起作用。它给了我一个奇怪的法向量,它与我期望的正常对应。例如,当右侧接触左侧时,它返回(0,-1)的法线。我的代码是正确的还是我做了一些不正确的事情?

0 个答案:

没有答案
相关问题