## Sdk vector math api documentation

Vector Math functions.

Namespace: `dmVMath`
Include: `#include <dmsdk/dlib/vmath.h>`
TYPES
Matrix3 3x3 matrix
Matrix4 4x4 matrix
Point3 3-tuple
Quat 4-tuple representing a rotation
Vector3 3-tuple
Vector4 4-tuple
FUNCTIONS
Matrix4 AppendScale(Matrix4 m, Vector3 v) post multiply scale
Vector3 Cross(Vector3 a, Vector3 b) cross product between two vectors
Vector3 DivPerElem(Vector3 a, Vector3 b) divide two vectors per element
Vector4 DivPerElem(Vector4 a, Vector4 b) divide two vectors per element
float Dot(Vector3 a, Vector3 b) dot product between two vectors
float Dot(Vector4 a, Vector4 b) dot product between two vectors
Matrix3 Inverse(Matrix3 m) inverse matrix
Matrix4 Inverse(Matrix4 m) inverse matrix
float Length(Vector3 v) calculate length of a vector
float Length(Vector3 v) calculate length of a vector
float Length(Quat v) calculate length of a quaternion
float Length(Vector3 v) calculate squared length of a vector
float Length(Vector4 v) calculate squared length of a vector
float Length(Quat v) calculate squared length of a quaternion
Vector3 Lerp(float t, Vector3 a, Vector3 b) linear interpolate between two vectors
Vector4 Lerp(float t, Vector4 a, Vector4 b) linear interpolate between two vectors
Vector3 MulPerElem(Vector3 a, Vector3 b) multiply two vectors per element
Vector4 MulPerElem(Vector4 a, Vector4 b) multiply two vectors per element
Vector3 MulPerElem(Vector3 v) abs value per element
Quat MulPerElem(Quat q) conjugate of quaternion
Vector3 Normalize(Vector3 v) normalize a vector to length 1
Vector4 Normalize(Vector4 v) normalize a vector to length 1
Quat Normalize(Quat v) normalize a quaternion to length 1
Matrix4 OrthoInverse(Matrix4 m) Compute the inverse of a 4x4 matrix, which is expe...
Vector3 Rotate(Quat q, Vector3 v) rotate vector using quaternion
Vector3 Slerp(float t, Vector3 a, Vector3 b) spherical linear interpolate between two vectors
Vector4 Slerp(float t, Vector4 a, Vector4 b) spherical linear interpolate between two vectors
Quat Slerp(float t, Quat a, Quat b) spherical linear interpolate between two vectors
Matrix3 Transpose(Matrix3 m) transpose matrix
Matrix4 Transpose(Matrix4 m) transpose matrix

## Functions

#### AppendScale

`Matrix4 AppendScale(Matrix4 m, Vector3 v)`

post multiply scale

PARAMETERS

 `Matrix4` `m` the matrix `Vector3` `v` the scale vector

RETURNS

 `Matrix4` the scaled vector

#### Cross

`Vector3 Cross(Vector3 a, Vector3 b)`

cross product between two vectors

PARAMETERS

 `Vector3` `a` the operand `Vector3` `b` the dividend

RETURNS

 `Vector3` the result vector

#### DivPerElem

`Vector3 DivPerElem(Vector3 a, Vector3 b)`

Divide two vectors per element: `Vector3(a.x/b.x, a.y/b.y, a.z/b.z)`

PARAMETERS

 `Vector3` `a` the operand `Vector3` `b` the dividend

RETURNS

 `Vector3` the result vector

#### DivPerElem

`Vector4 DivPerElem(Vector4 a, Vector4 b)`

Divide two vectors per element: `Vector3(a.x/b.x, a.y/b.y, a.z/b.z, a.w/b.w)`

PARAMETERS

 `Vector4` `a` the operand `Vector4` `b` the dividend

RETURNS

 `Vector4` the result vector

#### Dot

`float Dot(Vector3 a, Vector3 b)`

dot product between two vectors

PARAMETERS

 `Vector3` `a` the first vector `Vector3` `b` the second vector

RETURNS

 `float` the dot product

#### Dot

`float Dot(Vector4 a, Vector4 b)`

dot product between two vectors

PARAMETERS

 `Vector4` `a` the first vector `Vector4` `b` the second vector

RETURNS

 `float` the dot product

#### Inverse

`Matrix3 Inverse(Matrix3 m)`

inverse matrix

PARAMETERS

 `Matrix3` `m` the rotation

RETURNS

 `Matrix3` the transposed matrix

#### Inverse

`Matrix4 Inverse(Matrix4 m)`

inverse matrix

PARAMETERS

 `Matrix4` `m` the rotation

RETURNS

 `Matrix4` the transposed matrix

#### Length

`float Length(Vector3 v)`

calculate length of a vector

PARAMETERS

 `Vector3` `v` the vector

RETURNS

 `float` the length

#### Length

`float Length(Vector3 v)`

calculate length of a vector

PARAMETERS

 `Vector3` `v` the vector

RETURNS

 `float` the length

#### Length

`float Length(Quat v)`

calculate length of a quaternion

PARAMETERS

 `Quat` `v` the quaternion

RETURNS

 `float` the length

#### Length

`float Length(Vector3 v)`

calculate squared length of a vector

PARAMETERS

 `Vector3` `v` the vector

RETURNS

 `float` the squared length

#### Length

`float Length(Vector4 v)`

calculate squared length of a vector

PARAMETERS

 `Vector4` `v` the vector

RETURNS

 `float` the squared length

