矩形到N矩形碰撞检测的逻辑流程

时间:2013-04-29 12:11:15

标签: java c++ algorithm logic collision-detection

我很难在这里搞清楚程序中的错误。

我的代码仅适用于2矩形,但如果我增加矩形的数量,它根本不起作用。

我的程序流程如下:

pseudo code

for (i = 0 to N_of_rectangles - 1)
{

    Rectangle& r1 = rect[i];

    if (r1.is_grab_by_mouse())
    {
        for (j = 0 to N_of_rectanges - 1)
        {
            if (i == j)
            {
                skip_this_loop    //skip for any self-checking
            }

            Rectangle& r2 = rect[j];

            if (not Rectangle.collide(r1, r2))
            {

                if (r1.restricken_move()) break;    //restricken move will be true if
                                                    //*this rect will collide to !*this
                if (r1.movement == HORIZONTAL)
                    r1.move_x_along_with_mouse()
                else    //VERTICAL
                    r1.move_y_along_with_mouse()
            }
            else
            {
                r1.resolve_collision()
            }
        }
    }
}

我确实尝试了在google和我搜索过的所有矩形碰撞检测算法,但似乎我在这里有一个logic flaw

(PS。我的再碰撞检测不适用于旋转的矩形)

1 个答案:

答案 0 :(得分:1)

为什么你有2个循环? 无论如何我认为你应该只移动r1,如果他根本不碰撞,而不是每次他都不碰撞矩形。 代码应该是这样的:

boolean collision=false
   for (j to N_of_rectanges)
   {
      if (i == j)
      {
        skip_this_loop
      }

       if (Rectangle.collide(r1, r2))
      {
         r1.resolve_collision()
         collision=true
      }
    }
  if(not collision){
    r1.move()
  }