diff --git a/app/utils/rectangle.js b/app/utils/rectangle.js index e017485a3f8b9aefcfe498c2c4338f87ec729e5a..dc789f1d8b7d68e41d59b65a4bfa91ae4dcb189a 100644 --- a/app/utils/rectangle.js +++ b/app/utils/rectangle.js @@ -17,7 +17,8 @@ export default class Rectangle { intersect(rect) { /* - Returns true if this rectangle intersects with rect. + Returns true if this rectangle intersects with rect + (or other way around). Two rectangle intersect if one of them has a point inside other. */ if (this.contains_point(rect.p1)) { @@ -36,6 +37,23 @@ export default class Rectangle { return true; } + // or other way around + if (rect.contains_point(this.p1)) { + return true; + } + + if (rect.contains_point(this.p2)) { + return true; + } + + if (rect.contains_point(this.p3)) { + return true; + } + + if (rect.contains_point(this.p4)) { + return true; + } + return false; } diff --git a/tests/unit/rectangle-test.js b/tests/unit/rectangle-test.js index c6ccd2c67df1cbdfe98bc258f35a1c1d32b97ac5..798432ff70f6a49b47dc0f24b33f5eb3cc01bc83 100644 --- a/tests/unit/rectangle-test.js +++ b/tests/unit/rectangle-test.js @@ -53,5 +53,35 @@ module('Unit | Rectangle', function () { rect.p4.isEqual(new Point(100, 205)) ); }); + + test('instersect positive', function(assert) { + let rect1, rect2; + + rect1 = new Rectangle(100, 100, 20, 20); + rect2 = new Rectangle(110, 90, 5, 25); + + assert.true( + rect1.intersect(rect2) + ); + + assert.true( + rect2.intersect(rect1) + ); + }); + + test('instersect negative', function(assert) { + let rect1, rect2; + + rect1 = new Rectangle(100, 100, 20, 20); + rect2 = new Rectangle(10, 10, 15, 15); + + assert.false( + rect1.intersect(rect2) + ); + + assert.false( + rect2.intersect(rect1) + ); + }); });