#vector-math #math #physics-engine #simple #vector #no-std

nightly no-std coord

一个简单、易用的向量数学 crate

16 个版本 (10 个破坏性更新)

使用旧的 Rust 2015

0.11.1 2019 年 10 月 24 日
0.11.0 2018 年 7 月 4 日
0.10.1 2018 年 7 月 4 日

#18#mathematical

Download history 83/week @ 2024-03-31

84 每月下载量

MIT 许可证

56KB
1.5K SLoC

coord 已弃用。我建议使用具有类似目标的 vek

Coord Coord

Build Status Crates.io Downloads Docs

描述

Coord 是一个简单、易用的 Rust 向量数学 crate,旨在用于游戏开发、物理引擎和其他涉及通用多变量数学的程序。

Coord 现已兼容 no_std

示例

#[macro_use]
extern crate coord;
use coord::prelude::*;

fn main() {
	// Coord supports 4 multi-variable vector types: Vec1, Vec2, Vec3 and Vec4
	let mut v = vec3!(1.0, 2.5, 3.0);

	// Coord supports common mathematical operations for both primitive and vector types
	v += vec3![1.0; 3] * 5.0;
	let _ = v * vec3!([10.0, 10.0, 10.0]);

	// Coord implements many common mathematic functions
	let _ = v.length();
	let _ = v.norm();

	// Coord supports debug and display printing of vectors
	println!("Debug => {:?}", v);
	println!("Display => {}", v);

	// Coord allows arbitrary vector component types
	let _ = vec2!(true, false); // Create a boolean vector
}

更多示例,请访问 https://docs.rs/coord

特性

  • 泛型 Vec1Vec2Vec3Vec4 类型
  • 实用宏,使向量操作更简单
  • VecXuVecXiVecXf 默认类型定义
  • 基本数学运算(AddSubMulDiv
  • 数学函数(例如:.length().norm() 等)
  • 使用 serialize 功能支持序列化
  • 使用 large_defaults 功能支持 64 位默认类型
  • 支持哈希
  • .map() 方法执行任意元素级的向量变换
  • .convert_to() 方法允许元素级的向量转换
  • .div_floor() 方法允许类似 floor 的向量除法

即将推出

  • 位运算
  • 更多数学函数
  • 整数向量类型的模运算符

使用 Coord

要在Rust项目中使用Coord,请在Cargo.toml文件中[dependencies]部分下方添加以下行。

coord = "0.11.0"

如果您想启用序列化或64位默认值,请指定依赖项,如下所示。

[dependencies.coord]
version = "0.7.0"
features = ["serialize", "large_defaults"]

常见问题解答

Coord为什么存在?

Coord是在开发Veloren项目时,由于对现有的矢量数学库普遍不满意而出现的。现有的解决方案要么太复杂,使用起来不方便,要么需要太多的依赖项。

Coord是否旨在最终实现功能X?

Coord并不旨在成为一个完整的N维数学库。它旨在实现一组小巧而优雅的功能,使其适用于需要简单多变量数学的应用程序。

如果您认为功能X属于这个范围,并且尚未在项目的待办事项列表中,您可以在GitHub上打开一个问题,我会考虑实现它。

为什么Coord选择32位默认类型?

Coord在defaults模块中定义了一组“默认”类型。它们也包含在prelude模块中。这些默认类型,如Vec2fVec3uVec4b等,旨在使使用Coord编写代码更快。仍然可以不使用它们编程,如Vec2<f32>Vec3<u32>Vec4<bool>等。Coord选择32位类型作为默认值,因为我认为这些类型在为游戏和物理引擎开发时更有用,它们需要快速计算。此外,32位浮点类型意味着Coord与OpenGL兼容。

为什么Coord没有通用vec!宏?

这样的宏会与Rust标准库中的vec!宏冲突。

为什么Coord不依赖于标准库?

它不需要。为什么要通过要求std来限制库的使用范围?

错误!错误!我发现了一个错误!

在GitHub上打开一个问题,我会尽快修复。

您可以在这里打开一个问题

许可协议

Coord是开源软件,根据MIT许可协议(见'LICENSE'或http://opensource.org/licenses/MIT)许可。

依赖项

~175–415KB