Javascript 获取svg路径中的点

Javascript 获取svg路径中的点,javascript,jquery,d3.js,Javascript,Jquery,D3.js,我想优化关于特定点路径的函数 有没有办法优化这段代码 但它并没有在大路径上优化 我希望optimie能够在短时间内使用大型svg路径 function getTangent(pathNode, point){ var line_path = pathNode; var length_at_point = 0, total_length = line_path.getTotalLength(); while ((Math.trunc(

我想优化关于特定点路径的函数 有没有办法优化这段代码 但它并没有在大路径上优化 我希望optimie能够在短时间内使用大型svg路径

function getTangent(pathNode, point){

    var line_path = pathNode;
    var length_at_point = 0,
            total_length = line_path.getTotalLength();
    while ((Math.trunc(
            line_path.getPointAtLength(length_at_point).x) != Math.trunc(point[0]) || 
            Math.trunc(line_path.getPointAtLength(length_at_point).y) != Math.trunc(point[1])) && 
            length_at_point < total_length) {
        length_at_point++;
    };

    var point = line_path.getPointAtLength(length_at_point),
            prev = {},
            next = {},
            delta = {};


    if (length_at_point > 1 && length_at_point < (total_length - 1)) {
        prev = line_path.getPointAtLength(length_at_point - 1);
        next = line_path.getPointAtLength(length_at_point + 1);
        delta = {
            x: next.x - prev.x,
            y: next.y - prev.y
        }
    } else {

        // don't worry about the first and last pixel or so
        return;
    };

    var LENGTH = 700; // length of tangent line

    return {
        id:'tangent'
        , "stroke-width":0.5
        , stroke:'rgb(6,120,155)'
             , x1:(point.x - delta.x * LENGTH)
             , y1:(point.y - delta.y * LENGTH)
             , x2:(point.x + delta.x * LENGTH)
             , y2:(point.y + delta.y * LENGTH)

            };
}
函数getTangent(路径节点,点){ 变量行\路径=路径节点; _点处的变量长度_=0, 总长度=行路径。getTotalLength(); 而((Math.trunc)( line_path.getPointAtLength(长度在点处).x)!=Math.trunc(点[0])|| Math.trunc(line_path.getPointAtLength(length_at_point.y)!=Math.trunc(point[1])和 _点处的长度_<总长度){ _点处的长度_++; }; var point=线路径。getPointAtLength(点处的长度), prev={}, next={}, delta={}; 如果(点处的长度大于1和点处的长度<(总长度-1)){ prev=行路径。getPointAtLength(点处的长度-1); next=line\u path.getPointAtLength(在\u点的长度+1); 增量={ x:next.x-prev.x, y:下一个,上一个 } }否则{ //不要担心第一个和最后一个像素左右 返回; }; var LENGTH=700;//切线长度 返回{ id:“切线” ,“笔划宽度”:0.5 ,笔画:'rgb(6120155)' ,x1:(点x-增量x*长度) ,y1:(点y-增量y*长度) ,x2:(点x+增量x*长度) ,y2:(点y+增量y*长度) }; }
但这不是对上述代码的优化,如果路径上没有约束(它可以弯曲并返回),您希望如何在路径上找到距离给定点最近的点。对于某些路径,可以使用二进制搜索方法