#quad-tree #tree #spatial #algorithm #data-structures #graphics

nightly quadtree-cd

一个基于四叉树的数据结构,用于在有限的二维空间中放置形状,如旋转的矩形,并检查与已放置项目的碰撞。

1个不稳定版本

0.1.0 2019年8月8日

#2583算法

Apache-2.0

15KB
336

quadtree-cd

一个基于四叉树的数据结构,用于在有限的二维空间中放置形状,如旋转的矩形,并检查与已放置项目的碰撞。

crates.io badge docs.rs badge license

有关文档,请参阅docs.rs/quadtree-cd

用法

四叉树通过宽度和高度参数初始化,并对使用的几何类型进行泛型;该软件包支持旋转矩形。

以下示例演示了如何使用四叉树来放置旋转矩形,并在每个放置时检查它是否与已放置的项目相交。

use quadtree_cd::{Tree, BoundingBox, RotatedRect as Rect};

fn main() {
    let mut tree: Tree<RR> = Tree::new(1.0, 1.0);
    let rr1 = Rect { x: 0.5, y: 0.5, w: 0.5, h: 0.5, a: PI / 4.0 };
    let rr2 = Rect { x: 0.85, y: 0.85, w: 0.15, h: 0.15, a: PI / 8.0 };

    // These rectangles are non-intersecting.
    assert!(tree.insert_unless_intersecting(rr1, &(&rr1).into()));
    assert!(tree.insert_unless_intersecting(rr2, &(&rr2).into()));

    // But this one intersects at least one.
    let rr3 = Rect { x: 0.85, y: 0.85, w: 0.25, h: 0.25, a: PI / 8.0 };
    assert!(!tree.insert_unless_intersecting(rr3, &(&rr3).into()));
}

依赖关系

~10KB