#units #math #gamedev #building-block

fts_gamemath

fts_gamemath 是一个提供 3D 游戏数学基础构建块的 Crate 集合

2 个版本

0.1.1 2019年6月12日
0.1.0 2019年6月10日

#1154 in 游戏开发

Unlicense OR MIT

79KB
1K SLoC

fts_gamemath

Crate API Build Status Crates.io

fts_gamemath 是一个提供 3D 游戏数学基础构建块的 Rust Crate 集合

fts_units

fts_units 是一个 Rust 库,它允许在编译时使用测量单位进行类型安全的数学运算。

use fts_units::si_system::quantities::f32::*;
let d = Meters::new(10.0);
let t = Seconds::new(2.0);
let v = d / v; // units will be m·s⁻¹
let err = d + t; // compile error

这可以轻松扩展到复杂的操作。

use fts_units::si_system::quantities::*;

fn calc_ballistic_range(speed: MetersPerSecond<f32>, gravity: MetersPerSecond2<f32>, initial_height: Meters<f32>)
-> Meters<f32>
{
    let d2r = 0.01745329252;
    let angle : f32 = 45.0 * d2r;
    let cos = Dimensionless::<f32>::new(angle.cos());
    let sin = Dimensionless::<f32>::new(angle.sin());

    let range = (speed*cos/gravity) * (speed*sin + (speed*speed*sin*sin + Dimensionless::<f32>::new(2.0)*gravity*initial_height).sqrt());
    range
}

您可以进行单位间的转换和类型间的转换。


let m = Meters::<f32>::new(7.73);
let km : Kilometers<f32> = m.convert_into();
assert_eq!(km.amount(), 0.00773);

let i : Meters<i32> = m.cast_into();
assert_eq!(i.amount(), 7);

有关更多功能和示例,请参阅 fts_units 文档

fts_vecmath

即将推出!

fts_intersect3d

即将推出!

许可证:Unlicense OR MIT

依赖项

~215–305KB