# [−][src]Crate cgmath

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 traits all at once. For example:

`use cgmath::prelude::*;`

## Re-exports

 `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

 abs_diff_eq Approximate equality of using the absolute difference. abs_diff_ne Approximate inequality of using the absolute difference. assert_abs_diff_eq An assertion that delegates to `abs_diff_eq!`, and panics with a helpful error on failure. assert_abs_diff_ne An assertion that delegates to `abs_diff_ne!`, and panics with a helpful error on failure. assert_relative_eq An assertion that delegates to `relative_eq!`, and panics with a helpful error on failure. assert_relative_ne An assertion that delegates to `relative_ne!`, and panics with a helpful error on failure. assert_ulps_eq An assertion that delegates to `ulps_eq!`, and panics with a helpful error on failure. assert_ulps_ne An assertion that delegates to `ulps_ne!`, and panics with a helpful error on failure. relative_eq Approximate equality using both the absolute difference and relative based comparisons. relative_ne Approximate inequality using both the absolute difference and relative based comparisons. ulps_eq Approximate equality using both the absolute difference and ULPs (Units in Last Place). ulps_ne Approximate inequality using both the absolute difference and ULPs (Units in Last Place).

## Structs

 AbsDiff The requisite parameters for testing for approximate equality using a absolute difference based comparison. 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. Relative The requisite parameters for testing for approximate equality using a relative based comparison. Ulps The requisite parameters for testing for approximate equality using an ULPs based comparison. Vector1 A 1-dimensional vector. Vector2 A 2-dimensional vector. Vector3 A 3-dimensional vector. Vector4 A 4-dimensional vector.

## Traits

 AbsDiffEq Equality that is defined using the absolute difference of two numbers. Angle Angles and their associated trigonometric functions. Array An array containing elements of type `Element` BaseFloat Base floating point types BaseNum Base numeric types with partial ordering Bounded Numbers which have upper and lower bounds 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`. RelativeEq Equality comparisons between two numbers using both the absolute difference and relative based comparisons. 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 UlpsEq Equality comparisons between two numbers using both the absolute difference and ULPs (Units in Last Place) based comparisons. 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 frustum. ortho Create an orthographic projection matrix. perspective Create a perspective projection matrix. point1 The short constructor. point2 The short constructor. point3 The short constructor. vec1 The short constructor. vec2 The short constructor. vec3 The short constructor. vec4 The short constructor.