org.apache.sis.referencing.operation.matrix

## Class Matrix4

- Object
- - MatrixSIS
  - - Matrix4

- All Implemented Interfaces:
    Serializable, Cloneable, LenientComparable, Matrix

      public final class Matrix4
      extends MatrixSIS

  A matrix of fixed 4×4 size, often used in datum shifts. The matrix members are:

  >      ┌                 ┐
  >      │ m00 m01 m02 m03 │
  >      │ m10 m11 m12 m13 │
  >      │ m20 m21 m22 m23 │
  >      │ m30 m31 m32 m33 │
  >      └                 ┘

  Since:
    0.4
  See Also:
    `Matrix1`, `Matrix2`, `Matrix3`, Serialized Form

  Defined in the `sis-referencing` module

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `double` | `m00` The first matrix element in the first row.
    `double` | `m01` The second matrix element in the first row.
    `double` | `m02` The third matrix element in the first row.
    `double` | `m03` The forth matrix element in the first row.
    `double` | `m10` The first matrix element in the second row.
    `double` | `m11` The second matrix element in the second row.
    `double` | `m12` The third matrix element in the second row.
    `double` | `m13` The forth matrix element in the second row.
    `double` | `m20` The first matrix element in the third row.
    `double` | `m21` The second matrix element in the third row.
    `double` | `m22` The third matrix element in the third row.
    `double` | `m23` The forth matrix element in the third row.
    `double` | `m30` The first matrix element in the forth row.
    `double` | `m31` The second matrix element in the forth row.
    `double` | `m32` The third matrix element in the forth row.
    `double` | `m33` The forth matrix element in the forth row.
    `static int` | `SIZE` The matrix size, which is 4.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Matrix4()` Creates a new identity matrix.
    `Matrix4(double[] elements)` Creates a new matrix initialized to the specified values.
    `Matrix4(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, double m20, double m21, double m22, double m23, double m30, double m31, double m32, double m33)` Creates a new matrix initialized to the specified values.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static Matrix4` | `castOrCopy(Matrix matrix)` Casts or copies the given matrix to a `Matrix4` implementation.
    `double` | `getElement(int row, int column)` Retrieves the value at the specified row and column of this matrix.
    `double[]` | `getElements()` Returns all matrix elements in a flat, row-major (column indices vary fastest) array.
    `int` | `getNumCol()` Returns the number of columns in this matrix, which is always 4 in this implementation.
    `int` | `getNumRow()` Returns the number of rows in this matrix, which is always 4 in this implementation.
    `boolean` | `isAffine()` Returns `true` if this matrix represents an affine transform.
    `boolean` | `isIdentity()` Returns `true` if this matrix is an identity matrix.
    `void` | `setElement(int row, int column, double value)` Modifies the value at the specified row and column of this matrix.
    `void` | `setElements(double[] elements)` Sets all matrix elements from a flat, row-major (column indices vary fastest) array.
    `void` | `transpose()` Sets the value of this matrix to its transpose.

    - ### Methods inherited from class MatrixSIS

      `clone, convertAfter, convertBefore, equals, equals, equals, getNumber, hashCode, inverse, multiply, multiply, normalizeColumns, removeColumns, removeRows, setMatrix, setNumber, solve, toString`

    - ### Methods inherited from class Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### SIZE

          public static final int SIZE

      The matrix size, which is 4.
      See Also:
        Constant Field Values

    - #### m00

          public double m00

      The first matrix element in the first row.

    - #### m01

          public double m01

      The second matrix element in the first row.

    - #### m02

          public double m02

      The third matrix element in the first row.

    - #### m03

          public double m03

      The forth matrix element in the first row.

    - #### m10

          public double m10

      The first matrix element in the second row.

    - #### m11

          public double m11

      The second matrix element in the second row.

    - #### m12

          public double m12

      The third matrix element in the second row.

    - #### m13

          public double m13

      The forth matrix element in the second row.

    - #### m20

          public double m20

      The first matrix element in the third row.

    - #### m21

          public double m21

      The second matrix element in the third row.

    - #### m22

          public double m22

      The third matrix element in the third row.

    - #### m23

          public double m23

      The forth matrix element in the third row.

    - #### m30

          public double m30

      The first matrix element in the forth row.

    - #### m31

          public double m31

      The second matrix element in the forth row.

    - #### m32

          public double m32

      The third matrix element in the forth row.

    - #### m33

          public double m33

      The forth matrix element in the forth row.

  - ### Constructor Detail

    - #### Matrix4

          public Matrix4()

      Creates a new identity matrix.

    - #### Matrix4

          public Matrix4(double m00,
                         double m01,
                         double m02,
                         double m03,
                         double m10,
                         double m11,
                         double m12,
                         double m13,
                         double m20,
                         double m21,
                         double m22,
                         double m23,
                         double m30,
                         double m31,
                         double m32,
                         double m33)

      Creates a new matrix initialized to the specified values.
      Parameters:
        `m00` - the first matrix element in the first row.
        `m01` - the second matrix element in the first row.
        `m02` - the third matrix element in the first row.
        `m03` - the forth matrix element in the first row.
        `m10` - the first matrix element in the second row.
        `m11` - the second matrix element in the second row.
        `m12` - the third matrix element in the second row.
        `m13` - the forth matrix element in the second row.
        `m20` - the first matrix element in the third row.
        `m21` - the second matrix element in the third row.
        `m22` - the third matrix element in the third row.
        `m23` - the forth matrix element in the third row.
        `m30` - the first matrix element in the forth row.
        `m31` - the second matrix element in the forth row.
        `m32` - the third matrix element in the forth row.
        `m33` - the forth matrix element in the forth row.

    - #### Matrix4

          public Matrix4(double[] elements)
                  throws IllegalArgumentException

      Creates a new matrix initialized to the specified values. The length of the given array must be 16 and the values in the same order than the above constructor.
      Parameters:
        `elements` - elements of the matrix. Column indices vary fastest.
      Throws:
        `IllegalArgumentException` - if the given array does not have the expected length.
      See Also:
        `setElements(double[])`, `Matrices​.create(int, int, double[])`

  - ### Method Detail

    - #### castOrCopy

          public static Matrix4 castOrCopy(Matrix matrix)
                                    throws MismatchedMatrixSizeException

      Casts or copies the given matrix to a `Matrix4` implementation. If the given `matrix` is already an instance of `Matrix4`, then it is returned unchanged. Otherwise this method verifies the matrix size, then copies all elements in a new `Matrix4` object.
      Parameters:
        `matrix` - the matrix to cast or copy, or `null`.
      Returns:
        the matrix argument if it can be safely casted (including `null` argument), or a copy of the given matrix otherwise.
      Throws:
        `MismatchedMatrixSizeException` - if the size of the given matrix is not 4×4.

    - #### getNumRow

          public final int getNumRow()

      Returns the number of rows in this matrix, which is always 4 in this implementation.
      Returns:
        always 4.

    - #### getNumCol

          public final int getNumCol()

      Returns the number of columns in this matrix, which is always 4 in this implementation.
      Returns:
        always 4.

    - #### getElement

          public final double getElement(int row,
                                         int column)

      Retrieves the value at the specified row and column of this matrix. This method can be invoked when the matrix size or type is unknown. If the matrix is known to be an instance of `Matrix4`, then the `m00` … `m33` fields can be read directly for efficiency.
      Specified by:
        `getElement` in interface `Matrix`
      Specified by:
        `getElement` in class `MatrixSIS`
      Parameters:
        `row` - the row index, from 0 inclusive to 4 exclusive.
        `column` - the column index, from 0 inclusive to 4 exclusive.
      Returns:
        the current value at the given row and column.

    - #### setElement

          public final void setElement(int row,
                                       int column,
                                       double value)

      Modifies the value at the specified row and column of this matrix. This method can be invoked when the matrix size or type is unknown. If the matrix is known to be an instance of `Matrix4`, then the `m00` … `m33` fields can be set directly for efficiency.
      Parameters:
        `row` - the row index, from 0 inclusive to 4 exclusive.
        `column` - the column index, from 0 inclusive to 4 exclusive.
        `value` - the new value to set at the given row and column.

    - #### getElements

          public final double[] getElements()

      Returns all matrix elements in a flat, row-major (column indices vary fastest) array. The array length is 16.
      Overrides:
        `getElements` in class `MatrixSIS`
      Returns:
        a copy of all current matrix elements in a row-major array.

    - #### setElements

          public final void setElements(double[] elements)

      Sets all matrix elements from a flat, row-major (column indices vary fastest) array. The array length shall be 16.
      Specified by:
        `setElements` in class `MatrixSIS`
      Parameters:
        `elements` - The new matrix elements in a row-major array.
      See Also:
        `Matrices​.create(int, int, double[])`

    - #### isAffine

          public final boolean isAffine()

      Returns `true` if this matrix represents an affine transform. A transform is affine if the matrix is square and its last row contains only zeros, except in the last column which contains 1.
      Overrides:
        `isAffine` in class `MatrixSIS`
      Returns:
        `true` if this matrix represents an affine transform.
      See Also:
        `Matrices​.isAffine(Matrix)`, `LinearTransform​.isAffine()`

    - #### isIdentity

          public final boolean isIdentity()

      Returns `true` if this matrix is an identity matrix. This method is equivalent to the following code, except that it is potentially more efficient:

          return Matrices.isIdentity(this, 0.0);

      Specified by:
        `isIdentity` in interface `Matrix`
      Specified by:
        `isIdentity` in class `MatrixSIS`
      Returns:
        `true` if this matrix is an identity matrix.
      See Also:
        `Matrices​.isIdentity(Matrix, double)`, `AffineTransform​.isIdentity()`

    - #### transpose

          public void transpose()

      Sets the value of this matrix to its transpose.
      Specified by:
        `transpose` in class `MatrixSIS`

Copyright © 2010–2017 The Apache Software Foundation. All rights reserved.