#binary #dice #slice #treemap #graphics #squarified

streemap

一系列树形图算法集(二叉、等面积等)

1 个不稳定版本

0.1.0 2021年5月2日

#1972算法

MIT/Apache

355KB
613

streemap - 树形图算法集

算法

  • 切片和切块 😵.
  • 二叉 👍.
  • 等面积 👍🚀 由 Bruls, Mark; Huizing, Kees; van Wijk, Jarke J. (2000) 提出。
  • 有序 由 Shneiderman, Ben (2001) 提出。
  • 条带 由 Benjamin, Bederson; Shneiderman, Ben; Wattenberg, Martin (2002) 提出。
  • 量子 由 Benjamin, Bederson; Shneiderman, Ben; Wattenberg, Martin (2002) 提出。 量化 变体的其他算法。

示例

深度 1

[6, 6, 4, 3, 2, 2, 1]
use streemap::Rect;

const R0: Rect<f32> = Rect { x: 0., y: 0., w: 0., h: 0. };
let mut slice = [(6., R0), (6., R0), (4., R0), (3., R0), (2., R0), (2., R0), (1., R0)];
streemap::squarify(
    Rect { x: 0., y: 0., w: 6., h: 4. },
    &mut slice[..],
    |&(n, _)| n, // map item to item size
    |(_, item_r), r| *item_r = r, // set item distributed rect
);
assert_eq!(
    slice,
    [
        (6.0, Rect { x: 0.0, y: 0.0, w: 3.0, h: 2.0 }),
        (6.0, Rect { x: 0.0, y: 2.0, w: 3.0, h: 2.0 }),
        (4.0, Rect { x: 3.0, y: 0.0, w: 1.7142857, h: 2.3333333 }),
        (3.0, Rect { x: 4.714286, y: 0.0, w: 1.2857141, h: 2.3333333 }),
        (2.0, Rect { x: 3.0, y: 2.3333333, w: 1.1999999, h: 1.6666667 }),
        (2.0, Rect { x: 4.2, y: 2.3333333, w: 1.1999999, h: 1.6666667 }),
        (1.0, Rect { x: 5.3999996, y: 2.3333333, w: 0.60000014, h: 1.6666667 })
    ]
);
streemap::binary(
    Rect { x: 0., y: 0., w: 6., h: 4. },
    &mut slice[..],
    |&(n, _)| n, // map item to item size
    |(_, item_r), r| *item_r = r, // set item distributed rect
);
assert_eq!(
    slice,
    [
        (6.0, Rect { x: 0.0, y: 0.0, w: 3.0, h: 2.0 }),
        (6.0, Rect { x: 0.0, y: 2.0, w: 3.0, h: 2.0 }),
        (4.0, Rect { x: 3.0, y: 0.0, w: 3.0, h: 1.3333334 }),
        (3.0, Rect { x: 3.0, y: 1.3333334, w: 1.125, h: 2.6666665 }),
        (2.0, Rect { x: 4.125, y: 1.3333334, w: 1.875, h: 1.0666667 }),
        (2.0, Rect { x: 4.125, y: 2.4, w: 1.25, h: 1.5999999 }),
        (1.0, Rect { x: 5.375, y: 2.4, w: 0.625, h: 1.5999999 })
    ]
);

性能:

等面积:

二叉:

中间有序中心点:

按大小有序中心点:

依赖