spi*_*ang 9 d3.js force-layout
下面是刻度函数的正常示例:
function tick(e) {
nodes
.each(cluster(10 * e.alpha * e.alpha));
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我"e"的定义?它有什么属性?我找不到任何关于"e"的描述,以及e.alpha的含义是什么.是的,我使用谷歌但没有结果.
感谢您在下面给出的帮助.
我正在复制一些使用的代码
var force = d3.layout.force()
.nodes(nodes)
.size([width, height])
.charge(-70)
.gravity(0.1)
.on("tick", tick)
.start();
Run Code Online (Sandbox Code Playgroud)
所以这就是你猜的情况.我是d3的新手,剥离了force.layout API并没有给我任何线索.谢谢你宝贵的时间!
Ame*_*aBR 14
如果没有"正常"功能的完整上下文,这是一个猜测,但这里有:
tick在d3中的许多上下文中使用.这alpha意味着这是一个强制布局刻度函数,它由一个tick事件上的force layout对象调用,在这种情况下e就是tick事件对象.
关于tick事件没有很多文档,因为大多数示例都不使用它.如果您检查源代码,您将看到
// A rudimentary force layout using Gauss-Seidel.
d3.layout.force = function() { //line 11
var force = {},
event = d3.dispatch("start", "tick", "end");
/* ... */
force.tick = function() { //line 58
// simulated annealing, basically
if ((alpha *= .99) < .005) {
event.end({type: "end", alpha: alpha = 0});
return true;
}
/* code to implement default force layout adjustments */
event.tick({type: "tick", alpha: alpha}); //line 128
};
/* ... */
return d3.rebind(force, event, "on"); //line 305
};
Run Code Online (Sandbox Code Playgroud)
换句话说,tick事件是使用d3.dispatch进程在d3源代码中创建的三种类型的自定义事件之一.该tick特别事件在内部蜱函数结束时分派,且只包含一个自定义属性:当前alpha的力量布局中的参数.为了使这些事件实际上去任何地方,on事件调度程序对象的方法被反弹到强制布局对象,以便用户可以为自定义事件注册侦听器函数.
如果这对你来说太多d3内部,请关注这些细节:
e 是每次调用时传递给tick函数的自定义事件对象e.alpha是力布局的当前alpha值,默认情况下从0.1开始并friction在每个刻度处减小(根据参数),直到它降至0.005以下并且布局冻结:
在内部,布局使用
alpha控制布局温度的冷却参数:当物理模拟收敛于稳定布局时,温度下降,导致节点移动得更慢.最终,alpha降至阈值以下并且模拟完全停止,释放CPU并避免电池耗尽.(来自API维基force.start)