Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 圆包的原始半径函数是什么?_Javascript_D3.js_Circle Pack - Fatal编程技术网

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
of
value
。但事实并非如此,因为我修改了添加一个
.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。