28个版本

0.2.25 2024年8月21日
0.2.24 2024年8月18日
0.2.21 2024年7月31日
0.2.9 2024年6月26日
0.1.2 2024年5月25日

数学分类中排名第74

Download history 393/week @ 2024-05-22 220/week @ 2024-05-29 647/week @ 2024-06-05 347/week @ 2024-06-12 422/week @ 2024-06-19 379/week @ 2024-06-26 417/week @ 2024-07-03 306/week @ 2024-07-10 245/week @ 2024-07-17 363/week @ 2024-07-24 152/week @ 2024-07-31 247/week @ 2024-08-07 130/week @ 2024-08-14

每月下载量955

MIT/Apache

215KB
4K SLoC

num-quaternion

Build Docs.rs Downloads Crates.io MIT License Apache License

Rust的四元数。

num-quaternion是一个Rust库,用于实现健壮、高效且易于使用的四元数算术和操作。四元数在计算机图形学、机器人和物理学中广泛用于表示旋转和方向。

特性

  • 基本四元数操作:加法、减法、乘法、除法和共轭。
  • 单位四元数:对单位四元数的优化操作提供特殊支持。
  • 转换函数:转换到/从欧拉角、旋转向量和更多。
  • 插值:球面线性插值(SLERP)以实现平滑旋转。
  • 全面文档:详细的文档和示例,帮助您快速入门。

安装

num-quaternion添加到您的Cargo.toml

[dependencies]
num-quaternion = "0.2.25"

对于#![no_std]环境,禁用默认的std功能并启用libm以利用num-quaternion的高级数学功能

[dependencies]
num-quaternion = { version = "0.2.25", default-features = false, features = ["libm"] }

然后,将其包含在您的crate中

use num_quaternion::{Quaternion, UnitQuaternion, Q32, Q64, UQ32, UQ64};

用法

创建四元数

// Create a quaternion with explicit components
let q1 = Q32::new(1.0, 2.0, 3.0, 4.0);  // = 1 + 2i + 3j + 4k

// Create a quaternion using shorthand notation
let q2 = 1.0 + Q32::I;  // = 1 + i

基本操作

let q3 = q1 + q2;        // Quaternion addition
let q4 = q1 * q2;        // Quaternion multiplication
let q_conj = q1.conj();  // Quaternion conjugation

单位四元数

let uq1 = q1.normalize().expect("Normalization failed"); // Normalize quaternion
let uq2 = UQ32::I;  // Unit quaternion representing the imaginary unit

转换函数

// From Euler angles
let (roll, pitch, yaw) = (1.5, 1.0, 3.0);
let uq = UnitQuaternion::from_euler_angles(roll, pitch, yaw);

// To Euler angles
let euler_angles = uq.to_euler_angles();

// From rotation vector
let rotation_vector = [1.0, 0.0, 0.0]; // x axis rotation, 1 radian
let uq = UnitQuaternion::from_rotation_vector(&rotation_vector);

// To rotation vector
let rotation_vector = uq.to_rotation_vector();

球面线性插值(SLERP)

let uq1 = UQ32::ONE;  // Create a unit quaternion
let uq2 = UQ32::I;    // Create another unit quaternion
let interpolated = uq1.slerp(&uq2, 0.3);  // Perform SLERP with t=0.3

文档

有关全面文档和示例,请参阅docs.rs

有关详细设计原则和错误处理策略,请参阅设计原则

RELEASES.md中提供了详细的发行说明。

贡献

欢迎贡献!请Fork仓库并提交拉取请求。通过贡献,您同意您的贡献将在Apache-2.0和MIT许可下双许可。

如果您有任何问题或需要帮助,请随时在GitHub上创建一个问题

更详细的说明可以在CONTRIBUTING.md指南中找到。

许可协议

许可协议如下:

您可任选其一。

致谢

特别感谢@cuviper提供的num-complexcrate,该crate是该crate的模板。num-quaternion被设计成能够无缝集成到rust-numcrate系列中。

依赖项

约140–430KB