UNPKG

rectangle-overlap

Version:

Computes the area of the intersection of two rectangles.

27 lines 3.92 kB
"use strict"; function getOverlap(rectangle1, rectangle2) { const intersectionX1 = Math.max(rectangle1.x, rectangle2.x); const intersectionX2 = Math.min(rectangle1.x + rectangle1.width, rectangle2.x + rectangle2.width); if (intersectionX2 < intersectionX1) { return null; } const intersectionY1 = Math.max(rectangle1.y, rectangle2.y); const intersectionY2 = Math.min(rectangle1.y + rectangle1.height, rectangle2.y + rectangle2.height); if (intersectionY2 < intersectionY1) { return null; } return new Rectangle(intersectionX1, intersectionY1, intersectionX2 - intersectionX1, intersectionY2 - intersectionY1); } class Rectangle { constructor(x, y, width, height) { this.x = x; this.y = y; this.width = width; this.height = height; } get area() { return this.width * this.height; } } module.exports = getOverlap; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxVQUFVLENBQUMsVUFBc0IsRUFBRSxVQUFzQjtJQUNoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xHLElBQUksY0FBYyxHQUFHLGNBQWMsRUFBRTtRQUNuQyxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRyxJQUFJLGNBQWMsR0FBRyxjQUFjLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sSUFBSSxTQUFTLENBQ2xCLGNBQWMsRUFDZCxjQUFjLEVBQ2QsY0FBYyxHQUFHLGNBQWMsRUFDL0IsY0FBYyxHQUFHLGNBQWMsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFVRCxNQUFNLFNBQVM7SUFDYixZQUNrQixDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjO1FBSGQsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUNULE1BQUMsR0FBRCxDQUFDLENBQVE7UUFDVCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUVoQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBckJELGlCQUFTLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGdldE92ZXJsYXAocmVjdGFuZ2xlMTogSVJlY3RhbmdsZSwgcmVjdGFuZ2xlMjogSVJlY3RhbmdsZSk6IG51bGwgfCBSZWN0YW5nbGUge1xuICBjb25zdCBpbnRlcnNlY3Rpb25YMSA9IE1hdGgubWF4KHJlY3RhbmdsZTEueCwgcmVjdGFuZ2xlMi54KTtcbiAgY29uc3QgaW50ZXJzZWN0aW9uWDIgPSBNYXRoLm1pbihyZWN0YW5nbGUxLnggKyByZWN0YW5nbGUxLndpZHRoLCByZWN0YW5nbGUyLnggKyByZWN0YW5nbGUyLndpZHRoKTtcbiAgaWYgKGludGVyc2VjdGlvblgyIDwgaW50ZXJzZWN0aW9uWDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGludGVyc2VjdGlvblkxID0gTWF0aC5tYXgocmVjdGFuZ2xlMS55LCByZWN0YW5nbGUyLnkpO1xuICBjb25zdCBpbnRlcnNlY3Rpb25ZMiA9IE1hdGgubWluKHJlY3RhbmdsZTEueSArIHJlY3RhbmdsZTEuaGVpZ2h0LCByZWN0YW5nbGUyLnkgKyByZWN0YW5nbGUyLmhlaWdodCk7XG4gIGlmIChpbnRlcnNlY3Rpb25ZMiA8IGludGVyc2VjdGlvblkxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJlY3RhbmdsZShcbiAgICBpbnRlcnNlY3Rpb25YMSxcbiAgICBpbnRlcnNlY3Rpb25ZMSxcbiAgICBpbnRlcnNlY3Rpb25YMiAtIGludGVyc2VjdGlvblgxLFxuICAgIGludGVyc2VjdGlvblkyIC0gaW50ZXJzZWN0aW9uWTEsXG4gICk7XG59XG5leHBvcnQgPSBnZXRPdmVybGFwO1xuXG5pbnRlcmZhY2UgSVJlY3RhbmdsZSB7XG4gIHJlYWRvbmx5IHg6IG51bWJlcjtcbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcbn1cblxuY2xhc3MgUmVjdGFuZ2xlIGltcGxlbWVudHMgSVJlY3RhbmdsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB4OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHk6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkdGg6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXIsXG4gICkge1xuICB9XG5cbiAgZ2V0IGFyZWEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0O1xuICB9XG59XG4iXX0=