获取svg unsig javascript中最长线段的长度
我想找到一种方法来获取svg路径中最长线段的长度。由于路径可以从一个点跳到另一个点,因此getTotalLength命令不起作用。作为一个简单的示例,请查看以下路径:获取svg unsig javascript中最长线段的长度,javascript,html,svg,measure,Javascript,Html,Svg,Measure,我想找到一种方法来获取svg路径中最长线段的长度。由于路径可以从一个点跳到另一个点,因此getTotalLength命令不起作用。作为一个简单的示例,请查看以下路径: <path d=" M 0 0 L 100 0 M 0 10 L 50 10 M 0 20 L 150 20 "> 当获取总长度输出300时,我希望150作为我的输出。 有没有办法做到这一点?您可以使用此功能计算两点之间的距离: 功能区X1、y1、x2、y2{ 设dx=x2-x1; 设dy=
<path d="
M 0 0 L 100 0
M 0 10 L 50 10
M 0 20 L 150 20
">
当获取总长度输出300时,我希望150作为我的输出。
有没有办法做到这一点?您可以使用此功能计算两点之间的距离: 功能区X1、y1、x2、y2{ 设dx=x2-x1; 设dy=y2-y1; 返回Math.sqrtdx*dx+dy*dy; } 在您的情况下,最后一行从x1=0开始;y1=20,在x2=150处结束;y2=20 当然,您可能还需要一种方法来拆分d属性并提取x1、y1、x2、y2的值
我希望这有帮助。我找到了解决问题的方法。其工作原理是将路径分割为多段,并分别测量:
function maxSectionLength(path){
let segments = path.attributes.d.value.split(/(?=[m,M])/),
testPath = document.createElementNS('http://www.w3.org/2000/svg',"path"),
max = 0;
for(let d of segments){
testPath.setAttributeNS(null, "d", d)
max = Math.max(max,testPath.getTotalLength());
}
return max;
}
哦,看来你误解了我的问题。。。我显然知道如何测量点之间的距离,并使用a²+b²=c²编写一个简单的函数。。。我的示例只是为了说明复杂路径的问题。实际上,我正在处理如下路径,包括贝塞尔和圆弧:d=M23.64 4.05a10.53[…]-.37zM6.76 8.45a6.74 6.74 0 1-3.06 2.68 6.74 6.74 0 0 1.86 3.6.74 6.74 0 1 3.06-2.66 6.74 0 1-1.86-3.61zm2.92 10.29c-.3.49-.67.93-1.07 1.32l1.2c-.2-.48-.36-1-.46-1.52zm-1.35c.1.3.17.6.23.35-.17-.26.75-.78-.17-.17-.78-.17-.17-.78-.17-.17-.17-.75-.17-.17-.17-.17-.17-.75-.17-.17-.17-.17-.17-.17-.17-.17-.17-.17-.17-.17-