@deck.gl/experimental-layers
Version:
Experimental layers for deck.gl
64 lines (54 loc) • 1.66 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getClosestPointOnLine = getClosestPointOnLine;
exports.getClosestPointOnPolyline = getClosestPointOnPolyline;
var _math = require("math.gl");
// Return the closest point on a line segment
function getClosestPointOnLine(_ref) {
var p = _ref.p,
p1 = _ref.p1,
p2 = _ref.p2,
_ref$clampToLine = _ref.clampToLine,
clampToLine = _ref$clampToLine === void 0 ? true : _ref$clampToLine;
var lineVector = new _math.Vector3(p2).subtract(p1);
var pointVector = new _math.Vector3(p).subtract(p1);
var dotProduct = lineVector.dot(pointVector);
if (clampToLine) {
dotProduct = (0, _math.clamp)(dotProduct, 0, 1);
}
return lineVector.lerp(dotProduct);
} // Return the closest point on a line segment
function getClosestPointOnPolyline(_ref2) {
var p = _ref2.p,
points = _ref2.points;
p = new _math.Vector3(p);
var pClosest = null;
var distanceSquared = Infinity;
var index = -1;
for (var i = 0; i < points.length - 1; ++i) {
var p1 = points[i];
var p2 = points[i + 1];
var pClosestOnLine = getClosestPointOnLine({
p: p,
p1: p1,
p2: p2
});
var distanceToLineSquared = p.distanceSquared(pClosestOnLine);
if (distanceToLineSquared < distanceSquared) {
distanceSquared = distanceToLineSquared;
pClosest = pClosestOnLine;
index = i;
}
}
return {
point: pClosest,
index: index,
p1: points[index],
p2: points[index + 1],
distanceSquared: distanceSquared,
distance: Math.sqrt(distanceSquared)
};
}
//# sourceMappingURL=polyline.js.map
;