D3JavaScript,获取svg路径中两点之间的距离
我有一组点,通过这些点我画了一条路径D3JavaScript,获取svg路径中两点之间的距离,javascript,d3.js,svg,path,distance,Javascript,D3.js,Svg,Path,Distance,我有一组点,通过这些点我画了一条路径 let path=svg.append("path").attr("id","path") .data([points]) .attr("d", d3.line() .curve(d3.curveCatmullRom)); 现在,我想得到点之间的路径距离,这样我就可以将它分割成段。我尝试增加距离,检查点(四舍五入为5)是否与初始点集匹配,从而在匹配时获得距离。然后我将这些点保存到列表中 这里,xyArray有
let path=svg.append("path").attr("id","path")
.data([points])
.attr("d", d3.line()
.curve(d3.curveCatmullRom));
现在,我想得到点之间的路径距离,这样我就可以将它分割成段。我尝试增加距离,检查点(四舍五入为5)是否与初始点集匹配,从而在匹配时获得距离。然后我将这些点保存到列表中
这里,xyArray
有我附加的点列表d
,还有列表seg
function distanceBetween2Points(path, xyArray) {
let distance = 0;
xyArray.forEach(function(d,i)
{
let flag=1;
seg=[];
while(flag)
{let pt=path.getPointAtLength(distance);
if(round5(pt.x)==round5(d.x) && round5(pt.y)==round5(d.y))
{console.log("d",i);
d.d=distance;
d.seg=seg;
flag=0;
break;}
seg.push([pt.x,pt.y]);
distance++;}
return 0;
});
}
它有时有效(尽管不准确),但有时无效,具体取决于数据。有没有更好的方法来获得距离?这是一个使用香草javascript而不是d3的演示,但我希望您会发现它很有用 函数
getLengthForPoint(p,路径)
计算给定点p在路径上的距离。
我正在设置一个变量let precision=100代码>。根据路径的长度,您可能希望将此值更改为其他值
还要记住,路径可以多次通过同一点。这可能很棘手,可能会给你一个错误
另外,正如您可能知道的,您将获得到一个点的近似距离。在本例中,点p1={x:93.5,y:60}
。计算长度处的点具有以下坐标:{x:93.94386291503906,y:59.06307983984375}
//路径上的一些点
设p1={x:93.5,y:60}
设p2={x:165,y:106}
//路径的总长度
让pathLength=path.getTotalLength();
设精度=100;
设除法=路径长度/精度;
函数getLengthForPoint(p,路径){
让记录=路径长度;
让这个片段;
for(设i=0;i
svg{border:solid}