Javascript 圆包的原始半径函数是什么?
我感兴趣的是在圆包布局上调整圆的半径。为此,我需要知道如何计算原始半径 通过读取,似乎每个节点的默认半径函数只是Javascript 圆包的原始半径函数是什么?,javascript,d3.js,circle-pack,Javascript,D3.js,Circle Pack,我感兴趣的是在圆包布局上调整圆的半径。为此,我需要知道如何计算原始半径 通过读取,似乎每个节点的默认半径函数只是Math.sqrtofvalue。但事实并非如此,因为我修改了添加一个.radius(函数(d){return Math.sqrt(d);}),正如您所看到的,圆的半径不一样。d3.layout.pack()使用Math.sqrt作为radius函数。但是pack.nodes将应用缩放变换d3\u layout\u pack变换(node,x,y,k),以便在未明确设置radius的情
Math.sqrt
ofvalue
。但事实并非如此,因为我修改了添加一个.radius(函数(d){return Math.sqrt(d);})
,正如您所看到的,圆的半径不一样。d3.layout.pack()
使用Math.sqrt
作为radius
函数。但是pack.nodes
将应用缩放变换d3\u layout\u pack变换(node,x,y,k)
,以便在未明确设置radius
的情况下,使整圈包装图适合。这就是为什么如果应用自己的函数(即使其半径(Math.sqrt)
),如果希望获得与隐式半径相同的结果,则需要在之后应用自己的缩放
在下面的示例中,我明确地将Math.sqrt
设置为半径函数,然后用我自己的函数pack\u transform
进行缩放以适应[diameter,diameter]
,因为d3\u layou packTranform
不可访问:
var pack = d3.layout.pack()
.value(function(d) { return d.size; })
.radius(Math.sqrt)
.size([diameter - 4, diameter - 4]);
var packnodes = pack.nodes(root);
var packroot = packnodes[0];
var w = diameter, h = diameter;
function pack_transform(node, k) {
function inner_transform(node,cx,cy,k) {
var children = node.children;
node.x = cx + k * (node.x-cx);
node.y = cy + k * ( node.y-cy);
node.r *= k;
if (children) {
var i = -1, n = children.length;
while (++i < n) inner_transform(children[i],cx,cy, k);
}
}
return inner_transform(node,node.x,node.y,k);
}
pack_transform(packroot, 1 / Math.max(2 * packroot.r / w, 2 * packroot.r / h));
var pack=d3.layout.pack()
.value(函数(d){返回d.size;})
.半径(数学sqrt)
.尺寸([直径-4,直径-4]);
var packnodes=pack.nodes(根节点);
var packroot=packnodes[0];
var w=直径,h=直径;
函数包_变换(节点,k){
函数内_变换(node,cx,cy,k){
var children=node.children;
node.x=cx+k*(node.x-cx);
node.y=cy+k*(node.y-cy);
node.r*=k;
if(儿童){
变量i=-1,n=childrence.length;
而(++i
您需要返回值--.radius(函数(d){return Math.sqrt(d);})
更正了这个问题,我已经在代码中使用了return。