rectangle-overlap
Version:
Computes the area of the intersection of two rectangles.
27 lines • 3.92 kB
JavaScript
;
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=