Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Javascript D3js-两条路径之间的平滑过渡_Javascript_Svg_D3.js - Fatal编程技术网

Javascript D3js-两条路径之间的平滑过渡

Javascript D3js-两条路径之间的平滑过渡,javascript,svg,d3.js,Javascript,Svg,D3.js,我是两个非常不同的路径,我想顺利地改变一个,使它看起来像另一个。我尝试过在“d”属性上使用.transition()方法,但结果很差 以下是一个例子: 我使用的d3代码如下: var svg = d3.select("body") .append('svg') .attr('width', '375px') .attr('height', '490px'); svg.append('path'

我是两个非常不同的路径,我想顺利地改变一个,使它看起来像另一个。我尝试过在“d”属性上使用.transition()方法,但结果很差

以下是一个例子:

我使用的d3代码如下:

   var svg = d3.select("body")
              .append('svg')
              .attr('width', '375px')
              .attr('height', '490px');


    svg.append('path').attr('d', d_t0);
    svg.selectAll('path').transition()
                         .duration(3500).delay(1000)
                         .attr('d', d);
创建这种转换的最佳方式是什么


非常感谢

这里的问题是,第一条路径只有10段,第二条路径有42段。这些路径非常不同,因此不可能使用内置的路径渐变在它们之间进行转换

D3很好地将两条结构相似的路径(相同数量的段和相同类型的段)连接起来。结构越不同,事情就越乱

考虑一下

前两个路径数据
d_1
d_2
具有相同的段数和类型,只有端点发生变化。两者之间的过渡是无缝的

第二个双路径数据
d_3
d_4
具有相同的段数,但最后的段是不同的类型(直线位于
d_3
,二次曲线位于
d_4
)。过渡对于到最后一点的所有点来说都很好,但是最后一段显示的跳跃与您在示例中体验到的相同。这是因为二次曲线需要一个控制点,当过渡开始时,控制点必须在稀薄的空气中实现,从而导致跳跃

坏消息是,解决此问题的唯一方法是为路径数据属性创建自定义tween函数。好消息是,这是一个普遍的问题,聪明人已经找到了坚实的解决方案

是Mike Bostock创建的一个很好的路径连接函数

在您的示例中实施时,它会给出一个相当平滑的结果:


希望这能有所帮助。

这里的问题是第一条路径只有10段,第二条路径有42段。这些路径非常不同,因此不可能使用内置的路径渐变在它们之间进行转换

D3很好地将两条结构相似的路径(相同数量的段和相同类型的段)连接起来。结构越不同,事情就越乱

考虑一下

前两个路径数据
d_1
d_2
具有相同的段数和类型,只有端点发生变化。两者之间的过渡是无缝的

第二个双路径数据
d_3
d_4
具有相同的段数,但最后的段是不同的类型(直线位于
d_3
,二次曲线位于
d_4
)。过渡对于到最后一点的所有点来说都很好,但是最后一段显示的跳跃与您在示例中体验到的相同。这是因为二次曲线需要一个控制点,当过渡开始时,控制点必须在稀薄的空气中实现,从而导致跳跃

坏消息是,解决此问题的唯一方法是为路径数据属性创建自定义tween函数。好消息是,这是一个普遍的问题,聪明人已经找到了坚实的解决方案

是Mike Bostock创建的一个很好的路径连接函数

在您的示例中实施时,它会给出一个相当平滑的结果:


希望这能有所帮助。

这里的问题是第一条路径只有10段,第二条路径有42段。这些路径非常不同,因此不可能使用内置的路径渐变在它们之间进行转换

D3很好地将两条结构相似的路径(相同数量的段和相同类型的段)连接起来。结构越不同,事情就越乱

考虑一下

前两个路径数据
d_1
d_2
具有相同的段数和类型,只有端点发生变化。两者之间的过渡是无缝的

第二个双路径数据
d_3
d_4
具有相同的段数,但最后的段是不同的类型(直线位于
d_3
,二次曲线位于
d_4
)。过渡对于到最后一点的所有点来说都很好,但是最后一段显示的跳跃与您在示例中体验到的相同。这是因为二次曲线需要一个控制点,当过渡开始时,控制点必须在稀薄的空气中实现,从而导致跳跃

坏消息是,解决此问题的唯一方法是为路径数据属性创建自定义tween函数。好消息是,这是一个普遍的问题,聪明人已经找到了坚实的解决方案

是Mike Bostock创建的一个很好的路径连接函数

在您的示例中实施时,它会给出一个相当平滑的结果:


希望这能有所帮助。

这里的问题是第一条路径只有10段,第二条路径有42段。这些路径非常不同,因此不可能使用内置的路径渐变在它们之间进行转换

D3很好地将两条结构相似的路径(相同数量的段和相同类型的段)连接起来。结构越不同,事情就越乱

考虑一下

前两个路径数据
d_1
d_2
具有相同的段数和类型,只有端点发生变化。两者之间的过渡是无缝的

第二个双路径数据
d_3
d_4
具有相同的段数,但最后的段是不同的类型(直线位于
d_3
,二次曲线位于
d_4
)。过渡对于到最后一点的所有点来说都很好,但是最后一段显示的跳跃与您在示例中体验到的相同。这是因为二次曲线需要一个控制点