4 个版本
| 0.2.1 | 2024 年 5 月 29 日 |
|---|---|
| 0.2.0 | 2023 年 10 月 1 日 |
| 0.1.1 | 2023 年 6 月 29 日 |
| 0.1.0 | 2023 年 6 月 1 日 |
#327 in 数据结构
38KB
891 行
Qutee
Qutee 是四叉树的简单实现。Qutee 允许您选择用于坐标的原始数字类型。四叉树的项不需要任何特质界限。
边界
可以使用 Boundary::new 或 Boundary::between_points 来构造边界。 Boundary::new 接收一个 Point 作为第一个参数,然后是宽度和高度。 Boundary::between_points 接收两个 Point 对象。
点
二维空间中的一个点。可以使用 Point::new 来构造一个点。这个函数接收一个 x 和 y 参数。大多数函数不需要直接接收 Point,而是接收 impl Into<Point> 作为参数。这允许使用一个元组作为点,其中第一个元素是 x,第二个是 `y'。
四叉树
QuadTree 提供了实际的四叉树实现。QuadTree 有两个必需参数和一个可选泛型参数。前两个参数是坐标和项类型。第三个参数定义了如何确定每个级别的最大容量。默认情况下,此参数设置为 DynCapacity。如果您在编译时知道大小,可以将其更改为 ConstCapacity。
创建
要创建 QuadTree,您可以使用三种方法之一
- new_with_capacity 接收一个
Boundary和类型为Capacity的参数。 - new_with_dyn_cap 接收一个
Boundary和一个类型为 usize 的容量。此函数仅在容量是动态时可用。 - new_with_const_cap 接收一个
Boundary。此函数仅在容量在编译时已知时可用。
插入
可以使用 insert 函数插入项。此函数要求项实现 AsPoint。如果您的项没有实现 AsPoint,您可以使用 insert_at。第一个参数是点,第二个是项。
查询
query 接收一个 Boundary 并返回一个类型为 Query 的 Iterator
迭代
iter 返回一个包含树中所有项的 Iter 类型的迭代器。
示例
use qutee::*;
// Create a new quadtree where the area's top left corner is at -10, -10, with a width and height of 20.
let mut tree = QuadTree::new_with_dyn_cap(Boundary::new((-10., -10.), 20., 20.), 5);
assert!(tree.insert_at((0.5, 0.1), "A").is_ok());
assert!(tree.insert_at((-1., 1.), "B").is_ok());
// This point is outside the tree
assert_eq!(tree.insert_at((10.1, 5.), "C"), Err(QuadTreeError::OutOfBounds));
// Search elements inside a boundary. A boundary can also be defined as an area between two points.
let mut query = tree.query(Boundary::between_points((0.,0.),(1.,1.)));
assert_eq!(query.next(), Some(&"A"));
assert!(query.next().is_none());
// Get an iterator over all items
let mut iter = tree.iter();
assert_eq!(iter.next(), Some(&"A"));
assert_eq!(iter.next(), Some(&"B"));
assert!(iter.next().is_none());
依赖项
~155KB