1 个不稳定版本
使用旧的Rust 2015
0.1.0 | 2016年8月25日 |
---|
#1121 在 数学
37KB
851 行
det-rs
使用Rust宏计算方阵的行列式
不应直接使用此宏。相反,它应该在用于其他地方的函数内部调用。
用法
计算平行四边形的面积
pub fn find_orthonormal_4(a: &Vector2<f32>, b: &Vector2<f32>) -> f32 {
det_copy!(a.x, a.y,
b.x, b.y)
}
使用nalgebra计算4D正交向量
pub fn find_orthonormal_4(a: &Vector4<f32>, b: &Vector4<f32>, c: &Vector4<f32>) -> Vector4<f32> {
det_copy!(Vector4::x(), Vector4::y(), Vector4::z(), Vector4::w(),
a.x, a.y, a.z, a.w,
b.x, b.y, b.z, b.w,
c.x, c.y, c.z, c.w )
}
通常在这些情况下应使用 det!
,但奇怪的是,它会导致类型递归错误,所以我们使用 det_copy!
代替。注意,构造函数(例如 Vector4::x()
)会多次执行。为了避免这种情况,首先将向量绑定到变量,然后传递变量。
要求
有各种宏用于不同类型的值。
det_copy!
T: 复制
T: Mul<T, 输出=T>
T: 减法<T, 输出=T>
T: 加法<T, 输出=T>
det_clone!
T: 克隆
T: Mul<T, 输出=T>
T: 减法<T, 输出=T>
T: 加法<T, 输出=T>
det!
T: Mul<T, 输出=T>
对于<'a> &'aT: Mul<T, 输出=T>
对于<'a, 'b> &'aT: Mul<&'bT, 输出=T>
T: 减法<T, 输出=T>
T: 加法<T, 输出=T>