题目详情:矩形重叠
1. 思路
将
轴方向设为长,将
方向设为高。
矩阵1的长 width1 = rect1[1] - rect1[0]
,高 height1 = rect1[3] - rect1[1]
同理求出矩阵2的长 width2
和高 height2
。
继续求出两个矩形的中心点
和
下面进入判断:
当两个中心点横向上的距离 Math.abs(x1 - x2)
大于等于 (width1 + width2) / 2
,则肯定不会相交,返回 false
;
同理当两个中心点纵向上的距离 Math.abs(y1 - y2)
大于等于 (height1 + height2) / 2
时,也不会相交,返回 false
;
否则就肯定会相交,返回 true
。
2. 代码(JavaScript 版)
/**
* @param {number[]} rec1
* @param {number[]} rec2
* @return {boolean}
*/
var isRectangleOverlap = function (rec1, rec2) {
const rec1center = [rec1[0] + (rec1[2] - rec1[0]) / 2, rec1[1] + (rec1[3] - rec1[1]) / 2] // rec1 center
const rec2center = [rec2[0] + (rec2[2] - rec2[0]) / 2, rec2[1] + (rec2[3] - rec2[1]) / 2] // rec2 center
const rec1xlen = rec1[2] - rec1[0] // rec1 wdith
const rec1ylen = rec1[3] - rec1[1] // rec1 height
const rec2xlen = rec2[2] - rec2[0] // rec2 width
const rec2ylen = rec2[3] - rec2[1] // rec2 height
if (Math.abs(rec1center[0] - rec2center[0]) >= (rec1xlen + rec2xlen) / 2) {
return false
} else if (Math.abs(rec1center[1] - rec2center[1]) >= (rec1ylen + rec2ylen) / 2) {
return false
} else {
return true
}
};
3. 提交记录(仅供参考)
- 执行时间:60ms
- 内存消耗:33.9MB