#graphics #geometry

theon

欧几里得空间的抽象

2个版本

0.0.1 2019年5月31日
0.0.0 2019年5月18日

#238 in #geometry

MIT许可证

73KB
2K SLoC

Theon是一个Rust库,它抽象了欧几里得空间。

Build Status Documentation Crate

几何特征

Theon提供了建模欧几里得空间的几何特征。这些特征并不总是数学上严格的,但这使得它们可以用于许多类型。大多数功能仅限于二维和三维欧几里得空间,但特征在维度上通常是通用的。

Theon使用一个自带类型模型,其中库的所有者可以通过为其类型实现某些特征来使用Theon的功能。Theon还提供了Rust生态系统中的常用crate的可选实现,包括cgmathmintnalgebra。这些实现可以通过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功能依赖于ndarrayLAPACK。例如,Plane::from_pointsarray功能启用,并使用奇异值分解计算最佳拟合平面。

这些操作以几何特征和使用的实现类型的形式公开。

目前,array功能仅支持Linux。

依赖关系

~1.1-3MB
~69K SLoC