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

标签 java c++ algorithm logic collision-detection

我很难找出程序中的错误。

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

我的程序流程是这样的:

伪代码

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 和我的搜索中搜索的所有矩形碰撞检测算法,但我这里似乎有一个逻辑缺陷

(PS。我的 rec-collision 检测不适用于旋转的矩形)

最佳答案

为什么里面有 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()
  }

关于java - 矩形到N个矩形碰撞检测的逻辑流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278335/

相关文章:

java - J2ME 上的 JDBC 支持

java - 如何找出Java中Connection对象的设置登录超时时间?

c# - 将指向类的指针从 C# 传递到非托管 C++ 代码

c++ - OpenCL 计算与顺序算法的输出不匹配

c++ - 抄袭检测-风选算法-指纹冲突

c - 使用递归查找 n 个数字的数组中的最大和最小元素

regex - perl正则表达式大数据性能

java - 如何将 API 访问信息输出到记录器文件中?

java - 使用位置回调获取位置更新

python - 我怎样才能找到一个大字符串的最合适的子序列?