# Class Matrix2

Object
MatrixSIS
Matrix2

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

public class Matrix2 extends MatrixSIS
A matrix of fixed 2×2 size, typically resulting from `MathTransform2D` derivative computation. The matrix members are:

>      ┌         ┐
>      │ m00 m01 │
>      │ m10 m11 │
>      └         ┘

Since:
  0.4
See Also:
  - `Matrix1`
  - `Matrix3`
  - `Matrix4`
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `double`
  `m00`
  The first matrix element in the first row.
  `double`
  `m01`
  The second 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.
  `static final int`
  `SIZE`
  The matrix size, which is 2.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Matrix2()`
  Creates a new identity matrix.
  `Matrix2(double[] elements)`
  Creates a new matrix initialized to the specified values.
  `Matrix2(double m00, double m01, double m10, double m11)`
  Creates a new matrix initialized to the specified values.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static Matrix2`
  `castOrCopy(Matrix matrix)`
  Casts or copies the given matrix to a `Matrix2` implementation.
  `Matrix2`
  `clone()`
  Returns a clone of this matrix.
  `boolean`
  `equals(Object object)`
  Returns `true` if the specified object is of type `Matrix2` and all of the data members are equal to the corresponding data members in this matrix.
  `final double`
  `getElement(int row, int column)`
  Retrieves the value at the specified row and column of this matrix.
  `final double[]`
  `getElements()`
  Returns all matrix elements in a flat, row-major (column indices vary fastest) array.
  `final int`
  `getNumCol()`
  Returns the number of columns in this matrix, which is always 2 in this implementation.
  `final int`
  `getNumRow()`
  Returns the number of rows in this matrix, which is always 2 in this implementation.
  `int`
  `hashCode()`
  Returns a hash code value based on the data values in this object.
  `MatrixSIS`
  `inverse()`
  Returns the inverse of this matrix.
  `final boolean`
  `isAffine()`
  Returns `true` if this matrix represents an affine transform.
  `final boolean`
  `isIdentity()`
  Returns `true` if this matrix is an identity matrix.
  `double[]`
  `multiply(double[] vector)`
  Returns a new vector which is the result of multiplying this matrix with the specified vector.
  `final void`
  `setElement(int row, int column, double value)`
  Modifies the value at the specified row and column of this matrix.
  `final void`
  `setElements(double[] elements)`
  Sets all matrix elements from a flat, row-major (column indices vary fastest) array.
  `void`
  `setToRotation(double θ)`
  Sets the elements to a rotation matrix of the given arithmetic angle.
  `void`
  `transpose()`
  Sets the value of this matrix to its transpose.

  ### Methods inherited from class MatrixSIS

  `convertAfter, convertBefore, equals, equals, getNumber, multiply, normalizeColumns, removeColumns, removeRows, setMatrix, setNumber, solve, toString, translate`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### SIZE

    public static final int SIZE
    The matrix size, which is 2.
    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.

  - ### m10

    public double m10
    The first matrix element in the second row.

  - ### m11

    public double m11
    The second matrix element in the second row.

- ## Constructor Details

  - ### Matrix2

    public Matrix2()
    Creates a new identity matrix.

  - ### Matrix2

    public Matrix2(double m00, double m01, double m10, double m11)
    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.
      `m10` - the first matrix element in the second row.
      `m11` - the second matrix element in the second row.

  - ### Matrix2

    public Matrix2(double[] elements) throws IllegalArgumentException
    Creates a new matrix initialized to the specified values. The length of the given array must be 4 and the values in the same order as 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 Details

  - ### castOrCopy

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

  - ### getNumRow

    public final int getNumRow()
    Returns the number of rows in this matrix, which is always 2 in this implementation.
    Returns:
      always 2.

  - ### getNumCol

    public final int getNumCol()
    Returns the number of columns in this matrix, which is always 2 in this implementation.
    Returns:
      always 2.

  - ### 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 `Matrix2`, then the `m00` … `m11` fields can be read directly for efficiency.
    Parameters:
      `row` - the row index, which can only be 0 or 1.
      `column` - the column index, which can only be 0 or 1.
    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 `Matrix2`, then the `m00` … `m11` fields can be set directly for efficiency.
    Parameters:
      `row` - the row index, which can only be 0 or 1.
      `column` - the column index, which can only be 0 or 1.
      `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 4.
    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 4.
    Overrides:
      `setElements` in class `MatrixSIS`
    Parameters:
      `elements` - The new matrix elements in a row-major array.
    See Also:
      - `Matrices​.create(int, int, double[])`

  - ### setToRotation

    public void setToRotation(double θ)
    Sets the elements to a rotation matrix of the given arithmetic angle. Angle 0 is oriented toward positive x axis, rotation is counter-clockwise and the unit of measurement is radians. The resulting matrix is not affine in the sense of `isAffine()`. The matrix is:

                ┌                  ┐
                │ cos(θ)  −sin(θ)  │
                │ sin(θ)   cos(θ)  │
                └                  ┘

    Parameters:
      `θ` - arithmetic rotation angle in radians.
    Since:
      1.5

  - ### 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`

  - ### multiply

    public double[] multiply(double[] vector)
    Returns a new vector which is the result of multiplying this matrix with the specified vector. In other words, returns `this` × `vector`. The length of the given vector must be equal to the number of columns in this matrix, and the length of the returned vector will be equal to the number of rows in this matrix.

    #### Relationship with coordinate operations

    In the context of coordinate operations, `Matrix​.multiply(vector)` is related to `AffineTransform​.transform(…)` except that the last `vector` number is implicitly 1 in `AffineTransform` operations. While this `multiply(double[])` method could be used for coordinate transformation, it is not its purpose. This method is designed for occasional uses when accuracy is more important than performance.
    Overrides:
      `multiply` in class `MatrixSIS`
    Parameters:
      `vector` - the vector to multiply to this matrix.
    Returns:
      the result of `this` × `vector`.
    Since:
      1.5

  - ### inverse

    public MatrixSIS inverse() throws NoninvertibleMatrixException
    Returns the inverse of this matrix.
    Overrides:
      `inverse` in class `MatrixSIS`
    Returns:
      the inverse of this matrix.
    Throws:
      `NoninvertibleMatrixException` - if this matrix is not invertible.
    See Also:
      - `AffineTransform​.createInverse()`

  - ### clone

    public Matrix2 clone()
    Returns a clone of this matrix.
    Specified by:
      `clone` in interface `Matrix`
    Overrides:
      `clone` in class `MatrixSIS`
    Returns:
      a new matrix of the same class and with the same values as this matrix.
    See Also:
      - `Matrices​.copy(Matrix)`

  - ### equals

    public boolean equals(Object object)
    Returns `true` if the specified object is of type `Matrix2` and all of the data members are equal to the corresponding data members in this matrix.
    Specified by:
      `equals` in interface `LenientComparable`
    Overrides:
      `equals` in class `MatrixSIS`
    Parameters:
      `object` - the object to compare with this matrix for equality.
    Returns:
      `true` if the given object is equal to this matrix.
    See Also:
      - `ComparisonMode​.STRICT`

  - ### hashCode

    public int hashCode()
    Returns a hash code value based on the data values in this object.
    Overrides:
      `hashCode` in class `MatrixSIS`
    Returns:
      a hash code value for this matrix.