2个版本
0.0.1 | 2019年5月31日 |
---|---|
0.0.0 | 2019年5月18日 |
#238 in #geometry
73KB
2K SLoC
Theon是一个Rust库,它抽象了欧几里得空间。
几何特征
Theon提供了建模欧几里得空间的几何特征。这些特征并不总是数学上严格的,但这使得它们可以用于许多类型。大多数功能仅限于二维和三维欧几里得空间,但特征在维度上通常是通用的。
Theon使用一个自带类型模型,其中库的所有者可以通过为其类型实现某些特征来使用Theon的功能。Theon还提供了Rust生态系统中的常用crate的可选实现,包括cgmath
、mint
和nalgebra
。这些实现可以通过Cargo功能启用。
功能 | 默认 | crate | 支持 |
---|---|---|---|
geometry-cgmath |
不支持 | cgmath |
完全支持 |
geometry-mint |
不支持 | mint |
部分支持 |
geometry-nalgebra |
支持 | nalgebra |
完全支持 |
空间查询
可以使用实现适当几何特征的任何类型执行几何查询。
use nalgebra::Point2;
use theon::query::{Aabb, Intersection, Ray, Unit};
use theon::space::{Basis, EuclideanSpace};
use theon::Converged;
type E2 = Point2<f64>;
let aabb = Aabb::<E2> {
origin: EuclideanSpace::origin(),
extent: Converged::converged(1.0),
};
let ray = Ray::<E2> {
origin: EuclideanSpace::from_xy(-1.0, 0.5),
direction: Unit::try_from_inner(Basis::x()).unwrap(),
};
assert_eq!(Some((1.0, 2.0)), ray.intersection(&aabb));
assert_eq!(None, ray.reverse().intersection(&aabb));
在上面的示例中,可以将E2
类型定义替换为cgmath
或其他实现EuclideanSpace
和必要操作特征的类型。
LAPACK
一些查询需要解决任意和复杂大小的线性系统。为了支持这些查询,array
功能依赖于ndarray
和LAPACK。例如,Plane::from_points
由array
功能启用,并使用奇异值分解计算最佳拟合平面。
这些操作以几何特征和使用的实现类型的形式公开。
目前,array
功能仅支持Linux。
依赖关系
~1.1-3MB
~69K SLoC