Open liuguanyu opened 6 years ago
function isRectangleOverlap(rec1, rec2) {
var flag0 = rec2[0] >= rec1[2];
var flag1 = rec2[2] <= rec1[0];
var flag2 = rec2[1] >= rec1[3];
var flag3 = rec2[3] <= rec1[1];
return !(flag0 || flag1 || flag2 || flag3);
}
var isRectangleOverlap = function(rec1, rec2) {
// 求边长的一半
var halfX1 = Math.abs(rec1[2] - rec1[0])/2
var halfY1 = Math.abs(rec1[3] - rec1[1])/2
var halfX2 = Math.abs(rec2[2] - rec2[0])/2
var halfY2 = Math.abs(rec2[3] - rec2[1])/2
// 求各中心位置
var midX1 = (rec1[0] + rec1[2])/2
var midY1 = (rec1[1] + rec1[3])/2
var midX2 = (rec2[0] + rec2[2])/2
var midY2 = (rec2[1] + rec2[3])/2
// 求中心xy距离
var dx = Math.abs(midX2 - midX1)
var dy = Math.abs(midY2 - midY1)
// 相交的条件:中心距离<边长一半之和
return dx < halfX1+halfX2 && dy < halfY1+halfY2
};
function isRectangleOverlap(rec1, rec2) {
var is_BottomLeftPoint_Legal = false,
is_TopRightPoint_Legal = false;
// 左下角顶点在“合法象限”(以矩形上边为X轴,右边为Y轴的直角坐标系的第三象限)内
var blp_deltaX = rec1[2] - rec2[0];
var blp_deltaY = rec1[3] - rec2[1];
if (blp_deltaX > 0 && blp_deltaY > 0) is_BottomLeftPoint_Legal = true;
// 右上角顶点在“合法象限”(以矩形底边为X轴,左边为Y轴的直角坐标系的第一象限)内
var trp_deltaX = rec2[2] - rec1[0];
var trp_deltaY = rec2[3] - rec1[1];
if (trp_deltaX > 0 && trp_deltaY > 0) is_TopRightPoint_Legal = true;
return is_BottomLeftPoint_Legal && is_TopRightPoint_Legal;
}
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
示例 1:
示例 2:
说明:
两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。 矩形中的所有坐标都处于 -10^9 和 10^9 之间。