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
Modules
One- and two-dimensional alignment (
Align::Center
, Align2::LEFT_TOP
etc).Find “simple” numbers is some range. Used by sliders.
Macros
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.Structs
Two-dimension alignment, e.g.
Align2::LEFT_TOP
.A position on screen.
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.Enums
left/center/right or top/center/bottom alignment for e.g. anchors and layouts.
Traits
Implemented for all builtin numeric types
Functions
Return true when arguments are the same within some rounding error.
Calculate a lerp-factor for exponential smoothing using a time step.
Linear interpolation.
Wrap angle to
[-PI, PI]
range.pos2(x, y) == Pos2::new(x, y)
Linearly remap a value from one range to another,
so that when
x == from.start()
returns to.start()
and when x == from.end()
returns to.end()
.Like
remap
, but also clamps the value so that the returned value is always in the to
range.Round a value to the given number of decimal places.
vec2(x, y) == Vec2::new(x, y)