Для .getTotalLength()
математика достаточно проста.Если у вас одинаковая шкала, длину можно просто умножить на это число;или, в более общем случае, для
transform = scale(sx, sy) =>
length' = length * √(sx² + sy²)
Но тогда, если вы попытаетесь найти точку вдоль пути, вы должны использовать нетрансформированные значения.Если результат .getTotalLength()
равен 400, а путь равномерно масштабирован с 2, общая длина может быть 800, но чтобы найти точку 90% вдоль пути, вам все равно нужно вычислить .getPointAtLength(360)
.
Чтобы преобразовать точку, которую вы нашли с помощью .getPointAtLength()
, вы можете использовать SVGMatrix
, например:
var p = document.getElementById('path');
var svg = p.ownerSVGElement; // only <svg> elements have a method to init SVGMatrix
var matrix = svg.createSVGMatrix().scaleNonUniform(sx, sy); // or .scale(s) for uniform scale
var point = p.getPointAtLength(length).matrixTransform(matrix);