Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Squarified Treemap algorithm written in Rust.

License

NotificationsYou must be signed in to change notification settings

bacongobbler/treemap-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Implements the Squarified Treemap algorithm published by Mark Bruls, Kees Huizing, and Jarke J. van Wijk.

The Squarified Treemap algorithm paper can be found here:https://www.win.tue.nl/~vanwijk/stm.pdf

Uses

Suppose we have a rectangle with a width of 6 and a height of 4, and furthermore suppose that this rectangle must be subdivided in seven rectangles with areas 6, 6, 4, 3, 2, 2, and 1. The standard treemap algorithm uses a simple approach: The rectangle is subdivided either horizontally or vertically. Thin rectangles emerge, with aspect ratios of 16 and 36, respectively.

In other words, it'll look something like this:

+------+------+----+---+--+-+|      |      |    |   |  | ||      |      |    |   |  | ||   6  |   6  |  4 | 3 | 2|1||      |      |    |   |  | |+------+------+----+---+--+-+

The Squarified Treemap algorithm tesselates a rectangle recursively into rectangles, such that their aspect ratios approach 1 as close as possible.

+-------------+-----+-----+--+|             |  2  |  2  | 1||      6      +-----+-+---+--||-------------+       |      ||             |       |      ||      6      |    4  |   3  |+-------------+-------+------+

This can be useful for a variety of purposes:

  • visualizing hierarchal structures, such as showing how much space each directory uses in a file drive
  • generating a floor map given an area on how each room should be subdivided (bathrooms would need a smaller amount of space than a living room, for example)

Example

This example will tesselate a rectangle with a width of 6 and a height of 4 with seven rectangles with areas 6, 6, 4, 3, 2, 2, and 1, then display each rectangle's top-left corner's x and y position within the larger rectangle (the bounds), as well as their respective height and width.

To start, generate a new project:

$cargo new --bin treemap-example     Created binary (application) `treemap-example` package

Addtreemap to Cargo.toml:

[dependencies]treemap ="0.3"

Then, insrc/main.rs:

use treemap::{MapItem,Mappable,Rect,TreemapLayout};fnmain(){let layout =TreemapLayout::new();let bounds =Rect::from_points(0.0,0.0,6.0,4.0);letmut items:Vec<Box<dynMappable>> =vec![Box::new(MapItem::with_size(6.0)),Box::new(MapItem::with_size(6.0)),Box::new(MapItem::with_size(4.0)),Box::new(MapItem::with_size(3.0)),Box::new(MapItem::with_size(2.0)),Box::new(MapItem::with_size(2.0)),Box::new(MapItem::with_size(1.0)),];    layout.layout_items(&mut items, bounds);for itemin items{let item_bounds = item.bounds();println!("x={} y={} w={} h={}", item_bounds.x, item_bounds.y, item_bounds.w, item_bounds.h);println!("------");}}

About

Squarified Treemap algorithm written in Rust.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp