maspack.matrix
Class Matrix6d

java.lang.Object
  extended by maspack.matrix.MatrixBase
      extended by maspack.matrix.DenseMatrixBase
          extended by maspack.matrix.Matrix6dBase
              extended by maspack.matrix.Matrix6d
All Implemented Interfaces:
java.lang.Cloneable, DenseMatrix, LinearTransformNd, Matrix, Clonable
Direct Known Subclasses:
Matrix6dBlock

public class Matrix6d
extends Matrix6dBase

A general 4 x 4 matrix with the elements stored as explicit fields.


Nested Class Summary
 
Nested classes/interfaces inherited from interface maspack.matrix.Matrix
Matrix.Partition, Matrix.WriteFormat
 
Field Summary
static Matrix6d ZERO
          Global zero matrix.
 
Fields inherited from class maspack.matrix.Matrix6dBase
m00, m01, m02, m03, m04, m05, m10, m11, m12, m13, m14, m15, m20, m21, m22, m23, m24, m25, m30, m31, m32, m33, m34, m35, m40, m41, m42, m43, m44, m45, m50, m51, m52, m53, m54, m55
 
Fields inherited from interface maspack.matrix.Matrix
INDEFINITE, POSITIVE_DEFINITE, SPD, SYMMETRIC
 
Constructor Summary
Matrix6d()
          Creates a matrix and initializes it to zero.
Matrix6d(double[] vals)
          Creates a matrix and initializes its elements from an array of values.
Matrix6d(Matrix M)
          Creates a matrix and initializes its elements to those of the matrix M.
 
