diff --git a/src/ol/rectangle.js b/src/ol/rectangle.js index 5c51090971..c1b961d1b7 100644 --- a/src/ol/rectangle.js +++ b/src/ol/rectangle.js @@ -103,3 +103,14 @@ ol.Rectangle.prototype.getSize = function() { ol.Rectangle.prototype.getWidth = function() { return this.maxX - this.minX; }; + + +/** + * @param {goog.math.Coordinate} coordinate Coordinate. + * @return {goog.math.Coordinate} Coordinate. + */ +ol.Rectangle.prototype.normalize = function(coordinate) { + return new goog.math.Coordinate( + (coordinate.x - this.minX) / this.getWidth(), + (coordinate.y - this.minY) / this.getHeight()); +}; diff --git a/src/ol/rectangle_test.js b/src/ol/rectangle_test.js index 3a8c7d4475..56986c68f3 100644 --- a/src/ol/rectangle_test.js +++ b/src/ol/rectangle_test.js @@ -107,3 +107,30 @@ function testSize() { assertEquals(2, size.width); assertEquals(3, size.height); } + + +function testNormalize() { + var rectangle = new ol.Rectangle(0, 1, 2, 3); + var coordinate; + + coordinate = rectangle.normalize(new goog.math.Coordinate(1, 2)); + assertEquals(0.5, coordinate.x); + assertEquals(0.5, coordinate.y); + + coordinate = rectangle.normalize(new goog.math.Coordinate(0, 3)); + assertEquals(0, coordinate.x); + assertEquals(1, coordinate.y); + + coordinate = rectangle.normalize(new goog.math.Coordinate(2, 1)); + assertEquals(1, coordinate.x); + assertEquals(0, coordinate.y); + + coordinate = rectangle.normalize(new goog.math.Coordinate(0, 0)); + assertEquals(0, coordinate.x); + assertEquals(-0.5, coordinate.y); + + coordinate = rectangle.normalize(new goog.math.Coordinate(-1, 1)); + assertEquals(-0.5, coordinate.x); + assertEquals(0, coordinate.y); + +}