zmatrix — Rust 物理计算与矩阵运算库
面向航空航天、机器人、物理仿真的 Rust 数学库。提供编译期量纲安全的物理量系统,以及支持物理量元素的泛型矩阵运算。
快速了解
use *;
use Matrix;
use TimeDelta;
// 物理量自动单位转换
let d = from_m;
println!; // 1 km
// 编译期量纲检查 — 物理公式即代码
let v: Velocity = d / time_delta_from_secs_f64; // ✅ 正确
let a: Acceleration = v / time_delta_from_secs_f64; // ✅ 正确
// let wrong: Area = d / time; // ❌ 编译错误:量纲不匹配
// 带物理量的矩阵乘法 — 输出类型自动推导
let rot: = new;
let pos: = new;
let rotated: = rot.product.unwrap;
// Coef × Distance = Distance,编译期自动推导 ✅
一、物理量系统
19 种物理量,每种支持多种单位,物理量之间的运算在编译期进行量纲检查。
支持的物理量
| 物理量 | 单位 |
|---|---|
长度 Distance |
m, km, ly |
速度 Velocity |
m/s, km/h, km/s, c |
加速度 Acceleration |
m/s², km/h², g |
角度 Angular |
rad, deg |
角速度 AngularVelocity |
rad/s, deg/s, rad/h, deg/h |
角加速度 AngularAcceleration |
rad/s², deg/s² |
面积 Area |
m², km² |
体积 Volume |
m³, km³ |
质量 Mass |
kg, g |
动量 Momentum |
kg·m/s, kg·km/s |
角动量 AngularMomentum |
kg·m²/s, kg·km²/s, N·m·s 系列 |
力 Force |
N, mN, μN, nN, kN, MN |
力矩 Torque |
N·m, mN·m, μN·m, nN·m, kN·m, MN·m |
能量 Energy |
J, eV, mJ, μJ, nJ, kJ, MJ |
功率 Power |
W, hp, mW, μW, nW, kW, MW |
磁感应强度 MagneticInduction |
T, G, mT, μT, nT |
磁矩 MagneticMoment |
A·m², J/T |
磁角速度 MagneticAngularVelocity |
T·rad/s |
系数 Coef |
无量纲 |
物理量运算
// 运动学
let distance = from_m;
let time = time_delta_from_secs_f64;
let velocity: Velocity = distance / time; // 100 m/s
let acceleration: Acceleration = velocity / time; // 10 m/s²
// 动力学
let mass = from_kg;
let force: Force = mass * acceleration; // F = m × a → 20 N
let energy: Energy = force * distance; // W = F × d → 20000 J
// 旋转运动学
let angle = from_deg;
let omega: AngularVelocity = angle / time;
let alpha: AngularAcceleration = omega / time;
二、矩阵运算
基于 const generics 的泛型矩阵,行列在编译期固定。
基础操作
use Matrix;
let m1 = new;
let m2 = new;
let sum = m1 + m2;
let diff = m1 - m2;
let scaled = m1.scale;
let transposed = !m1; // 转置
let transposed = m1.T; // 等价写法
// 全0 / 全1 矩阵
let zeros = zeros;
let ones = ones;
// 获取与设置
let val = m1.get.unwrap; // (col, row)
m1.set.unwrap;
矩阵乘积 — 物理量类型推导
矩阵乘积支持不同类型的元素,输出类型由物理量之间的乘法关系自动推导:
// F = m × a
let m: = new;
let a: = new;
let f: = m.product.unwrap; // Mass × Accel = Force
// W = F × d
let f: = new;
let d: = new;
let w: = f.product.unwrap; // Force × Dist = Energy
// 方向余弦矩阵 × 位置向量
let dcm: = /* ... */;
let pos: = /* ... */;
let rotated: = dcm.product.unwrap;
// Coef × Distance = Distance ✅
如果量纲不匹配,编译就会报错。
三、向量运算
支持多种物理量的三维向量,以及叉乘、点积等运算。
let displacement = new;
// 位移向量 ÷ 时间 = 速度向量
let velocity = displacement / time_delta_from_secs_f64;
// 速度向量 × 质量 = 动量向量
let momentum = velocity * from_kg;
// 位移向量 × 动量向量 = 角动量
let angular_momentum = displacement * momentum;
// 叉乘与点乘
let v1 = new;
let v2 = new;
let cross = v1.cross;
let dot: Area = v1.dot; // Distance × Distance = Area
// 反对称矩阵
let skew = v1.skew_symmetric_matrix; // 3×3
let skew4 = v1.skew_symmetric_matrix_4; // 4×4
四、空间几何
欧拉角、方向余弦矩阵(DCM)、四元数之间的相互转换。
欧拉角
let euler: = new;
let quat = euler.to_quaternion;
let sin = euler.sin;
let cos = euler.cos;
方向余弦矩阵
let cos = unit;
// 获取行/列向量
let x = cos.get_x_vector;
let y = cos.get_y_vector;
let z = cos.get_z_vector;
// 转置
let cos_t = cos.transfer;
// 转换
let q = cos.to_quaternion;
let euler = cos.to_pry; // XZY 转序
let euler = cos.to_rpy; // XYZ 转序
// 矩阵乘法
let cos_c = cos_a.product;
let vec = cos_c.product_vector;
四元数
let q = new;
let norm = q.norm;
let normalized = q.normalize;
let conjugate = q.conjugate;
let inverse = q.inverse;
let cos = q.to_cos_matrix;
// 四元数计算
let sum = q1 + q2;
let product = q1 * q2;
let quotient = q1 / q2;
依赖
[]
= "0.3"
License
MIT