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.

clampDeprecated

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)