algorithm - 检测矩形(按钮)是否在 x 或 y 轴上重叠

标签 algorithm rectangles collision

我目前正尝试在 android 中开发一个原型(prototype),用户可以在屏幕上拖动 4 个单独的按钮。

我遇到的问题是碰撞检测。例如,如果其中一个按钮与另一个按钮并排,则只允许沿 Y 轴移动。同样,如果其中一个按钮接触到另一个按钮的顶部或底部,则只允许沿 X 轴移动。

有点像

for (TouchButton t:myButtons)
{
  if(!(t.equals(b)))
  {
   if((b.getY() >= t.getY() && (b.getY() <= (t.getY() + t.getMeasuredHeight()))))
   {
       if((b.getX() >= t.getX() && (b.getX() <= (t.getX() + t.getMeasuredWidth()))))
       {
           //dont move
       }
   }
}

应该能够检测按钮是否在两个轴上接触?但是我如何确定是否可以向上滑动或滑过对象?

Example

最佳答案

这是严格的版本:

boolean areOverlapping (TouchButton a, TouchButton b)
{
    return (b.getY() >= a.getY()
        && (b.getY() <= (a.getY() + a.getMeasuredHeight()))
        && b.getX() >= a.getX()
        && (b.getX() <= (a.getX() + a.getMeasuredWidth()))));
}

在此版本中,允许按轴触摸:

boolean areOverlappingButTouchIsAllowed (TouchButton a, TouchButton b)
{
    return (b.getY() > a.getY()
        && (b.getY() < (a.getY() + a.getMeasuredHeight()))
        && b.getX() > a.getX()
        && (b.getX() < (a.getX() + a.getMeasuredWidth()))));
}

您还可以检查他们是否触摸:

boolean areTouching (TouchButton a, TouchButton b)
{
    return ((b.getY() == (a.getY() + a.getMeasuredHeight()))
        || (a.getY() == (b.getY() + b.getMeasuredHeight()))
        || (b.getX() == (a.getX() + a.getMeasuredWidth())))
        || (a.getX() == (b.getX() + b.getMeasuredWidth()))));
}

然后

for (TouchButton t : myButtons)
{
    if (!t.equals(b))
    {
         if (areOverlappingButTouchIsAllowed(b,t))
         {
             // overlapping beside borders
         }
         else if (areTouching(b,t))
         {
             // touching; overlapping borders only
         }
    }
}

关于algorithm - 检测矩形(按钮)是否在 x 或 y 轴上重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18754722/

相关文章:

c++ - C++ Objective-C 中矩形函数的使用

java slick2D 模拟重力跳跃

algorithm - Perl 两列平面文件到复杂的无序列表树

c - N Queens Puzzle - 此解决方案中的回溯在哪里?

algorithm - 拼车预订的数据库/算法

javascript - 如何在 mousemove html Canvas 上绘制矩形时显示矩形

java - 我正在尝试使用图像的坐标在 imageIcon 上绘制一个填充的矩形,并且该矩形显示为关闭

algorithm - 人工智能搜索

ios - 没有弹跳的 Sprite Kit 碰撞

二维弹性球碰撞物理