Crate euclid [−] [src]
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 Typed* structures have an alias
with the default unit: UnknownUnit
.
for example Point2D<T>
is equivalent to TypedPoint2D<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:
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)
).
use euclid::*; pub struct ScreenSpace; pub type ScreenPoint = TypedPoint2D<f32, ScreenSpace>; pub type ScreenSize = TypedSize2D<f32, ScreenSpace>; pub struct WorldSpace; pub type WorldPoint = TypedPoint3D<f32, WorldSpace>; pub type ProjectionMatrix = TypedMatrix4D<f32, WorldSpace, ScreenSpace>; // etc...
Components are accessed in their scalar form by default for convenience, and most
types additionally implement strongly typed accessors which return typed Length
wrappers.
For example:
let p = WorldPoint::new(0.0, 1.0, 1.0); // p.x is an f32. println!("p.x = {:?} ", p.x); // p.x is a Length<f32, WorldSpace>. println!("p.x_typed() = {:?} ", p.x_typed()); // Length::get returns the scalar value (f32). assert_eq!(p.x, p.x_typed().get());
Modules
approxeq | |
num |
A one-dimensional length, tagged with its units. |
Structs
Deg |
Unit for angles in degrees. |
Length |
A one-dimensional distance, with value represented by |
Rad |
Unit for angles in radians. |
ScaleFactor |
A scaling factor between two different units of measurement. |
TypedPoint2D |
A 2d Point tagged with a unit. |
TypedPoint3D |
A 3d Point tagged with a unit. |
TypedRect |
A 2d Rectangle optionally tagged with a unit. |
TypedSideOffsets2D | |
TypedSize2D | |
TypedTransform2D |
A 2d transform stored as a 2 by 3 matrix in row-major order in memory. |
TypedTransform3D |
A 3d transform stored as a 4 by 4 matrix in row-major order in memory. |
TypedVector2D |
A 2d Vector tagged with a unit. |
TypedVector3D |
A 3d Vector tagged with a unit. |
UnknownUnit |
The default unit. |
Traits
Trig |
Trait for basic trigonometry functions, so they can be used on generic numeric types |
Functions
point2 | |
point3 | |
rect |
Shorthand for |
size2 |
Shorthand for |
vec2 |
Convenience constructor. |
vec3 |
Convenience constructor. |
Type Definitions
Degrees |
A value in Degrees. |
Matrix2D |
[ Deprecated ] Temporary alias to facilitate the transition to the new naming scheme |
Matrix4D |
[ Deprecated ] Temporary alias to facilitate the transition to the new naming scheme |
Point2D |
Default 2d point type with no unit. |
Point3D |
Default 3d point type with no unit. |
Radians |
A value in radians. |
Rect |
The default rectangle type with no unit. |
SideOffsets2D |
The default side offset type with no unit. |
Size2D |
Default 2d size type with no unit. |
Transform2D |
The default 2d transform type with no units. |
Transform3D |
The default 4d transform type with no units. |
TypedMatrix2D |
[ Deprecated ] Temporary alias to facilitate the transition to the new naming scheme |
TypedMatrix4D |
[ Deprecated ] Temporary alias to facilitate the transition to the new naming scheme |
Vector2D |
Default 2d vector type with no unit. |
Vector3D |
Default 3d vector type with no unit. |