Geometry: Added along attribute to distanceToSegment() function

This commit is contained in:
Tobias Bieniek
2013-03-23 16:49:30 +01:00
parent 9a06ec47f6
commit 04d3c6ce53
2 changed files with 10 additions and 9 deletions

View File

@@ -441,7 +441,8 @@ OpenLayers.Geometry.segmentsIntersect = function(seg1, seg2, options) {
* {Object} An object with distance, x, and y properties. The distance * {Object} An object with distance, x, and y properties. The distance
* will be the shortest distance between the input point and segment. * will be the shortest distance between the input point and segment.
* The x and y properties represent the coordinates along the segment * The x and y properties represent the coordinates along the segment
* where the shortest distance meets the segment. * where the shortest distance meets the segment. The along attribute
* describes how far between the two segment points the given point is.
*/ */
OpenLayers.Geometry.distanceToSegment = function(point, segment) { OpenLayers.Geometry.distanceToSegment = function(point, segment) {
var x0 = point.x; var x0 = point.x;
@@ -467,6 +468,7 @@ OpenLayers.Geometry.distanceToSegment = function(point, segment) {
} }
return { return {
distance: Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)), distance: Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)),
x: x, y: y x: x, y: y,
along: along
}; };
}; };

View File

@@ -257,24 +257,23 @@
var cases = [{ var cases = [{
got: dist({x: 0, y: 0}, {x1: 0, y1: 1, x2: 1, y2: 1}), got: dist({x: 0, y: 0}, {x1: 0, y1: 1, x2: 1, y2: 1}),
expected: {distance: 1, x: 0, y: 1} expected: {distance: 1, x: 0, y: 1, along: 0}
}, { }, {
got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 0, y2: -1}), got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 0, y2: -1}),
expected: {distance: 1, x: 0, y: -1} expected: {distance: 1, x: 0, y: -1, along: 1}
}, { }, {
got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 1, y2: 1}), got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 1, y2: 1}),
expected: {distance: 0, x: 0, y: 0} expected: {distance: 0, x: 0, y: 0, along: 0.5}
}, { }, {
got: dist({x: 1, y: 1}, {x1: 2, y1: 0, x2: 2, y2: 3}), got: dist({x: 1, y: 1}, {x1: 2, y1: 0, x2: 2, y2: 3}),
expected: {distance: 1, x: 2, y: 1} expected: {distance: 1, x: 2, y: 1, along: 1/3.}
}, { }, {
got: dist({x: -1, y: -1}, {x1: -2, y1: -2, x2: -1, y2: -3}), got: dist({x: -1, y: -1}, {x1: -2, y1: -2, x2: -1, y2: -3}),
expected: {distance: Math.sqrt(2), x: -2, y: -2} expected: {distance: Math.sqrt(2), x: -2, y: -2, along: 0}
}, { }, {
got: dist({x: -1, y: 1}, {x1: -3, y1: 1, x2: -1, y2: 3}), got: dist({x: -1, y: 1}, {x1: -3, y1: 1, x2: -1, y2: 3}),
expected: {distance: Math.sqrt(2), x: -2, y: 2} expected: {distance: Math.sqrt(2), x: -2, y: 2, along: 0.5}
}]; }];
t.plan(cases.length); t.plan(cases.length);
for(var i=0; i<cases.length; ++i) { for(var i=0; i<cases.length; ++i) {
t.eq(cases[i].got, cases[i].expected, "case " + i); t.eq(cases[i].got, cases[i].expected, "case " + i);