gpt4 book ai didi

javascript - 如何在D3.js中平滑地绘制从起点到终点的路径

转载 作者:可可西里 更新时间:2023-11-01 01:21:30 28 4
gpt4 key购买 nike

我有以下代码根据正弦函数绘制直线路径:

var data = d3.range(40).map(function(i) {
return {x: i / 39, y: (Math.sin(i / 3) + 2) / 4};
});

var margin = {top: 10, right: 10, bottom: 20, left: 40},
width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;

var x = d3.scale.linear()
.domain([0, 1])
.range([0, width]);

var y = d3.scale.linear()
.domain([0, 1])
.range([height, 0]);


var line = d3.svg.line()
.interpolate('linear')
.x(function(d){ return x(d.x) })
.y(function(d){ return y(d.y) });

var svg = d3.select("body").append("svg")
.datum(data)
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");

svg.append("path")
.attr("class", "line")
.attr("d", line);

svg.selectAll('.point')
.data(data)
.enter().append("svg:circle")
.attr("cx", function(d, i){ return x(d.x)})
.attr("cy", function(d, i){ return y(d.y)})
.attr('r', 4);

我想做的是从第一个节点到最后一个节点平滑地绘制它。我还希望在两个连续的节点之间有一个平滑的过渡,而不是一次把整条线放在一起。就像用铅笔连接点一样简单。

非常感谢任何帮助。

最佳答案

您可以使用 stroke-dashoffsetand path.getTotalLength() 轻松地为路径设置动画

var totalLength = path.node().getTotalLength();

path
.attr("stroke-dasharray", totalLength + " " + totalLength)
.attr("stroke-dashoffset", totalLength)
.transition()
.duration(2000)
.ease("linear")
.attr("stroke-dashoffset", 0);

http://bl.ocks.org/4063326

关于javascript - 如何在D3.js中平滑地绘制从起点到终点的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com