# fts_gamemath [![Crate](https://img.shields.io/crates/v/fts_gamemath.svg)](https://crates.io/crates/fts_gamemath) [![API](https://docs.rs/fts_gamemath/badge.svg)](https://docs.rs/fts_gamemath) [![Build Status](https://travis-ci.org/forrestthewoods/fts_gamemath.svg?branch=master)](https://travis-ci.org/forrestthewoods/fts_gamemath) ![Crates.io](https://img.shields.io/crates/l/fts_gamemath.svg) fts_gamemath is a collection of Rust crates that provide basic building blocks for 3d video game math ## fts_units fts_units is a Rust library that enables compile-time type-safe mathematical operations using units of measurement. ```no_compile 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 ``` This easily extends into complex operations. ```rust use fts_units::si_system::quantities::*; fn calc_ballistic_range(speed: MetersPerSecond, gravity: MetersPerSecond2, initial_height: Meters) -> Meters { let d2r = 0.01745329252; let angle : f32 = 45.0 * d2r; let cos = Dimensionless::::new(angle.cos()); let sin = Dimensionless::::new(angle.sin()); let range = (speed*cos/gravity) * (speed*sin + (speed*speed*sin*sin + Dimensionless::::new(2.0)*gravity*initial_height).sqrt()); range } ``` You can convert between units and cast between types. ```rust let m = Meters::::new(7.73); let km : Kilometers = m.convert_into(); assert_eq!(km.amount(), 0.00773); let i : Meters = m.cast_into(); assert_eq!(i.amount(), 7); ``` For additional features and examples refer to the [fts_units documentation](https://docs.rs/fts_units/). ## fts_vecmath Coming soon! ## fts_intersect3d Coming soon! License: Unlicense OR MIT