如何在 SVG 路径上找到多个(均匀分布的)点?
我发现它是在这支代码笔上完成的:
var bezierData = MorphSVGPlugin.pathDataToBezier("#anim_path");
Run Code Online (Sandbox Code Playgroud)
然而,它依赖于一些专有代码,即MorphSVGPlugin。
此功能是否有任何非专有代码(路径输入,坐标输出)?
我会这样做:我需要知道路径的长度 ( thePath.getTotalLength()
) 和段数:在本例中为 10。然后我使用方法计算路径上点的位置getPointAtLength
最后我为路径上的每个点画一个圆。
var SVG_NS = 'http://www.w3.org/2000/svg';
let pathLength = thePath.getTotalLength();
let nSegments = 10;
// the segment length:
let segment = pathLength/nSegments;
for( let i = 0; i<=nSegments; i++){
let p = thePath.getPointAtLength(i*segment);
let o = {r:2, cx:p.x,cy:p.y}
drawCircle(o, svg)
}
function drawCircle(o, parent) {
var circle = document.createElementNS(SVG_NS, 'circle');
for (var name in o) {
if (o.hasOwnProperty(name)) {
circle.setAttributeNS(null, name, o[name]);
}
}
parent.appendChild(circle);
return circle;
}
Run Code Online (Sandbox Code Playgroud)
svg{border:1px solid;}
#thePath{fill:none; stroke:black;}
Run Code Online (Sandbox Code Playgroud)
<svg id="svg" viewBox="-10 20 120 60">
<path id="thePath" d="M0,75Q33,75 50,50 T100,25"/>
</svg>
Run Code Online (Sandbox Code Playgroud)