2011-09-14 10 views
5

D3 visualization library(http://mbostock.github.com/d3/)を使用して理解しようとしていますが、私はtheir force directed codeを見ていて、力を計算するためにクアッドツリーを使用しているようです粒子上にコードはJavascript D3の可視化クワッドツリーを理解する

 var k = kc * quad.count * dn * dn; 
     node.px -= dx * k; 
     node.py -= dy * k; 

です。ここで、quad.countはクアッドツリーノードのパーティクル数です。しかし、quadtree codehttps://github.com/mbostock/d3/blob/master/d3.geom.js#L696に見ると、countへの参照、およびその計算方法がわかりません。私はおそらく各ノードの "重み"や "料金"を変更するためにいくつかのものを修正したいからです。

+1

@highBandWidthリンクはもう動作しません。この質問以来、d3.jsであなたの経験qith quadtreeは何でしたか? :) – VividD

答えて

5

d3_layout_forceAccumulate方法を見てみましょう:クワッドツリーのみパーティクルの位置を知っているので、それ自体で、四分木は、(その粒子の料金の中心を計算しない

https://github.com/mbostock/d3/blob/master/src/layout/force.js#L294-324

をせず、その費用について何らかの仮定をする)。 quadtreeが生成された後、forceレイアウトは各象限の再充電中心を計算します。

+0

ありがとう、それを得た!おそらく、 'd3_layout_quadCenterAccumulate'のようなメソッドは' cx'、 'cy'、' count'を計算するだけの力を蓄えているわけではないので、このメソッドを呼び出すべきでしょう。 – highBandWidth

+0

D3のプライベートグローバルは、潜在的な名前の衝突を避けるために、関連するクラスによってスコープされます。したがって、src/layout/forceに定義されているものは接頭辞d3_layout_forceを持つ必要があります。 – mbostock

+0

オハイオ州の力はAccumulate関数の接頭辞に過ぎません。 – highBandWidth