#quad-tree #spatial #tree #graphics #algorithm

quadtree_rs

支持重叠区域的点/区域四叉树

3个版本

0.1.3 2023年6月13日
0.1.2 2019年4月6日
0.1.1 2019年4月6日

#466可视化

Download history 288/week @ 2024-03-14 253/week @ 2024-03-21 296/week @ 2024-03-28 275/week @ 2024-04-04 230/week @ 2024-04-11 182/week @ 2024-04-18 305/week @ 2024-04-25 223/week @ 2024-05-02 270/week @ 2024-05-09 229/week @ 2024-05-16 145/week @ 2024-05-23 227/week @ 2024-05-30 200/week @ 2024-06-06 282/week @ 2024-06-13 333/week @ 2024-06-20 171/week @ 2024-06-27

每月 1,039 次下载
3 crates 中使用

Apache-2.0

62KB
939 代码行

quadtree_rs

crates.io badge docs.rs badge license

点/区域四叉树 支持重叠区域。

有关文档,请参阅 docs.rs/quadtree_rs.

快速入门

use quadtree_rs::{area::AreaBuilder, point::Point, Quadtree};

// Instantiate a new quadtree which associates String values with u64 
// coordinates.
let mut qt = Quadtree::<u64, String>::new(/*depth=*/4);

// A depth of four means a square with width (and height) 2^4.
assert_eq!(qt.width(), 16);

// Associate the value "foo" with a rectangle of size 2x1, anchored at (0, 0).
let region_a = AreaBuilder::default()
    .anchor(Point {x: 0, y: 0})
    .dimensions((2, 1))
    .build().unwrap();
qt.insert(region_a, "foo".to_string());

// Query over a region of size 2x2, anchored at (1, 0).
let region_b = AreaBuilder::default()
    .anchor(Point {x: 1, y: 0})
    .dimensions((2, 2))
    .build().unwrap();
let mut query = qt.query(region_b);

// The query region (region_b) intersects the region "foo" is associated with 
// (region_a), so the query iterator returns "foo" by reference.
assert_eq!(query.next().unwrap().value_ref(), "foo");

有问题?

请在GitHub上提交问题。

作者

查看 Cargo.toml.

贡献

查看 CONTRIBUTING.mdNOTES.md

许可证

本项目采用Apache 2.0许可证。

免责声明

这不是官方的Google产品。

待办事项

  • 美化打印四叉树函数,绘制密度图
  • 基准测试

依赖项

~3MB
~67K SLoC