#vec2 #2d-graphics #2d #graphics

gfxmath-vec2

一个简单的 2D 数学库

7 个版本

0.1.6 2023 年 5 月 30 日
0.1.5 2021 年 2 月 23 日
0.0.0 2021 年 2 月 14 日

#2#vec2

每月 40 次下载

Apache-2.0

26KB
401

gfxmath-vec2

Version Downloads Issues

一个简单的 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 衍生的,所以这是不可能的。

截至本文写作时,适用于左侧的常见运算符的原语是 f32f64i32i64

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

展示

drawing

许可证

Apache 2.0

依赖项

~295–760KB
~18K SLoC