Java检查两个矩形是否在任何点重叠

use*_*492 19 java math selection shapes contain

我有多个矩形和一个特殊的矩形:选择矩形.如果矩形包含至少一个位于选择矩形内的点,我想检查每个矩形.为清晰起见,这是一张图片:

选择示例

The*_*Guy 56

我们可以确定一个只有一个对角线的矩形.
假设左方矩形的对角线是(x1,y1)到(x2,y2)
而右方矩形的对角线是(x3,y3)到(x4,y4)

样品

现在,如果这4个条件中的任何一个为真,则可以说矩形不重叠:

  1. x3> x2(或)
  2. y3> y2(OR)
  3. x1> x4(或)
  4. y1> y4 在此输入图像描述

除了这些条件之外的任何东西都意味着它们重叠!

  • 这可以通过代码示例来使其成为一个很好的答案 (3认同)

Cod*_*per 24

这将找到矩形是否与另一个矩形重叠:

public boolean overlaps (Rectangle r) {
    return x < r.x + r.width && x + width > r.x && y < r.y + r.height && y + height > r.y;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rus 9

我将制作Rectangle对象(http://docs.oracle.com/javase/8/docs/api/java/awt/Rectangle.html)然后使用Rectangle.intersects和Rectangle.contains方法来确定它们是否相交或如果一个包含另一个.

由于你有一个大矩形,即选择矩形,这比我想象的要容易.运行Rectangle.contains,对于所有未包含的矩形,运行Rectangle.intersects,你就可以得到你想要的东西.


The*_*Guy 5

这是另一个更简单的解决方案:

    // Left x 
    int leftX = Math.max(x1, x3);
    // Right x
    int rightX = Math.min(x2, x4);
    // Bottom y
    int botY = Math.max(y1, y3);
    // TopY
    int topY = Math.min(y2, y4);

    if (rightX > leftX && topY > botY)
       return true;
Run Code Online (Sandbox Code Playgroud)