力扣 0836 - 矩形重叠

题目详情:矩形重叠

1. 思路

x x 轴方向设为长,将 y y 方向设为高。
矩阵1的长 width1 = rect1[1] - rect1[0],高 height1 = rect1[3] - rect1[1]
同理求出矩阵2的长 width2 和高 height2
继续求出两个矩形的中心点 ( x 1 , y 1 ) (x_1, y_1) ( x 2 , y 2 ) (x_2, y_2)

下面进入判断:
当两个中心点横向上的距离 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
发布了50 篇原创文章 · 获赞 0 · 访问量 1824

猜你喜欢

转载自blog.csdn.net/weixin_44273383/article/details/104959517