# Crate cgmath [−] [src]

A low-dimensional linear algebra library, targeted at computer graphics.

# Trait overview

In order to make a clean, composable API, we divide operations into traits that are roughly based on mathematical properties. The main ones that we concern ourselves with are listed below:

• `VectorSpace`: Specifies the main operators for vectors, quaternions, and matrices.
• `MetricSpace`: For types that have a distance function implemented.
• `InnerSpace`: For types that have a dot (or inner) product - ie. vectors or quaternions. This also allows for the definition of operations that are based on the dot product, like finding the magnitude or normalizing.
• `EuclideanSpace`: Points in euclidean space, with an associated space of displacement vectors.
• `Matrix`: Common operations for matrices of arbitrary dimensions.
• `SquareMatrix`: A special trait for matrices where the number of columns equal the number of rows.

Other traits are included for practical convenience, for example:

• `Array`: For contiguous, indexable arrays of elements, specifically vectors.
• `ElementWise`: For element-wise addition, subtraction, multiplication, division, and remainder operations.

# The prelude

Importing each trait individually can become a chore, so we provide a `prelude` module to allow you to import the main trait all at once. For example:

`use cgmath::prelude::*;`

## Reexports

 `pub extern crate num_traits;`

## Modules

 conv Constrained conversion functions for assisting in situations where type inference is difficult. prelude This module contains the most common traits used in `cgmath`. By glob-importing this module, you can avoid the need to import each trait individually, while still being selective about what types you import.

## Macros

 assert_approx_eq! assert_approx_eq_eps!

## Structs

 Basis2 A two-dimensional rotation matrix. Basis3 A three-dimensional rotation matrix. Decomposed A generic transformation consisting of a rotation, displacement vector and scale amount. Deg An angle, in degrees. Euler A set of Euler angles representing a rotation in three-dimensional space. Matrix2 A 2 x 2, column major matrix Matrix3 A 3 x 3, column major matrix Matrix4 A 4 x 4, column major matrix Ortho An orthographic projection with arbitrary left/right/bottom/top distances Perspective A perspective projection with arbitrary left/right/bottom/top distances PerspectiveFov A perspective projection based on a vertical field-of-view angle. Point1 A point in 1-dimensional space. Point2 A point in 2-dimensional space. Point3 A point in 3-dimensional space. Quaternion A quaternion in scalar/vector form. Rad An angle, in radians. Vector1 A 1-dimensional vector. Vector2 A 2-dimensional vector. Vector3 A 3-dimensional vector. Vector4 A 4-dimensional vector.

## Traits

 Angle Angles and their associated trigonometric functions. ApproxEq Array An array containing elements of type `Element` BaseFloat Base floating point types BaseInt Base integer types BaseNum Base numeric types with partial ordering ElementWise Element-wise arithmetic operations. These are supplied for pragmatic reasons, but will usually fall outside of traditional algebraic properties. EuclideanSpace Points in a Euclidean space with an associated space of displacement vectors. InnerSpace Vectors that also have a dot (or inner) product. Matrix A column-major matrix of arbitrary dimensions. MetricSpace A type with a distance function between values. One Defines a multiplicative identity element for `Self`. PartialOrd A trait providing a partial ordering. Rotation A trait for a generic rotation. A rotation is a transformation that creates a circular motion, and preserves at least one point in the space. Rotation2 A two-dimensional rotation. Rotation3 A three-dimensional rotation. SquareMatrix A column-major major matrix where the rows and column vectors are of the same dimensions. Transform A trait representing an affine transformation that can be applied to points or vectors. An affine transformation is one which Transform2 Transform3 VectorSpace Vectors that can be added together and multiplied by scalars. Zero Defines an additive identity element for `Self`.

## Functions

 dot Dot product of two vectors. frustum Create a perspective matrix from a view frustrum. ortho Create an orthographic projection matrix. perspective Create a perspective projection matrix. vec1 The short constructor. vec2 The short constructor. vec3 The short constructor. vec4 The short constructor.