# Crate emath[−][src]

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`

## Re-exports

 `pub use align::Align;` `pub use align::Align2;`

## Modules

 align One- and two-dimensional alignment (`Align::Center`, `Align2::LEFT_TOP` etc). smart_aim Find “simple” numbers is some range. Used by sliders.

## Structs

 Pos2 A position on screen. Rect A rectangular region of space. RectTransform Linearly transforms positions from one `Rect` to another. Rot2 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. Vec2 A vector has a direction and length. A `Vec2` is often used to represent a size.

## Traits

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

## Functions

 almost_equal Return true when arguments are the same within some rounding error. clamp DeprecatedReturns `range.start()` if `x <= range.start()`, returns `range.end()` if `x >= range.end()` and returns `x` elsewhen. format_with_decimals_in_range format_with_minimum_decimals lerp Linear interpolation. pos2 `pos2(x,y) == Pos2::new(x, y)` remap 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()`. remap_clamp Like `remap`, but also clamps the value so that the returned value is always in the `to` range. round_to_decimals Round a value to the given number of decimal places. vec2 `vec2(x,y) == Vec2::new(x, y)`