UNPKG

2d-polygon-contains-polygon

Version:

test if a polygon completely contains another polygon

47 lines (37 loc) 934 B
var area = require('2d-polygon-area'); var intest = require('robust-point-in-polygon'); var isect = require('robust-segment-intersect'); module.exports = contains; var abs = Math.abs; // does a contain b? function contains(a, b) { var aa = abs(area(a)); var ab = abs(area(b)); // the containing polygon's area should be larger // than the contained polygon if (ab > aa) { return false; } // all points should be contained var pl = b.length; for (var i=0; i<pl; i++) { if (intest(a, b[i]) >= 0) { return false; } } // last chance, let's test for intersections var al = a.length; var bl = b.length; for (var ai=0; ai<al; ai++) { var astart = a[ai]; var aend = a[(ai+1) % al]; for (var bi=0; bi<bl; bi++) { var bstart = b[bi]; var bend = b[(bi+1) % bl]; if (isect(astart, aend, bstart, bend)) { return false; } } } return true; }