Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取svg unsig javascript中最长线段的长度_Javascript_Html_Svg_Measure - Fatal编程技术网

获取svg unsig javascript中最长线段的长度

获取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=

我想找到一种方法来获取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=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-