Javascript 获取svg路径中的点
我想优化关于特定点路径的函数 有没有办法优化这段代码 但它并没有在大路径上优化 我希望optimie能够在短时间内使用大型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(
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*长度)
};
}
但这不是对上述代码的优化,如果路径上没有约束(它可以弯曲并返回),您希望如何在路径上找到距离给定点最近的点。对于某些路径,可以使用二进制搜索方法