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.

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.

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

Returns 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)