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