矩形重叠
Rectangle Overlap
解
方法一:位置检查
检查不重合的时候。
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
return !(rec1[2] <= rec2[0] || // 左
rec1[3] <= rec2[1] || // 下
rec1[0] >= rec2[2] || // 右
rec1[1] >= rec2[3]); // 上
}
};
方法二:IoU
将矩形两边分别投影到x,y轴上
我们首先可以试着想一维的情况,也就是在x轴上,判断两个线段是否相交。如果相交,相交部分的左端点一定是两个线段左端点取大,相交部分的右端点是两个线段的后端点取小。那就先算出这两个值,然后再比一下相交部分的左端点是否小于右端点。
由此可以推广到多维。
class Solution {
public:
bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
return (min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) &&
min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]));
}
};