Method Summary
 void add(Matrix6dBase M1)
          Adds this matrix to M1 and places the result in this matrix.
 void add(Matrix6dBase M1, Matrix6dBase M2)
          Adds matrix M1 to M2 and places the result in this matrix.
 void addSubMatrix00(Matrix3dBase M)
          Adds to 3x3 sub-matrix of this matrix starting at (0, 0).
 void addSubMatrix03(Matrix3dBase M)
          Adds to the 3x3 sub-matrix of this matrix starting at (0, 3).
 void addSubMatrix30(Matrix3dBase M)
          Adds to the 3x3 sub-matrix of this matrix starting at (3, 0).
 void addSubMatrix33(Matrix3dBase M)
          Adds to the 3x3 sub-matrix of this matrix starting at (3, 3).
 void getSubMatrix00(Matrix3dBase M)
          Gets the 3x3 sub-matrix of this matrix starting at (0, 0).
 void getSubMatrix03(Matrix3dBase M)
          Gets the 3x3 sub-matrix of this matrix starting at (0, 3).
 void getSubMatrix30(Matrix3dBase M)
          Gets the 3x3 sub-matrix of this matrix starting at (3, 0).
 void getSubMatrix33(Matrix3dBase M)
          Gets the 3x3 sub-matrix of this matrix starting at (3, 3).
 void inverseTransform(RotationMatrix3d R)
          Applies an inverse rotational transformation R to this matrix, in place.
 void inverseTransform(RotationMatrix3d R, Matrix6d M1)
          Applies an inverse rotational transformation R to a matrix M1 and place the result in this matrix.
 boolean invert(Matrix6dBase M)
          Inverts the matrix M and places the result in this matrix, return false if M is detected to be singular.
 void mul(Matrix6dBase M1)
          Multiplies this matrix by M1 and places the result in this matrix.
 void mul(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies matrix M1 by M2 and places the result in this matrix.
 boolean mulInverse(Matrix6dBase M1)
          Multiplies this matrix by the inverse of M1 and places the result in this matrix.
 boolean mulInverseBoth(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies the inverse of matrix M1 by the inverse of M2 and places the result in this matrix.
 boolean mulInverseLeft(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies the inverse of matrix M1 by M2 and places the result in this matrix.
 boolean mulInverseRight(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies matrix M1 by the inverse of M2 and places the result in this matrix.
 void mulTranspose(Matrix6dBase M1)
          Multiplies this matrix by the transpose of M1 and places the result in this matrix.
 void mulTransposeBoth(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies the transpose of matrix M1 by the transpose of M2 and places the result in this matrix.
 void mulTransposeLeft(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies the transpose of matrix M1 by M2 and places the result in this matrix.
 void mulTransposeRight(Matrix6dBase M1, Matrix6dBase M2)
          Multiplies matrix M1 by the transpose of M2 and places the result in this matrix.
 void negate(Matrix6dBase M1)
          Sets this matrix to the negative of M1.
 void scale(double s)
          Scales the elements of this matrix by s.
 void scale(double s, Matrix6dBase M1)
          Scales the elements of matrix M1 by s and places the results in this matrix.
 void setDiagonal(double[] vals)
          Sets this matrix to a diagonal matrix whose values are specified by the array vals.
 void setDiagonal(VectorNd diag)
           
 void setLowerToUpper()
          Makes this matrix symmetric by setting its lower triangular elements equal to the corresponding upper triangular elements.
 void setRandom()
          Sets the elements of this matrix to uniformly distributed random values in the range -0.5 (inclusive) to 0.5 (exclusive).
 void setRandom(double lower, double upper)
          Sets the elements of this matrix to uniformly distributed random values in a specified range.
 void setRandom(double lower, double upper, java.util.Random generator)
          Sets the elements of this matrix to uniformly distributed random values in a specified range, using a supplied random number generator.
 void setSubMatrix00(Matrix3dBase M)
          Sets the 3x3 sub-matrix of this matrix starting at (0, 0).
 void setSubMatrix03(Matrix3dBase M)
          Sets the 3x3 sub-matrix of this matrix starting at (0, 3).
 void setSubMatrix30(Matrix3dBase M)
          Sets the 3x3 sub-matrix of this matrix starting at (3, 0).
 void setSubMatrix33(Matrix3dBase M)
          Sets the 3x3 sub-matrix of this matrix starting at (3, 3).
 void setZero()
          Sets the elements of this matrix to zero.
 void sub(Matrix6dBase M1)
          Subtracts this matrix from M1 and places the result in this matrix.
 void sub(Matrix6dBase M1, Matrix6dBase M2)
          Subtracts matrix M1 from M2 and places the result in this matrix.
 void transform(RotationMatrix3d R)
          Applies a rotational transformation R to this matrix, in place.
 void transform(RotationMatrix3d R, Matrix6d M1)
          Applies a rotational transformation R to M1 and place the result in this matrix.
 void transpose(Matrix6dBase M1)
          Takes the transpose of matrix M1 and places the result in this matrix.
 
Methods inherited from class maspack.matrix.Matrix6dBase
clone, colSize, determinant, epsilonEquals, equals, frobeniusNorm, get, get, get, getColumn, getColumn, getRow, getRow, infinityNorm, invert, mul, mul, mulInverse, mulInverse, mulInverseTranspose, mulInverseTranspose, mulTranspose, mulTranspose, negate, oneNorm, rowSize, scaledAdd, set, set, set, set, setColumn, setIdentity, setRow, transpose
 
Methods inherited from class maspack.matrix.DenseMatrixBase
add, checkConsistency, set, set, set, setCCSValues, setColumn, setCRSValues, setRow, setSubMatrix
 
Methods inherited from class maspack.matrix.MatrixBase
containsNaN, epsilonEquals, equals, get, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getDefaultFormat, getRow, getSize, getSubMatrix, hasNaN, idString, isFixedSize, isSymmetric, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, scan, setCRSValues, setDefaultFormat, setSize, toString, toString, toString, trace, write, write, write, write, write, writeToFile
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface maspack.matrix.Matrix
epsilonEquals, equals, getCCSIndices, getCCSIndices, getCCSValues, getCCSValues, getColumn, getCRSIndices, getCRSIndices, getCRSValues, getCRSValues, getRow, getSize, getSubMatrix, isFixedSize, isSymmetric, mul, mul, mulAdd, mulAdd, mulAdd, mulTranspose, mulTranspose, mulTransposeAdd, mulTransposeAdd, mulTransposeAdd, numNonZeroVals, numNonZeroVals, scan, setSize, toString, trace, write, write, write
 

Field Detail

ZERO

public static final Matrix6d ZERO
Global zero matrix. Should not be modified.

Constructor Detail

Matrix6d

public Matrix6d()
Creates a matrix and initializes it to zero.


Matrix6d

public Matrix6d(double[] vals)
Creates a matrix and initializes its elements from an array of values.

Parameters:
vals - element values for the matrix, with element (i,j) stored at location i*4+j

Matrix6d

public Matrix6d(Matrix M)
Creates a matrix and initializes its elements to those of the matrix M.

Parameters:
M - matrix object to be copied.
Method Detail

getSubMatrix00

public void getSubMatrix00(Matrix3dBase M)
Gets the 3x3 sub-matrix of this matrix starting at (0, 0).

Parameters:
M - returns the sub matrix

getSubMatrix30

public void getSubMatrix30(Matrix3dBase M)
Gets the 3x3 sub-matrix of this matrix starting at (3, 0).

Parameters:
M - returns the sub matrix

getSubMatrix03

public void getSubMatrix03(Matrix3dBase M)
Gets the 3x3 sub-matrix of this matrix starting at (0, 3).

Parameters:
M - returns the sub matrix

getSubMatrix33

public void getSubMatrix33(Matrix3dBase M)
Gets the 3x3 sub-matrix of this matrix starting at (3, 3).

Parameters:
M - returns the sub matrix

setSubMatrix00

public void setSubMatrix00(Matrix3dBase M)
Sets the 3x3 sub-matrix of this matrix starting at (0, 0).

Parameters:
M - new sub matrix value

setSubMatrix30

public void setSubMatrix30(Matrix3dBase M)
Sets the 3x3 sub-matrix of this matrix starting at (3, 0).

Parameters:
M - new sub matrix value

setSubMatrix03

public void setSubMatrix03(Matrix3dBase M)
Sets the 3x3 sub-matrix of this matrix starting at (0, 3).

Parameters:
M - new sub matrix value

setSubMatrix33

public void setSubMatrix33(Matrix3dBase M)
Sets the 3x3 sub-matrix of this matrix starting at (3, 3).

Parameters:
M - new sub matrix value

addSubMatrix00

public void addSubMatrix00(Matrix3dBase M)
Adds to 3x3 sub-matrix of this matrix starting at (0, 0).

Parameters:
M - sub matrix to add

addSubMatrix30

public void addSubMatrix30(Matrix3dBase M)
Adds to the 3x3 sub-matrix of this matrix starting at (3, 0).

Parameters:
M - sub matrix to add

addSubMatrix03

public void addSubMatrix03(Matrix3dBase M)
Adds to the 3x3 sub-matrix of this matrix starting at (0, 3).

Parameters:
M - sub matrix to add

addSubMatrix33

public void addSubMatrix33(Matrix3dBase M)
Adds to the 3x3 sub-matrix of this matrix starting at (3, 3).

Parameters:
M - sub matrix to add

mul

public void mul(Matrix6dBase M1)
Multiplies this matrix by M1 and places the result in this matrix.

Parameters:
M1 - right-hand matrix

mul

public void mul(Matrix6dBase M1,
                Matrix6dBase M2)
Multiplies matrix M1 by M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

mulTranspose

public void mulTranspose(Matrix6dBase M1)
Multiplies this matrix by the transpose of M1 and places the result in this matrix.

Parameters:
M1 - right-hand matrix

mulTransposeLeft

public void mulTransposeLeft(Matrix6dBase M1,
                             Matrix6dBase M2)
Multiplies the transpose of matrix M1 by M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

mulTransposeRight

public void mulTransposeRight(Matrix6dBase M1,
                              Matrix6dBase M2)
Multiplies matrix M1 by the transpose of M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

mulTransposeBoth

public void mulTransposeBoth(Matrix6dBase M1,
                             Matrix6dBase M2)
Multiplies the transpose of matrix M1 by the transpose of M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

mulInverse

public boolean mulInverse(Matrix6dBase M1)
Multiplies this matrix by the inverse of M1 and places the result in this matrix.

Parameters:
M1 - right-hand matrix
Returns:
false if M1 is singular

mulInverseRight

public boolean mulInverseRight(Matrix6dBase M1,
                               Matrix6dBase M2)
Multiplies matrix M1 by the inverse of M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix
Returns:
false if M2 is singular

mulInverseLeft

public boolean mulInverseLeft(Matrix6dBase M1,
                              Matrix6dBase M2)
Multiplies the inverse of matrix M1 by M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix
Returns:
false if M1 is singular

mulInverseBoth

public boolean mulInverseBoth(Matrix6dBase M1,
                              Matrix6dBase M2)
Multiplies the inverse of matrix M1 by the inverse of M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix
Returns:
false if M1 or M2 is singular

add

public void add(Matrix6dBase M1,
                Matrix6dBase M2)
Adds matrix M1 to M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

add

public void add(Matrix6dBase M1)
Adds this matrix to M1 and places the result in this matrix.

Parameters:
M1 - right-hand matrix

sub

public void sub(Matrix6dBase M1,
                Matrix6dBase M2)
Subtracts matrix M1 from M2 and places the result in this matrix.

Parameters:
M1 - left-hand matrix
M2 - right-hand matrix

sub

public void sub(Matrix6dBase M1)
Subtracts this matrix from M1 and places the result in this matrix.

Parameters:
M1 - right-hand matrix

scale

public void scale(double s)
Scales the elements of this matrix by s.

Parameters:
s - scaling factor

scale

public void scale(double s,
                  Matrix6dBase M1)
Scales the elements of matrix M1 by s and places the results in this matrix.

Parameters:
s - scaling factor
M1 - matrix to be scaled

negate

public void negate(Matrix6dBase M1)
Sets this matrix to the negative of M1.

Parameters:
M1 - matrix to negate

transpose

public void transpose(Matrix6dBase M1)
Takes the transpose of matrix M1 and places the result in this matrix.

Parameters:
M1 - matrix to take the transpose of

setZero

public void setZero()
Sets the elements of this matrix to zero.


setRandom

public void setRandom()
Sets the elements of this matrix to uniformly distributed random values in the range -0.5 (inclusive) to 0.5 (exclusive).


setRandom

public void setRandom(double lower,
                      double upper)
Sets the elements of this matrix to uniformly distributed random values in a specified range.

Parameters:
lower - lower random value (inclusive)
upper - upper random value (exclusive)

setRandom

public void setRandom(double lower,
                      double upper,
                      java.util.Random generator)
Sets the elements of this matrix to uniformly distributed random values in a specified range, using a supplied random number generator.

Parameters:
lower - lower random value (inclusive)
upper - upper random value (exclusive)
generator - random number generator

invert

public boolean invert(Matrix6dBase M)
Inverts the matrix M and places the result in this matrix, return false if M is detected to be singular. The inverse is computed using an LU decomposition with partial pivoting.

Parameters:
M - matrix to invert
Returns:
false if M is singular

setDiagonal

public void setDiagonal(VectorNd diag)

setDiagonal

public void setDiagonal(double[] vals)
Sets this matrix to a diagonal matrix whose values are specified by the array vals.

Parameters:
vals - diagonal values

transform

public void transform(RotationMatrix3d R)
Applies a rotational transformation R to this matrix, in place. Equivalent to transform(R,M) with M equal to this matrix.

Parameters:
R - rotational transformation matrix

transform

public void transform(RotationMatrix3d R,
                      Matrix6d M1)
Applies a rotational transformation R to M1 and place the result in this matrix. This is equivalent to applying a rotational transform to each of the 4 3x3 submatrices:
    [ R  0 ]      [ R^T 0  ]
    [      ]  M1  [        ]
    [ 0  R ]      [ 0  R^T ]
 

Parameters:
R - rotational transformation matrix
M1 - matrix to transform

inverseTransform

public void inverseTransform(RotationMatrix3d R)
Applies an inverse rotational transformation R to this matrix, in place. Equivalent to inverseTransform(R,M) with M equal to this matrix.

Parameters:
R - rotational transformation matrix

inverseTransform

public void inverseTransform(RotationMatrix3d R,
                             Matrix6d M1)
Applies an inverse rotational transformation R to a matrix M1 and place the result in this matrix. This is equivalent to applying an inverse rotational transform to each of the 4 3x3 submatrices:
    [ R^T  0 ]      [ R  0 ]
    [        ]  M1  [      ]
    [ 0  R^T ]      [ 0  R ]
 

Parameters:
R - rotational transformation matrix
M1 - matrix to transform

setLowerToUpper

public void setLowerToUpper()
Makes this matrix symmetric by setting its lower triangular elements equal to the corresponding upper triangular elements.