#### Length

`float Length(Quat v)`

calculate squared length of a quaternion

PARAMETERS

 `Quat` `v` the vector

RETURNS

 `float` the squared length

#### Lerp

`Vector3 Lerp(float t, Vector3 a, Vector3 b)`

linear interpolate between two vectors

PARAMETERS

 `float` `t` the unit time `Vector3` `a` the start vector (t == 0) `Vector3` `b` the end vector (t == 1)

RETURNS

 `Vector3` the result vector `v = a + (b - a) * t`

EXAMPLES

``````dmVMath::Vector3 v0 = dmVMath::Lerp(0.0f, a, b); // v0 == a
dmVMath::Vector3 v1 = dmVMath::Lerp(1.0f, a, b); // v1 == b
dmVMath::Vector3 v2 = dmVMath::Lerp(2.0f, a, b); // v2 == a + (b-a) * 2.0f
``````

#### Lerp

`Vector4 Lerp(float t, Vector4 a, Vector4 b)`

linear interpolate between two vectors

PARAMETERS

 `float` `t` the unit time `Vector4` `a` the start vector (t == 0) `Vector4` `b` the end vector (t == 1)

RETURNS

 `Vector4` the result vector `v = a + (b - a) * t`

EXAMPLES

``````dmVMath::Vector4 v0 = dmVMath::Lerp(0.0f, a, b); // v0 == a
dmVMath::Vector4 v1 = dmVMath::Lerp(1.0f, a, b); // v1 == b
dmVMath::Vector4 v2 = dmVMath::Lerp(2.0f, a, b); // v2 == a + (b-a) * 2.0f
``````

#### MulPerElem

`Vector3 MulPerElem(Vector3 a, Vector3 b)`

Multiply two vectors per element: `Vector3(a.x * b.x, a.y * b.y, a.z * b.z)`

PARAMETERS

 `Vector3` `a` the first vector `Vector3` `b` the second vector

RETURNS

 `Vector3` the result vector

#### MulPerElem

`Vector4 MulPerElem(Vector4 a, Vector4 b)`

Multiply two vectors per element: `Vector3(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w)`

PARAMETERS

 `Vector4` `a` the first vector `Vector4` `b` the second vector

RETURNS

 `Vector4` the result vector

#### MulPerElem

`Vector3 MulPerElem(Vector3 v)`

Return absolute value per element: `Vector3(abs(v.x), abs(v.y), abs(v.z))`

PARAMETERS

 `Vector3` `v` the vector

RETURNS

 `Vector3` the result vector

#### MulPerElem

`Quat MulPerElem(Quat q)`

Returns the conjugate of the quaternion: `conj = -q`

PARAMETERS

 `Quat` `q` the quaternions

RETURNS

 `Quat` the result

#### Normalize

`Vector3 Normalize(Vector3 v)`

normalize a vector to length 1

PARAMETERS

 `Vector3` `v` the vector

RETURNS

 `Vector3` the normalized vector

#### Normalize

`Vector4 Normalize(Vector4 v)`

normalize a vector to length 1

PARAMETERS

 `Vector4` `v` the vector

RETURNS

 `Vector4` the normalized vector

#### Normalize

`Quat Normalize(Quat v)`

normalize a quaternion to length 1

PARAMETERS

 `Quat` `v` the quaternion

RETURNS

 `Quat` the normalized quaternion

#### OrthoInverse

`Matrix4 OrthoInverse(Matrix4 m)`

Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix

PARAMETERS

 `Matrix4` `m` the rotation

RETURNS

 `Matrix4` the transposed matrix

#### Rotate

`Vector3 Rotate(Quat q, Vector3 v)`

rotate vector using quaternion

PARAMETERS

 `Quat` `q` the rotation `Vector3` `v` the vector

RETURNS

 `Vector3` the rotated vector

#### Slerp

`Vector3 Slerp(float t, Vector3 a, Vector3 b)`

spherical linear interpolate between two vectors

PARAMETERS

 `float` `t` the unit time `Vector3` `a` the start vector (t == 0) `Vector3` `b` the end vector (t == 1)

RETURNS

 `Vector3` the result vector

#### Slerp

`Vector4 Slerp(float t, Vector4 a, Vector4 b)`

spherical linear interpolate between two vectors

PARAMETERS

 `float` `t` the unit time `Vector4` `a` the start vector (t == 0) `Vector4` `b` the end vector (t == 1)

RETURNS

 `Vector4` the result vector

#### Slerp

`Quat Slerp(float t, Quat a, Quat b)`

Interpolates along the shortest path between two quaternions

PARAMETERS

 `float` `t` the unit time `Quat` `a` the start vector (t == 0) `Quat` `b` the end vector (t == 1)

RETURNS

 `Quat` the result vector

#### Transpose

`Matrix3 Transpose(Matrix3 m)`

transpose matrix

PARAMETERS

 `Matrix3` `m` the rotation

RETURNS

 `Matrix3` the transposed matrix

#### Transpose

`Matrix4 Transpose(Matrix4 m)`

transpose matrix

PARAMETERS

 `Matrix4` `m` the rotation

RETURNS

 `Matrix4` the transposed matrix

## Types

A 3x3 matrix

A 4x4 matrix

#### Point3

A 3-tuple (with 4-th element always set to 1)

#### Quat

A 4-tuple representing a rotation rotation. The `xyz` represents the axis, and the `w` represents the angle.

#### Vector3

A 3-tuple (with 4-th element always set to 0)

A 4-tuple