LeetCode836-矩形重疊-JavaScript版

// 836 easy 矩形重疊
//
// 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 爲左下角的座標,(x2, y2) 是右上角的座標。
//
// 如果相交的面積爲正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。
//
// 給出兩個矩形,判斷它們是否重疊並返回結果。
//
// 示例 1:
// 輸入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
// 輸出:true

// 示例 2:
// 輸入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
// 輸出:false

// 說明:
// 兩個矩形 rec1 和 rec2 都以含有四個整數的列表的形式給出。
// 矩形中的所有座標都處於 -10^9 和 10^9 之間。

/**
 * @param {number[]} rec1
 * @param {number[]} rec2
 * @return {boolean}
 */
var isRectangleOverlap = function(rec1, rec2) {
    let [x1, y1, x2, y2] = rec1;
    let [x3, y3, x4, y4] = rec2;
    let XoverlayDistance = twoLineSeparate(x1, x2, x3, x4)
    let YoverlayDistance = twoLineSeparate(y1, y2, y3, y4)
    if (XoverlayDistance === 0 || YoverlayDistance === 0) {
        return false
    }
    return true
};

// 某方向上重疊距離
function twoLineSeparate(p1, p2, p3, p4){
    let len1 = p2 - p1;
    let len2 = p4 - p3;
    let max = Math.max(p1, p2, p3, p4)
    let min = Math.min(p1, p2, p3, p4)
    // 相離
    if (max - min >= len1 + len2){
        return 0
        // 1包含2
    } else if (max - min === len1){
        return len2
        // 2包含1
    } else if(max - min === len2){
        return len1
    } else {
        // 相交
        return (len1 + len2) - (max - min)
    }
}

console.log(isRectangleOverlap([0,0,2,2], [1,1,3,3]))

GitHub:https://github.com/cunzaizhuyi/brain-model-tool

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章