# Matrix¶

Properties:

Methods:

struct Leap::Matrix

The Matrix struct represents a transformation matrix.

To use this struct to transform a Vector, construct a matrix containing the desired transformation and then use the Matrix::transformPoint() or Matrix::transformDirection() functions to apply the transform.

Transforms can be combined by multiplying two or more transform matrices using the * operator.

Since
1.0

Public Functions

Matrix()

Constructs an identity transformation matrix.

Matrix identity = Matrix();


Since
1.0

Matrix(const Matrix & other)

Constructs a copy of the specified Matrix object.

Matrix thisMatrix = Matrix(thatMatrix);


Since
1.0

Matrix(const Vector & _xBasis, const Vector & _yBasis, const Vector & _zBasis)

Constructs a transformation matrix from the specified basis vectors.

Vector xBasis = Vector(23, 0, 0);
Vector yBasis = Vector(0, 12, 0);
Vector zBasis = Vector(0, 0, 45);
Matrix transformMatrix = Matrix(xBasis, yBasis, zBasis);


Since
1.0
Parameters
• _xBasis -

A Vector specifying rotation and scale factors for the x-axis.

• _yBasis -

A Vector specifying rotation and scale factors for the y-axis.

• _zBasis -

A Vector specifying rotation and scale factors for the z-axis.

Matrix(const Vector & _xBasis, const Vector & _yBasis, const Vector & _zBasis, const Vector & _origin)

Constructs a transformation matrix from the specified basis and translation vectors.

Hand leapHand = frame.hand(handID);
Vector handXBasis = leapHand.basis().xBasis;
Vector handYBasis = leapHand.basis().yBasis;
Vector handZBasis = leapHand.basis().zBasis;
Vector handOrigin = leapHand.palmPosition();
Matrix handTransform = Matrix(handXBasis, handYBasis, handZBasis, handOrigin);


Since
1.0
Parameters
• _xBasis -

A Vector specifying rotation and scale factors for the x-axis.

• _yBasis -

A Vector specifying rotation and scale factors for the y-axis.

• _zBasis -

A Vector specifying rotation and scale factors for the z-axis.

• _origin -

A Vector specifying translation factors on all three axes.

Matrix(const Vector & axis, float angleRadians)

Constructs a transformation matrix specifying a rotation around the specified vector.

Vector axisOfRotation = leapHand.direction();
float angleOfRotation = 1.27;
Matrix rotator = Matrix(axisOfRotation, angleOfRotation);


Since
1.0
Parameters
• axis -

A Vector specifying the axis of rotation.

The amount of rotation in radians.

Matrix(const Vector & axis, float angleRadians, const Vector & translation)

Constructs a transformation matrix specifying a rotation around the specified vector and a translation by the specified vector.

Vector rotationAxis = Vector::yAxis();
float angle = .733;
Vector translation = Vector(10,220,103);
Matrix transform = Matrix(rotationAxis, angle, translation);


Since
1.0
Parameters
• axis -

A Vector specifying the axis of rotation.

The angle of rotation in radians.

• translation -

A Vector representing the translation part of the transform.

bool operator!=(const Matrix & other)

Compare Matrix inequality component-wise.

thisMatrix != thatMatrix;


Since
1.0

Matrix operator*(const Matrix & other)

Multiply transform matrices.

Combines two transformations into a single equivalent transformation.

thisMatrix * thatMatrix;


Return
A new Matrix representing the transformation equivalent to applying the other transformation followed by this transformation.
Since
1.0
Parameters
• other -

A Matrix to multiply on the right hand side.

Matrix & operator*=(const Matrix & other)

Multiply transform matrices and assign the product.

thisMatrix *= thatMatrix;


Since
1.0

bool operator==(const Matrix & other)

Compare Matrix equality component-wise.

thisMatrix == thatMatrix;


Since
1.0

Matrix rigidInverse()

Performs a matrix inverse if the matrix consists entirely of rigid transformations (translations and rotations).

If the matrix is not rigid, this operation will not represent an inverse.

thisMatrix = thatMatrix.rigidInverse();


Note that all matrices that are directly returned by the API are rigid.

Return
The rigid inverse of the matrix.
Since
1.0

void setRotation(const Vector & axis, float angleRadians)

Sets this transformation matrix to represent a rotation around the specified vector.

thisMatrix.setRotation(Vector::zAxis(), 1.46);


This function erases any previous rotation and scale transforms applied to this matrix, but does not affect translation.

Since
1.0
Parameters
• axis -

A Vector specifying the axis of rotation.

The amount of rotation in radians.

template < typename T >
T * toArray3x3(T * output)

Writes the 3x3 Matrix object to a 9 element row-major float or double array.

Translation factors are discarded.

Returns a pointer to the same data.

Since
1.0

FloatArray toArray3x3()

Convert a 3x3 Matrix object to a 9 element row-major float array.

Translation factors are discarded.

FloatArray rotations = thisMatrix.toArray3x3();


Returns a FloatArray struct to avoid dynamic memory allocation.

Since
1.0

template < typename T >
T * toArray4x4(T * output)

Writes the 4x4 Matrix object to a 16 element row-major float or double array.

Returns a pointer to the same data.

Since
1.0

FloatArray toArray4x4()

Convert a 4x4 Matrix object to a 16 element row-major float array.

FloatArray transforms = thisMatrix.toArray4x4();


Returns a FloatArray struct to avoid dynamic memory allocation.

Since
1.0

template < typename Matrix3x3Type >
const Matrix3x3Type toMatrix3x3()

Convert a Leap::Matrix object to another 3x3 matrix type.

The new type must define a constructor function that takes each matrix element as a parameter in row-major order.

Translation factors are discarded.

Since
1.0

template < typename Matrix4x4Type >
const Matrix4x4Type toMatrix4x4()

Convert a Leap::Matrix object to another 4x4 matrix type.

The new type must define a constructor function that takes each matrix element as a parameter in row-major order.

Since
1.0

std::string toString()

Write the matrix to a string in a human readable format.

Since
1.0

Vector transformDirection(const Vector & in)

Transforms a vector with this matrix by transforming its rotation and scale only.

Vector newDirection = thisMatrix.transformDirection(oldDirection);


Return
A new Vector representing the transformed original.
Since
1.0
Parameters
• in -

The Vector to transform.

Vector transformPoint(const Vector & in)

Transforms a vector with this matrix by transforming its rotation, scale, and translation.

Vector newPosition = thisMatrix.transformPoint(oldPosition);


Translation is applied after rotation and scale.

Return
A new Vector representing the transformed original.
Since
1.0
Parameters
• in -

The Vector to transform.

Public Members

Vector origin

The translation factors for all three axes.

Vector thisTranslation = thisMatrix.origin;


Since
1.0

Vector xBasis

The basis vector for the x-axis.

Vector xTransform = thisMatrix.xBasis;


Since
1.0

Vector yBasis

The basis vector for the y-axis.

Vector yTransform = thisMatrix.yBasis;


Since
1.0

Vector zBasis

The basis vector for the z-axis.

Vector zTransform = thisMatrix.zBasis;


Since
1.0

Public Static Functions

const Matrix & identity()

Returns the identity matrix specifying no translation, rotation, and scale.

Matrix identity = Matrix::identity();


Return
The identity matrix.
Since
1.0