力指向グラフの例に似たものがあります。主な違いは、力がないことです。ユーザーのドラッグ操作を除いて、レイアウトは静的です。ユーザー定義のノードグループの周りに凸包を(svg:path要素として)描画するコードを追加しました。ノードが移動すると(つまり、.on("drag")
)、船体を計算するコードが実行されます。つまり、ノードがドラッグされたときに常に起動されます。通常、10から30の船体があります。ノードは1つまたは複数の船体にある場合があります。下記参照:
私は自分がしていることを行うためのより効率的な(より高いパフォーマンスの)方法があるかどうかを理解しようとしています。今のところこれを高レベルに保つ:
ドラッグ時に、すべての船体グラフィックを更新します。
- 船体ごとに、構成ノードの座標の配列を作成します。
- 上記の配列の各座標ペアを、元のポイントからr離れた8つのポイントに置き換えます。これは、船体が実際にノードに接触しないように、船体をパディング/拡張するためのものです。
- 計算された座標をにフィードし
d3.geom.hull
ます。
Chromeで約50fpsを取得していますが、これはまったく悪いことではありませんが、非常に非効率的な設定のようです。
私の唯一の明確なアイデアは、ノードがノード配列に含まれている船体のIDを格納し、すべての船体ではなく、その船体のみを更新することです。また、(パス自体ではなく)船体データを格納するためのより効率的なデータ構造についても疑問に思っています。現在、データ構造は次のようになっています。
hulls = {1:{nodeIDs:[1,2,3,4,5], name:"hull1"}, 2:{...}, ...};
自由形式の質問はご容赦ください。しかし、私がよく知らないプログラミング手法がここでうまく機能することを期待しています。