コンテンツにスキップ

パック

Circle-Packing

· エンクロージャ図は、包含(ネスト)を使用して階層を表します。リーフ円のサイズは、データの量的次元をエンコードします。外側の円は、各サブツリーのおおよその累積サイズを示しますが、無駄なスペースがあるため、多少の歪みがあります。リーフノードのみを正確に比較できます。円パッキングは、ツリーマップほど効率的にスペースを使用しませんが、「無駄」なスペースは階層構造をより顕著に示します。

pack()

ソース · デフォルト設定で新しいパックレイアウトを作成します。

pack(root)

ソース · 指定されたroot 階層をレイアウトし、rootとその子孫に次のプロパティを割り当てます

  • node.x - 円の中心の x 座標
  • node.y - 円の中心の y 座標
  • node.r - 円の半径

パックレイアウトに階層を渡す前に、root.sum を呼び出す必要があります。レイアウトを計算する前に、階層を並べ替えるために root.sort を呼び出すこともおそらく必要です。

pack.radius(radius)

ソース · radius が指定されている場合、パックレイアウトの半径アクセサを指定された関数に設定し、このパックレイアウトを返します。radius が指定されていない場合、現在の半径アクセサを返します。これはデフォルトでは null です。半径アクセサが null の場合、各リーフ円の半径はリーフ node.value (node.sum によって計算) から導出されます。次に、半径は レイアウトサイズに合うように比例的にスケーリングされます。半径アクセサが null でない場合、各リーフ円の半径は関数によって正確に指定されます。

pack.size(size)

ソース · size が指定されている場合、このパックレイアウトのサイズを指定された2要素の数値配列 [width, height] に設定し、このパックレイアウトを返します。size が指定されていない場合、現在のサイズを返します。これはデフォルトで [1, 1] です。

pack.padding(padding)

ソース · padding が指定されている場合、このパックレイアウトのパディングアクセサを指定された数値または関数に設定し、このパックレイアウトを返します。padding が指定されていない場合、現在のパディングアクセサを返します。これはデフォルトでは定数ゼロです。兄弟がパックされると、接する兄弟は、指定されたパディングによってほぼ分離されます。外側の親円も、指定されたパディングによってほぼ子から分離されます。明示的な半径が指定されていない場合、パディングは概算です。レイアウトサイズ内に収めるには2パスアルゴリズムが必要になるためです。円は最初にパディングなしでパックされます。スケーリングファクターが計算され、指定されたパディングに適用されます。最後に、円はパディングを使用して再度パックされます。

packSiblings(circles)

ソース · 指定されたcirclesの配列をパックします。各配列には、円の半径を指定する circle.r プロパティが必要です。各円に次のプロパティを割り当てます

  • circle.x - 円の中心の x 座標
  • circle.y - 円の中心の y 座標

円は、Wang et al.によるフロントチェーンパッキングアルゴリズムに従って配置されます。

packEnclose(circles)

· ソース · 指定されたcirclesの配列を囲む最小の円を計算します。各円には、円の半径を指定する circle.r プロパティと、円の中心を指定する circle.x および circle.y プロパティが必要です。外側の円は、Matoušek-Sharir-Welzlアルゴリズムを使用して計算されます。(アポロニウスの問題も参照してください。)