跳到內容

Pack

Circle-Packing

範例 · 圍繞圖使用包容(巢狀)來表示階層。葉子圓圈的大小編碼資料的量化維度。包圍的圓圈顯示每個子樹的近似累積大小,但由於浪費空間,因此會有一些失真;只有葉子節點可以準確比較。儘管 圓形包裝 沒有 樹狀圖 那麼有效率地使用空間,「浪費」的空間更突顯了階層結構。

pack()

原始碼 · 使用預設設定建立新的 pack 配置。

pack(root)

原始碼 · 配置指定的 root 階層,在 root 及其後代指派下列屬性

  • 節點.x - 圓形中心的x座標
  • 節點.y - 圓形中心的y座標
  • 節點.r - 圓形的半徑

在將階層傳遞給封裝配置之前,您必須呼叫.sum。您可能還想呼叫.sort,以便在計算配置之前對階層進行排序。

封裝.radius(半徑)

來源 · 如果指定了半徑,則將封裝配置的半徑存取器設定為指定的函式,並傳回此封裝配置。如果未指定半徑,則傳回目前的半徑存取器,預設為 null。如果半徑存取器為 null,則每個葉子圓形的半徑會從葉子節點.值(由節點.sum計算)衍生而來;然後將半徑按比例縮放,以符合配置大小。如果半徑存取器不為 null,則每個葉子圓形的半徑會由函式精確指定。

封裝.size(大小)

來源 · 如果指定了大小,則將此封裝配置的大小設定為指定的數字 [寬度, 高度] 二元陣列,並傳回此封裝配置。如果未指定大小,則傳回目前的大小,預設為 [1, 1]。

封裝.padding(內距)

來源 · 如果指定了內距,則將此封裝配置的內距存取器設定為指定的數字或函式,並傳回此封裝配置。如果未指定內距,則傳回目前的內距存取器,預設為常數零。當封裝兄弟節點時,相切的兄弟節點會以大約指定的內距分隔;封裝的父圓形也會以大約指定的內距與其子節點分隔。如果未指定明確的半徑,則內距是近似的,因為需要使用兩次演算法才能符合配置大小:首先在沒有內距的情況下封裝圓形;計算縮放因子並套用至指定的內距;最後在有內距的情況下重新封裝圓形。

packSiblings(circles)

來源 · 封裝指定的 circles 陣列,每個陣列都必須有 circle.r 屬性,用來指定圓的半徑。將下列屬性指定給每個圓

  • circle.x - 圓心的 x 座標
  • circle.y - 圓心的 y 座標

圓形會根據 Wang et al. 的 front-chain 封裝演算法進行定位

packEnclose(circles)

範例 · 來源 · 計算 最小的圓,將指定的 circles 陣列包圍起來,每個陣列都必須有 circle.r 屬性,用來指定圓的半徑,以及 circle.x 和 circle.y 屬性,用來指定圓心。包圍圓是使用 Matoušek-Sharir-Welzl 演算法 計算的。(另請參閱 阿波羅尼奧斯問題。)