#matrix #game #math #vector-math #vector #graphics

nightly no-std definitive

为 Rust 提供的权威和最终向量与矩阵库

5 个版本

0.1.0 2019 年 11 月 12 日
0.0.0-alpha.32019 年 10 月 27 日
0.0.0-alpha.12019 年 10 月 25 日

#1225游戏开发

ISC 许可证

23KB
516

权威

为 Rust 提供的权威向量与矩阵库

use definitive::Vector;

let a = Vector::new([2, 3, 1]);
let b = Vector::new([8, 0, 0]);

let c = a + b * (b * 2);

SIMD

Definitive 提供默认功能 simd,该功能可启用和禁用某些 VectorMatrix 变体的手写 SIMD 实现。手动优化的变体在各自的特性中有所说明

#![no_std]

此 crate 支持使用 #![no_std] 环境的 no_std,可以通过禁用 std 功能来启用支持

当前问题

目前最大的问题是支持任意矩阵,因为不允许如下类型的类型签名。据我所知,我们可能 有一天 会得到这个功能,但 const 泛型仍然处于起步阶段。

struct Matrix<T, const N: usize, const L: [usize; {N}]>([T; { L.iter().product() }]);

我面临的另一问题是关于特殊化。我希望允许 vec * scalar 操作,但我无论如何也想不出不添加不必要的 Copy 约束在 vec's T 上的方法。这在大多数情况下不是问题,并且不会引起任何效率问题,因为 vec 的成员实际上并没有被复制到任何地方。在未来,这个约束可能会被移除,因为我学会了如何真正使用类型系统 D

进展

  • 向量

    • 克隆
    • 复制
    • 调试
    • 显示
    • 等价
      • 部分等价
      • 加赋值
      • 减赋值
      • 乘赋值
      • 除赋值
    • 取余
      • 取余赋值
    • 位与
      • 位与赋值
    • 位或
      • 位或赋值
    • 位异或
      • 位异或赋值
    • 左移
      • 左移赋值
    • 右移
      • 右移赋值
    • 哈希
  • Matrix (阻塞在 https://github.com/rust-lang/rust/issues/44580)

无运行时依赖

功能