我正在尝试使用并了解D3 visualization library(http://mbostock.github.com/d3/),我正在查看their force directed code,看来他们正在使用四叉树计算粒子上的力。代码是
var k = kc * quad.count * dn * dn;
node.px -= dx * k;
node.py -= dy * k;
看起来很简单quad.count是四叉树节点中的粒子数。但是查看quadtree code中的https://github.com/mbostock/d3/blob/master/d3.geom.js#L696,我找不到count
的任何引用,以及它是如何计算的。我问,因为我想修改一些东西,或许改变每个节点的“权重”或“收费”。
答案 0 :(得分:5)
查看d3_layout_forceAccumulate
方法:
https://github.com/mbostock/d3/blob/master/src/layout/force.js#L294-324
四叉树本身并不计算其粒子的电荷中心(因为四叉树只知道粒子位置,并且不对其电荷做出任何假设)。生成四叉树后,力布局递归计算每个象限的电荷中心。