【问题标题】:How can I know where two rectangles intersected?我怎么知道两个矩形相交的地方?
【发布时间】:2017-09-30 16:04:24
【问题描述】:

我的 android 项目中有 2 个矩形交叉点(一个比另一个大)有问题。我使用了 Rect.intersects(rect1,rect2) 方法,它工作正常,但我应该知道它在哪里相交。比如rect1.right与rect2.left相交等。有什么办法可以解决这个问题吗?Example

我写过类似的东西来检测顶部或底部。但它给了我 2 或 5 个像素的错误。

if (Rect.intersects(rect2,rect1)){
    //rect1 is smaller one
   if (rect1.exactCenterY()<rect2.exactCenterY() - rect2.height()/2||
      rect1.exactCenterY()>rect.exactCenterY() + rect2.height()/2){
      //It is top or bottom
         doSomething();
   }else{
         doSomething();
   }
}

希望大家给我一些建议或其他解决方法。

【问题讨论】:

  • 你为什么使用中心而不是角落进行计算?
  • 但如果有任何数学让您头疼,请使用android.graphics.Region API
  • @cricket_007 认为这是最快的方法。我知道你的意思。
  • 你只需要左上角和右下角,加上宽度和高度就可以形成一个矩形。此外,您正在对高度执行整数除法,这很可能会导致几个像素的舍入问题

标签: java android intersection rectangles


【解决方案1】:

如果你使用的是 Rectangle 类:

    int x = (int) rect1.intersection(rect2).getX();
    int y = (int) rect1.intersection(rect2).getY();

方法intersection 返回相交矩形。读出那个矩形。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    找到了!感谢您的建议。但重要的是,您还应该处理矩形角的交集。

    if(rect2.setIntersects(rect2,rect1)){
        if(rect2.left!=rect1.left){
        //do something
        }else if(rect2.right!=rect1.right){
        //do something
        }// and so on
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多