我已经看到了 D3.js- Voronoi Tessellation的示例。但是我想在每个多边形而不是圆形中放置一些文本,这是我的 js 代码:
var width = 600, height = 400;
var vertices = d3.range(20).map(function(d){
return [Math.random() * width, Math.random() * height]
});
var voronoi = d3.geom.voronoi();
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
path = svg.append("g").selectAll("path");
svg.selectAll("info")
.data(vertices.slice(1))
.enter().append("text")
.attr("transform", function(d) {
return "translate(" + d + ")";
})
.text("someText")
.attr("shape-rendering","crispEdges")
.style("text-anchor","middle");
redraw();
function redraw(){
path = path
.data(voronoi(vertices), polygon);
path.exit().remove();
path.enter().append("path")
.attr("class", function(d, i) {return "q" + (i % 9) + "-9";})
.attr("d", polygon);
path.order();
}
function polygon(d){
return "M" + d.join("L") + "Z";
}
我在这里有一个基本示例的 JSFiddle: 我的 voronoi 代码
现在,我希望每个多边形的文本都位于多边形的中心,并且不要与多边形的边界相交。如果多边形没有足够的空间来包含所有文本,只包含它的第一部分!如果有什么办法可以解决这个问题,请告诉我,谢谢!
PS:对不起我的英语,是的,太差了!:)