7

D3ライブラリを使用して物理重力のシミュレーションを設計しようとしていますが、あまり運がありません。'layout' APIリファレンスには、物理​​的な重力は正の'charge'パラメーターを介して実装できると記載されていますが、これがどのように機能するかはわかりません。

現時点で実装しようとしているのは、さまざまな速度で上昇し、最終的にビューポートから出ていく複数の可変加重およびサイズのrectを含む単一のSVG要素です。それらの加重は、それらが上昇する速度を定義します。(基本的に、ビューポートの上部を超えてグローバルな引力を実装しようとしています。)

D3フォースレイアウトに従ってこれを行うための実行可能な方法はありますか?概念的な解決策を探していますが、例とコードスニペットも高く評価されています。

前もって感謝します!

4

1 に答える 1

3

ここにいくつかのアイデアがあります:

  1. tickイベントハンドラーでノードの垂直位置を直接変更できます。

    force.on("tick", function(e) {
        nodes.forEach(function(o, i) {
            o.y -= o.weight / 30;
         });
    
         node.attr("cx", function(d) { return d.x; })
             .attr("cy", function(d) { return d.y; });
    });
    

    このアプローチでは force.gavity(0) を設定する必要があります。

  2. または、force.gravity を使用できます。ノードをレイアウトの中心に向かって引っ張ります。svg 変換を指定して、レイアウトの中心をビューポートの上に移動できます。
于 2012-11-17T10:26:10.523 に答える