7 个版本
0.1.6 | 2023 年 5 月 30 日 |
---|---|
0.1.5 | 2021 年 2 月 23 日 |
0.0.0 |
|
#2 在 #vec2
每月 40 次下载
26KB
401 行
gfxmath-vec2
一个简单的 2D 数学库。
Vec2
我们可以通过多种方式创建 Vec2 对象。
use gfxmath_vec2::Vec2;
// Standard 'new' semantics.
let v = Vec2::<f32>::new(3.0, 4.0);
// Using macro 'vec2!'
use gfxmath_vec2::vec2;
let v: Vec2<f32> = vec2!(3.0, 4.0);
// Using 'into' from a tuple.
let v: Vec2<f32> = (3.0, 4.0).into();
// Using 'into' from a borrowed tuple
let t = (3.0, 4.0);
let v: Vec2<f32> = (&t).into();
我们还可以从 Vec2 对象创建元组。
use gfxmath_vec2::Vec2;
// With owned Vec2 object
let v = Vec2::<f32>::new(3.0, 4.0);
let t: (f32, f32) = v.into();
// With borrowed Vec2 object
let v = Vec2::<f32>::new(3.0, 4.0);
let t: (f32, f32) = (&v).into();
运算符
为 Vec2 实现了常见的数学运算符。
+
,+=
-
,-=
*
,*=
/
,/=
// Reminder: Rust automatically infers floats to `f64` and integers to `i64`.
use gfxmath_vec2::Vec2;
let v1 = Vec2::new(3.0, 9.0);
let v2 = Vec2::new(4.0, 5.0);
let res = v1 + v2;
assert_eq!(7.0, res.x);
assert_eq!(14.0, res.y);
已知限制
左手原语
需要注意的是,当左侧是原语时,运算符的支持有限。这是由于 trait 实现的限制。以下 Rust 语法是非法的:impl <T> Add<Vec2<T>> for T
,因为实现必须针对已知类型进行非局部 trait 和类型。由于 Add
来自 core
包,而 T
(要实现类型的类型)不是从本地 trait 衍生的,所以这是不可能的。
截至本文写作时,适用于左侧的常见运算符的原语是 f32
、f64
、i32
和 i64
。
use gfxmath_vec2::Vec2;
// Works
let lhs: f32 = 4.0;
let rhs = Vec2::<f32>::new(3.0, 4.0);
let res = lhs + rhs;
// NOT SUPPORTED!!
let lhs: u32 = 4;
let rhs = Vec2::<u32>::new(3, 4);
let res = lhs + rhs;
哈希实现
目前,以下类型的哈希实现有限制
f32
f64
i32
i64
u32
u64
展示

许可证
Apache 2.0
依赖项
~295–760KB
~18K SLoC