diff --git a/src/ol/rectangle.js b/src/ol/rectangle.js new file mode 100644 index 0000000000..404850af0a --- /dev/null +++ b/src/ol/rectangle.js @@ -0,0 +1,67 @@ +goog.provide('ol.Rectangle'); + +goog.require('goog.asserts'); +goog.require('goog.math.Coordinate'); + + + +/** + * @constructor + * @param {number} minX Minimum X. + * @param {number} minY Minimum Y. + * @param {number} maxX Maximum X. + * @param {number} maxY Maximum Y. + */ +ol.Rectangle = function(minX, minY, maxX, maxY) { + + goog.asserts.assert(minX <= maxX); + goog.asserts.assert(minY <= maxY); + + /** + * @type {number} + */ + this.minX = minX; + + /** + * @type {number} + */ + this.minY = minY; + + /** + * @type {number} + */ + this.maxX = maxX; + + /** + * @type {number} + */ + this.maxY = maxY; + +}; + + +/** + * @return {ol.Rectangle} Clone. + */ +ol.Rectangle.prototype.clone = function() { + return new ol.Rectangle(this.minX, this.minY, this.maxX, this.maxY); +}; + + +/** + * @param {goog.math.Coordinate} coordinate Coordinate. + * @return {boolean} Contains. + */ +ol.Rectangle.prototype.contains = function(coordinate) { + return this.minX <= coordinate.x && coordinate.x <= this.maxX && + this.minY <= coordinate.y && coordinate.y <= this.maxY; +}; + + +/** + * @return {goog.math.Coordinate} Center. + */ +ol.Rectangle.prototype.getCenter = function() { + return new goog.math.Coordinate( + (this.minX + this.maxX) / 2, (this.minY + this.maxY) / 2); +}; diff --git a/src/ol/rectangle_test.js b/src/ol/rectangle_test.js new file mode 100644 index 0000000000..5e6135c9fd --- /dev/null +++ b/src/ol/rectangle_test.js @@ -0,0 +1,58 @@ +goog.require('goog.math.Coordinate'); +goog.require('goog.testing.jsunit'); +goog.require('ol.Rectangle'); + + +function testCenter() { + var rectangle = new ol.Rectangle(1, 2, 3, 4); + var center = rectangle.getCenter(); + assertEquals(2, center.x); + assertEquals(3, center.y); +} + + +function testClone() { + var rectangle = new ol.Rectangle(1, 2, 3, 4); + var clonedRectangle = rectangle.clone(); + assertTrue(clonedRectangle instanceof ol.Rectangle); + assertFalse(clonedRectangle === rectangle); + assertEquals(rectangle.minX, clonedRectangle.minX); + assertEquals(rectangle.minY, clonedRectangle.minY); + assertEquals(rectangle.maxX, clonedRectangle.maxX); + assertEquals(rectangle.maxY, clonedRectangle.maxY); +} + + +function testContainsPositive() { + var rectangle = new ol.Rectangle(1, 2, 3, 4); + assertTrue(rectangle.contains(new goog.math.Coordinate(1, 2))); + assertTrue(rectangle.contains(new goog.math.Coordinate(1, 3))); + assertTrue(rectangle.contains(new goog.math.Coordinate(1, 4))); + assertTrue(rectangle.contains(new goog.math.Coordinate(2, 2))); + assertTrue(rectangle.contains(new goog.math.Coordinate(2, 3))); + assertTrue(rectangle.contains(new goog.math.Coordinate(2, 4))); + assertTrue(rectangle.contains(new goog.math.Coordinate(3, 2))); + assertTrue(rectangle.contains(new goog.math.Coordinate(3, 3))); + assertTrue(rectangle.contains(new goog.math.Coordinate(3, 4))); +} + + +function testContainsNegative() { + var rectangle = new ol.Rectangle(1, 2, 3, 4); + assertFalse(rectangle.contains(new goog.math.Coordinate(0, 1))); + assertFalse(rectangle.contains(new goog.math.Coordinate(0, 2))); + assertFalse(rectangle.contains(new goog.math.Coordinate(0, 3))); + assertFalse(rectangle.contains(new goog.math.Coordinate(0, 4))); + assertFalse(rectangle.contains(new goog.math.Coordinate(0, 5))); + assertFalse(rectangle.contains(new goog.math.Coordinate(1, 1))); + assertFalse(rectangle.contains(new goog.math.Coordinate(1, 5))); + assertFalse(rectangle.contains(new goog.math.Coordinate(2, 1))); + assertFalse(rectangle.contains(new goog.math.Coordinate(2, 5))); + assertFalse(rectangle.contains(new goog.math.Coordinate(3, 1))); + assertFalse(rectangle.contains(new goog.math.Coordinate(3, 5))); + assertFalse(rectangle.contains(new goog.math.Coordinate(4, 1))); + assertFalse(rectangle.contains(new goog.math.Coordinate(4, 2))); + assertFalse(rectangle.contains(new goog.math.Coordinate(4, 3))); + assertFalse(rectangle.contains(new goog.math.Coordinate(4, 4))); + assertFalse(rectangle.contains(new goog.math.Coordinate(4, 5))); +}