PDFTrex - Overlap Detection
by Jimmy Chandra
JavaScript
var r1 = { x1: 5, y1: 5, x2: 30, y2: 15, data: 'ABC' };
var r2 = { x1: 35, y1: 8, x2: 60, y2: 18, data: 'DEF' };
var r3 = { x1: 105, y1: 0, x2: 130, y2: 20, data: 'GHI' };
var r4 = { x1: 35, y1: 0, x2: 60, y2: 10, data: 'XYZ' };
var r5 = { x1: 35, y1: 7, x2: 60, y2: 13, data: 'STU' };
var r6 = { x1: 35, y1: 20, x2: 60, y2: 30, data: 'MNO' };
function getHDistance(r1, r2) {
if (r1.x2 < r2.x1) return r2.x1 - r1.x2;
if (r2.x2 < r1.x1) return r1.x1 - r2.x2;
}
function detectHorizontalOverlap(r1, r2) {
var delta = Math.min((r1.y2 - r1.y1), (r2.y2 - r2.y1));
if (r2.y1 <= r1.y1 && r1.y1 <= r2.y2 && r2.y2 <= r1.y2) {
return {
overlapped: true,
description: 'r1 is slightly below r2 and vertically overlapping.',
overlapRatio: (r2.y2 - r1.y1) / delta,
horizontal_distance: getHDistance(r1, r2)
};
}
if (r1.y1 <= r2.y1 && r2.y1 <= r1.y2 && r1.y2 <= r2.y2) {
return {
overlapped: true,
description: 'r2 is slightly below r1 and vertically overlapping.',
overlapRatio: (r1.y2 - r2.y1) / delta,
horizontal_distance: getHDistance(r1, r2)
};
}
if (r1.y1 <= r2.y1 && r2.y1 <= r2.y2 && r2.y2 <= r1.y2) {
return {
overlapped: true,
description: 'r1 contains r2 vertically',
overlapRatio: (r2.y2 - r2.y1) / delta,
horizontal_distance: getHDistance(r1, r2)
};
}
if (r2.y1 <= r1.y1 && r1.y1 <= r1.y2 && r1.y2 <= r2.y2) {
return {
overlapped: true,
description: 'r2 contains r1 vertically.',
overlapRatio: (r1.y2 - r1.y1) / delta,
horizontal_distance: getHDistance(r1, r2)
}
}
return {
overlapped: false,
description: 'r1 and r2 are not overlapping.',
overlapRatio: 0,
horizontal_distance: NaN
};
}
console.log(detectHorizontalOverlap(r1, r2));
console.log(detectHorizontalOverlap(r1, r3));
console.log(detectHorizontalOverlap(r1, r4));
console.log(detectHorizontalOverlap(r1, r5));
console.log(detectHorizontalOverlap(r1, r6));