35个版本 (18个破坏性更新)

使用旧的Rust 2015

0.18.0 2021年1月3日
0.17.0 2019年1月17日
0.16.1 2018年3月21日
0.15.0 2017年7月30日
0.0.1 2014年11月12日

#50 in 数学

Download history 10456/week @ 2024-03-14 13638/week @ 2024-03-21 12807/week @ 2024-03-28 11702/week @ 2024-04-04 13448/week @ 2024-04-11 12422/week @ 2024-04-18 12137/week @ 2024-04-25 11899/week @ 2024-05-02 10719/week @ 2024-05-09 12573/week @ 2024-05-16 13061/week @ 2024-05-23 12137/week @ 2024-05-30 10969/week @ 2024-06-06 11452/week @ 2024-06-13 11513/week @ 2024-06-20 10247/week @ 2024-06-27

45,774 每月下载量
用于 409 个crate(244个直接使用)

Apache-2.0

260KB
6K SLoC

cgmath-rs

Build Status Documentation Version License Downloads Gitter

计算机图形学用的线性代数和数学库。

该库提供

  • 向量:Vector2Vector3Vector4
  • 方阵:Matrix2Matrix3Matrix4
  • 四元数类型:Quaternion
  • 旋转矩阵:Basis2Basis3
  • 角度单位:RadDeg
  • 点:Point2Point3
  • 透视投影:PerspectivePerspectiveFovOrtho
  • 空间变换:AffineMatrix3Transform3

并非所有功能都已实现,现有代码尚未完全覆盖测试套件。如果遇到任何错误或遗漏,请通过提交问题通知我,或者更好的是:发送一个带有修复的pull request。

约定

cgmath将其向量解释为列矩阵(也称为“列向量”),这意味着在矩阵变换向量时,矩阵位于左侧。这反映在cgmath实现了矩阵乘以向量的乘法运算符,但没有向量乘以矩阵的运算符。

特性

混叠

这个库提供了一项名为“swizzling”的可选功能,这是GPU程序员普遍熟悉的功能。要启用swizzle运算符,请将--features="swizzle"选项传递给cargo。启用此功能将使cgmath库的大小增加约0.6MB。如果库通过在Cargo.toml中将cgmath作为依赖项以“正常”方式链接,则这不是问题,因为这将使cgmath静态链接,所以所有未使用的swizzle运算符将在发布模式下被编译器优化掉。

示例

如果我们有

let v = Vector3::new(1.0, 2.0, 3.0);

那么v.xyxz()会产生一个

Vector4 { x: 1.0, y: 2.0, z: 1.0, w: 3.0 }

并且v.zy()会产生一个

Vector2 { x: 3.0, y: 2.0 }

SIMD优化

当前的SIMD支持依赖于已废弃的“simd”包以及不稳定的“specialization”特性。为了构建此代码,需要一个1.33之前的nightly构建的Rust,例如2019-01-01-nightly。虽然目前的代码形式没有用处,但它作为未来迁移的起点具有一定的价值(参见https://github.com/rustgd/cgmath/issues/490)。

限制

cgmath不是一个n维库,而是面向计算机图形学应用的,而不是通用的线性代数。它只提供2、3和4维结构,这足以满足大多数计算机图形学应用的需求。这一设计决策是为了简化实现(Rust不能在编译时对常量进行参数化),并使未来的特定维度优化更容易。

贡献

欢迎pull requests,尤其是在性能提升和修复我可能犯的错误方面。还需要单元测试和基准测试,因此在此方面提供帮助将非常受欢迎。

依赖关系

~130–445KB