# [−][src]Crate euclid

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:

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 = TypedTransform3D<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)`

).

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

homogen | |

length |
A one-dimensional length, tagged with its units. |

macros | |

num |
A one-dimensional length, tagged with its units. |

point | |

rect | |

rotation | |

scale |
A type-checked scaling factor between units. |

side_offsets |
A group of side offsets, which correspond to top/left/bottom/right for borders, padding, and margins in CSS. |

size | |

transform2d | |

transform3d | |

trig | |

vector |

## Structs

Angle |
An angle in radians |

BoolVector2D | |

BoolVector3D | |

HomogeneousVector |
Homogeneous vector in 3D space. |

Length |
A one-dimensional distance, with value represented by |

Radians |
An angle in radians |

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. |

TypedRotation2D |
A transform that can represent rotations in 2d, represented as an angle in radians. |

TypedRotation3D |
A transform that can represent rotations in 3d, represented as a quaternion. |

TypedScale |
A scaling factor between two different units of measurement. |

TypedSideOffsets2D | |

TypedSize2D | |

TypedTransform2D |
A 2d transform stored as a 3 by 2 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

bvec2 | |

bvec3 | |

point2 | |

point3 | |

rect |
Shorthand for |

size2 |
Shorthand for |

vec2 |
Convenience constructor. |

vec3 |
Convenience constructor. |

## Type Definitions

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. |

Rect |
The default rectangle type with no unit. |

Rotation2D |
The default 2d rotation type with no units. |

Rotation3D |
The default 3d rotation type with no units. |

ScaleFactor |
[ Deprecated ] Temporary alias to facilitate the transition to the new naming scheme |

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 3d 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. |