gpt4 book ai didi

javascript - d3 : svg image in zoom circle packing bis

转载 作者:太空宇宙 更新时间:2023-11-04 15:59:20 27 4
gpt4 key购买 nike

我尝试更改此 stackoverflow 主题 d3: svg image in zoom circle packing 提供的代码

我尝试添加适合 3 级圆圈的圆形图像,而不是提供的图像。

但图像直径似乎总是比标杆小两倍。为了说明,这里是 fiddle https://jsfiddle.net/5qmmL8jo/

我知道解决方案位于 ZoomTo 函数底部的某个位置,但我不明白如何更改它。你能帮忙吗?

function zoomTo(v) {
var k = diameter / v[2];
view = v;
node.attr("transform", function(d) {
return "translate(" + (d.x - v[0]) * k + "," + (d.y - v[1]) * k + ")";
});
circle.attr("r", function(d) {
return d.r * k;
});
image
.attr("transform", function(d) {
console.log(d.r);
return "translate(" + (((d.x - v[0]) * (k)) - ((d.r / 2) * k)) + "," + (((d.y - v[1]) * (k)) - ((d.r / 2) * k)) + ")";
})
.attr("width", function(d) {
return d.r * k;
})
.attr("height", function(d) {
return d.r * k;
})
}

最佳答案

您非常接近,发现问题出在 ZoomTo 函数中。

所以首先改变,而不是这样:

.attr("width", function(d) { return d.r * k; })
.attr("height", function(d) { return d.r * k; })

应该是

.attr("width", function(d) { return d.r * k*2; }) //width should be  double of the radius
.attr("height", function(d) { return d.r * k*2 }) //height should be double of the radius.

在变换中

.attr("transform", function(d) {
return "translate(" + (((d.x - v[0]) * (k)) - ((d.r / 2) * k)) + "," + (((d.y - v[1]) * (k)) - ((d.r / 2) * k)) + ")";
})

应该是(坦白说,我不明白为什么你做了 d.r/2,圆半径的一半)。

.attr("transform", function(d) {
console.log(d.r);
return "translate(" + (((d.x - v[0]) * (k)) - ((d.r) * k)) + "," + (((d.y - v[1]) * (k)) - ((d.r) * k)) + ")";
})

工作代码here

关于javascript - d3 : svg image in zoom circle packing bis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42405427/

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