88 releases

0.22.11 Aug 28, 2024
0.22.10 May 21, 2024
0.22.9 Mar 25, 2023
0.22.7 Apr 4, 2022
0.1.5 Jul 23, 2015

#11 in Math

Download history 59954/week @ 2024-08-02 77550/week @ 2024-08-09 63800/week @ 2024-08-16 76952/week @ 2024-08-23 86258/week @ 2024-08-30 69800/week @ 2024-09-06 64954/week @ 2024-09-13 74310/week @ 2024-09-20 76303/week @ 2024-09-27 76442/week @ 2024-10-04 71520/week @ 2024-10-11 71960/week @ 2024-10-18 70482/week @ 2024-10-25 73926/week @ 2024-11-01 61269/week @ 2024-11-08 59927/week @ 2024-11-15

277,706 downloads per month
Used in 1,260 crates (152 directly)

MIT/Apache

500KB
12K SLoC

euclid

This is a small library for geometric types with a focus on 2d graphics and layout.


lib.rs:

A collection of strongly typed math tools for computer graphics with an inclination towards 2d graphics and layout.

All types are generic over the scalar type of their component (f32, i32, etc.), and tagged with a generic Unit parameter which is useful to prevent mixing values from different spaces. For example it should not be legal to translate a screen-space position by a world-space vector and this can be expressed using the generic Unit parameter.

This unit system is not mandatory and all structures have an alias with the default unit: UnknownUnit. for example default::Point2D<T> is equivalent to Point2D<T, UnknownUnit>. Client code typically creates a set of aliases for each type and doesn't need to deal with the specifics of typed units further. For example:

use euclid::*;
pub struct ScreenSpace;
pub type ScreenPoint = Point2D<f32, ScreenSpace>;
pub type ScreenSize = Size2D<f32, ScreenSpace>;
pub struct WorldSpace;
pub type WorldPoint = Point3D<f32, WorldSpace>;
pub type ProjectionMatrix = Transform3D<f32, WorldSpace, ScreenSpace>;
// etc...

All euclid types are marked #[repr(C)] in order to facilitate exposing them to foreign function interfaces (provided the underlying scalar type is also repr(C)).

A set of aliases for all types, tagged with the default unknown unit.

Dependencies

~93–435KB