Crate emath

source ·
Expand description

Opinionated 2D math library for building GUIs.

Includes vectors, positions, rectangles etc.

Conventions (unless otherwise specified):

  • All angles are in radians
  • X+ is right and Y+ is down.
  • (0,0) is left top.
  • Dimension order is always x y

Integrating with other math libraries.

emath does not strive to become a general purpose or all-powerful math library.

For that, use something else (glam, nalgebra, …) and enable the mint feature flag in emath to enable implicit conversion to/from emath.

Feature flags




  • An assert that is only active when emath is compiled with the extra_asserts feature or with the extra_debug_asserts feature in debug builds.


  • This struct tracks recent values of some time series.
  • A position on screen.
  • Includive range of floats, i.e. min..=max, but more ergonomic than RangeInclusive.
  • A rectangular region of space.
  • Linearly transforms positions from one Rect to another.
  • Represents a rotation in the 2D plane. A rotation of 𝞃/4 = 90° rotates the X axis to the Y axis. Normally a Rot2 is normalized (unit-length). If not, it will also scale vectors.
  • A vector has a direction and length. A Vec2 is often used to represent a size.


  • Extends f32, Vec2 etc with at_least and at_most as aliases for max and min.
  • Implemented for all builtin numeric types
  • Helper trait to implement lerp and remap.
  • Helper trait to implement lerp and remap.