将多边形添加到d3 vornoi导致错误

Adding polygon to d3 vornoi causing an error

本文关键字:错误 vornoi d3 多边形 添加      更新时间:2024-05-16

我想扩展这个例子(http://bl.ocks.org/mbostock/4060366),并制作一个功能,以便如果用户单击一个多边形,则将该多边形添加到其他多边形中(加上中间的点)。我已经添加了这些行

.on("click", function () {
            svg.append("circle").attr("transform", "translate(" + d3.mouse(this) + ")").attr("r", 1.5);
            vertices.push(d3.mouse(this));
        })

后的jsut

.on("mousemove",....

它起作用了-添加了多边形,但函数出现了奇怪的错误

    function polygon(d) {
    return "M" + d.join("L") + "Z";
}

表示"Uncaught TypeError:无法读取未定义的属性'join'"
在我把多边形推到"顶点"后,我不会调用这个函数,但无论如何都会出现错误。。。你能告诉我我做错了什么吗?

据我所知,这个错误是由以下事实引起的:当你点击时,它需要绘制一个额外的路径,但因为你的鼠标指针正好在路径的边缘,所以值(d)没有定义。您会注意到,黄色高亮显示区域只有在移动鼠标指针后才会更新。

这为您提供了几个解决方案。

  1. 隐藏错误。您可以通过将if (typeof d == 'undefined') return;添加到polygon函数的开头来完成此操作。

  2. "破解"解决方法-在重新绘制时修改鼠标位置。将vertices[0] = [vertices[0][0]- 5, vertices[0][1] + 5];添加到redraw函数的开头。这将防止鼠标与新多边形发生冲突。注意,-5+5是任意值。