注:坐标系y轴是向上的
自己想到的
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
int x1 = rec1[0], x2 = rec1[2], x3 = rec2[0], x4 = rec2[2];
int y1 = rec1[1], y2 = rec1[3], y3 = rec2[1], y4 = rec2[3];
boolean one = (x2>x3 && y2>y3) && (x1<x4 && y1<y4); //第一种情况rec1在左下,rec2在右上
boolean two = (x2<x3 && y2<y3) && (x1>x4 && y1>y4); //反过来
return one || two;
}
官方题解一
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
return !(rec1[2] <= rec2[0] || // left
rec1[3] <= rec2[1] || // bottom
rec1[0] >= rec2[2] || // right
rec1[1] >= rec2[3]); // top
}
考虑不重叠的情况,最后取反
官方题解二
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
return (Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]) &&
Math.min(rec1[3], rec2[3]) > Math.max(rec1[1], rec2[1]));
}
- 重叠区域也是一个矩形,则两个矩形的水平边投影到 x 轴上时会有交集,y轴同理也会有交集