slightly better poly equivalence check

This commit is contained in:
Stewart Allen 2021-06-22 11:23:45 -04:00
commit 8141a3aa12

View file

@ -1772,6 +1772,16 @@
return tl; return tl;
}; };
PRO.areaDiff = function(poly) {
let a1 = this.area(),
a2 = poly.area();
return (a1 > a2) ? a2 / a1 : a1 / a2;
};
PRO.areaOrLength = function(poly) {
return this.length === poly.length || this.areaDiff(poly) > 0.98;
};
/** /**
* return logical OR of two polygons' enclosed areas * return logical OR of two polygons' enclosed areas
* *
@ -1812,16 +1822,16 @@
if ( if (
src[0].isEqual2D(dst[0]) && src[0].isEqual2D(dst[0]) &&
src[1].isEqual2D(dst[1]) && src[1].isEqual2D(dst[1]) &&
Math.abs(src[0].poly.area() - dst[0].poly.area()) < 0.01 && src[0].poly.areaOrLength(dst[0].poly) &&
Math.abs(src[1].poly.area() - dst[1].poly.area()) < 0.01 src[1].poly.areaOrLength(dst[1].poly)
) { ) {
return null; return null;
} else if (debug) { } else if (debug) {
console.log("union debug", { console.log("union debug", {
src, src,
dst, dst,
d0: Math.abs(src[0].poly.area() - dst[0].poly.area()), d0: src[0].poly.areaDiff(dst[0].poly),
d1: Math.abs(src[1].poly.area() - dst[1].poly.area()), d1: src[1].poly.areaDiff(dst[1].poly),
m0: src[0].isEqual2D(dst[0]), m0: src[0].isEqual2D(dst[0]),
m1: src[1].isEqual2D(dst[1]) m1: src[1].isEqual2D(dst[1])
}); });