Class MatrixSIS

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected MatrixSIS()
      For sub-class constructors.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      static MatrixSIS castOrCopy​(Matrix matrix)
      Casts or copies the given matrix to a SIS implementation.
      MatrixSIS clone()
      Returns a clone of this matrix.
      void convertAfter​(int tgtDim, Number scale, Number offset)
      Assuming that this matrix represents an affine transform, pre-concatenates a scale and a translation on the given dimension.
      void convertBefore​(int srcDim, Number scale, Number offset)
      Assuming that this matrix represents an affine transform, concatenates a scale and a translation on the given dimension.
      boolean equals​(Object object)
      Returns true if the specified object is of the same class than this matrix and all of the data members are equal to the corresponding data members in this matrix.
      boolean equals​(Object object, ComparisonMode mode)
      Compares this matrix with the given object for equality.
      boolean equals​(Matrix matrix, double tolerance)
      Compares the given matrices for equality, using the given absolute tolerance threshold.
      abstract double getElement​(int row, int column)
      Retrieves the value at the specified row and column of this matrix.
      double[] getElements()
      Returns a copy of all matrix elements in a flat, row-major (column indices vary fastest) array.
      Number getNumber​(int row, int column)
      Retrieves the value at the specified row and column of this matrix, wrapped in a Number.
      int hashCode()
      Returns a hash code value based on the data values in this matrix.
      MatrixSIS inverse()
      Returns the inverse of this matrix.
      boolean isAffine()
      Returns true if this matrix represents an affine transform.
      abstract 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.
      MatrixSIS multiply​(Matrix matrix)
      Returns a new matrix which is the result of multiplying this matrix with the specified one.
      void normalizeColumns()
      Normalizes all columns in-place.
      MatrixSIS removeColumns​(int lower, int upper)
      Returns a new matrix with the same elements than this matrix except for the specified columns.
      MatrixSIS removeRows​(int lower, int upper)
      Returns a new matrix with the same elements than this matrix except for the specified rows.
      abstract void setElements​(double[] elements)
      Sets all matrix elements from a flat, row-major (column indices vary fastest) array.
      void setMatrix​(Matrix matrix)
      Sets this matrix to the values of another matrix.
      void setNumber​(int row, int column, Number value)
      Modifies the value at the specified row and column of this matrix.
      MatrixSIS solve​(Matrix matrix)
      Returns the value of U which solves this × U = matrix.
      String toString()
      Returns a unlocalized string representation of this matrix.
      void translate​(double[] vector)
      Multiplies this matrix by a translation matrix.
      abstract void transpose()
      Sets the value of this matrix to its transpose.
    • Constructor Detail

      • MatrixSIS

        protected MatrixSIS()
        For sub-class constructors.
    • Method Detail

      • castOrCopy

        public static MatrixSIS castOrCopy​(Matrix matrix)
        Casts or copies the given matrix to a SIS implementation. If matrix is already an instance of Matrix­SIS, then it is returned unchanged. Otherwise all elements are copied in a new Matrix­SIS 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.
        See Also:
        Matrices​.copy(Matrix)
      • getNumber

        public Number getNumber​(int row,
                                int column)
        Retrieves the value at the specified row and column of this matrix, wrapped in a Number. The Number type depends on the matrix accuracy.
        Parameters:
        row - the row index, from 0 inclusive to Matrix​.get­Num­Row() exclusive.
        column - the column index, from 0 inclusive to Matrix​.get­Num­Col() exclusive.
        Returns:
        the current value at the given row and column.
      • getElement

        public abstract double getElement​(int row,
                                          int column)
        Retrieves the value at the specified row and column of this matrix.
        Specified by:
        get­Element in interface Matrix
        Parameters:
        row - the row index, from 0 inclusive to Matrix​.get­Num­Row() exclusive.
        column - the column index, from 0 inclusive to Matrix​.get­Num­Col() exclusive.
        Returns:
        the current value at the given row and column.
      • getElements

        public double[] getElements()
        Returns a copy of all matrix elements in a flat, row-major (column indices vary fastest) array. The array length is Matrix​.get­Num­Row() * Matrix​.get­Num­Col().
        Returns:
        a copy of all current matrix elements in a row-major array.
      • isAffine

        public 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.
        Returns:
        true if this matrix represents an affine transform.
        See Also:
        Matrices​.is­Affine(Matrix), Linear­Transform​.is­Affine()
      • transpose

        public abstract void transpose()
        Sets the value of this matrix to its transpose.
        Throws:
        Unsupported­Operation­Exception - if this matrix is unmodifiable.
      • normalizeColumns

        public void normalizeColumns()
        Normalizes all columns in-place. Each columns in this matrix is considered as a vector. For each column (vector), this method computes the magnitude (vector length) as the square root of the sum of all square values. Then, all values in the column are divided by that magnitude.

        This method is useful when the matrix is a transform derivative. In such matrix, each column is a vector representing the displacement in target space when an coordinate in the source space is increased by one. Invoking this method turns those vectors into unitary vectors, which is useful for forming the basis of a new coordinate system.

        Throws:
        Unsupported­Operation­Exception - if this matrix is unmodifiable.
      • convertBefore

        public void convertBefore​(int srcDim,
                                  Number scale,
                                  Number offset)
        Assuming that this matrix represents an affine transform, concatenates a scale and a translation on the given dimension. Converting a point with the resulting matrix is equivalent to first convert the point with coordinates[src­Dim] = coordinates[src­Dim] * scale + offset, then apply the original matrix.
        Equivalence between this method and Java2D Affine­Transform methods
        If this matrix was an instance of Java2D Affine­Transform, then invoking this method would be equivalent to invoke the following Affine­Transform methods in the order shown below:
        Equivalence between this method and AffineTransform methods
        MatrixSIS method AffineTransform methods
        concatenate(0, scale, offset) at.translate(offset, 0); at.scale(scale, 1);
        concatenate(1, scale, offset) at.translate(0, offset); at.scale(1, scale);
        Parameters:
        src­Dim - the dimension of the coordinate to rescale in the source coordinates.
        scale - the amount by which to multiply the source coordinate value before to apply the transform, or null if none.
        offset - the amount by which to translate the source coordinate value before to apply the transform, or null if none.
        Throws:
        Unsupported­Operation­Exception - if this matrix is unmodifiable.
        Since:
        0.6
        See Also:
        Affine­Transform​.concatenate(Affine­Transform)
      • convertAfter

        public void convertAfter​(int tgtDim,
                                 Number scale,
                                 Number offset)
        Assuming that this matrix represents an affine transform, pre-concatenates a scale and a translation on the given dimension. Converting a point with the resulting matrix is equivalent to first convert the point with the original matrix, then convert the result with coordinates[tgt­Dim] = coordinates[tgt­Dim] * scale + offset.
        Parameters:
        tgt­Dim - the dimension of the coordinate to rescale in the target coordinates.
        scale - the amount by which to multiply the target coordinate value after this transform, or null if none.
        offset - the amount by which to translate the target coordinate value after this transform, or null if none.
        Throws:
        Unsupported­Operation­Exception - if this matrix is unmodifiable.
        Since:
        0.6
        See Also:
        Affine­Transform​.pre­Concatenate(Affine­Transform)
      • multiply

        public MatrixSIS multiply​(Matrix matrix)
                           throws MismatchedMatrixSizeException
        Returns a new matrix which is the result of multiplying this matrix with the specified one. In other words, returns this × matrix.
        Relationship with coordinate operations
        In the context of coordinate operations, Matrix​.multiply(other) is equivalent to Affine­Transform​.concatenate(other): first transforms by the supplied transform and then transform the result by the original transform.
        Parameters:
        matrix - the matrix to multiply to this matrix.
        Returns:
        the result of this × matrix.
        Throws:
        Mismatched­Matrix­Size­Exception - if the number of rows in the given matrix is not equals to the number of columns in this matrix.
      • 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 Affine­Transform​.transform(…) except that the last vector number is implicitly 1 in Affine­Transform 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.
        Parameters:
        vector - the vector to multiply to this matrix.
        Returns:
        the result of this × vector.
        Throws:
        Mismatched­Matrix­Size­Exception - if the length of the given vector is not equals to the number of columns in this matrix.
        Since:
        0.8
      • translate

        public void translate​(double[] vector)
        Multiplies this matrix by a translation matrix. Invoking this method is equivalent to invoking multiply(T) where T is a matrix like below (size varies):
            ┌                    ┐
            │ 1  0  0  vector[0] │
        T = │ 0  1  0  vector[1] │
            │ 0  0  1  vector[2] │
            │ 0  0  0  vector[3] │
            └                    ┘
        The length of the given vector must be equals to the number of columns in this matrix. The last vector element is 1 for an affine transform, but other values are allowed. This matrix will be modified in-place.

        If this matrix is used for coordinate conversions, then converting a position with the resulting matrix is equivalent to first translating the point by the given vector, then applying the conversion represented by the original matrix.

        Parameters:
        vector - a vector representing a translation to be applied before this matrix.
        Since:
        1.0
        See Also:
        Affine­Transform​.translate(double, double)
      • removeRows

        public MatrixSIS removeRows​(int lower,
                                    int upper)
        Returns a new matrix with the same elements than this matrix except for the specified rows. This method is useful for removing a range of target dimensions in an affine transform.
        Parameters:
        lower - index of the first row to remove (inclusive).
        upper - index after the last row to remove (exclusive).
        Returns:
        a copy of this matrix with the specified rows removed.
        Since:
        0.7
      • removeColumns

        public MatrixSIS removeColumns​(int lower,
                                       int upper)
        Returns a new matrix with the same elements than this matrix except for the specified columns. This method is useful for removing a range of source dimensions in an affine transform. Coordinates will be converted as if the values in the removed dimensions were zeros.
        Parameters:
        lower - index of the first column to remove (inclusive).
        upper - index after the last column to remove (exclusive).
        Returns:
        a copy of this matrix with the specified columns removed.
        Since:
        0.7
      • hashCode

        public int hashCode()
        Returns a hash code value based on the data values in this matrix.
        Overrides:
        hash­Code in class Object
        Returns:
        a hash code value for this matrix.
      • equals

        public boolean equals​(Object object)
        Returns true if the specified object is of the same class than this matrix and all of the data members are equal to the corresponding data members in this matrix.
        Specified by:
        equals in interface Lenient­Comparable
        Overrides:
        equals in class Object
        Parameters:
        object - the object to compare with this matrix for equality.
        Returns:
        true if the given object is equal to this matrix.
        See Also:
        Comparison­Mode​.STRICT
      • equals

        public boolean equals​(Matrix matrix,
                              double tolerance)
        Compares the given matrices for equality, using the given absolute tolerance threshold. The given matrix does not need to be the same implementation class than this matrix.

        The matrix elements are compared as below:

        • Double​.Na­N values are considered equals to all other NaN values.
        • Infinite values are considered equal to other infinite values of the same sign.
        • All other values are considered equal if the absolute value of their difference is smaller than or equals to the given threshold.
        Parameters:
        matrix - the matrix to compare.
        tolerance - the tolerance value.
        Returns:
        true if this matrix is close enough to the given matrix given the tolerance value.
        See Also:
        Matrices​.equals(Matrix, Matrix, double, boolean)
      • equals

        public boolean equals​(Object object,
                              ComparisonMode mode)
        Compares this matrix with the given object for equality. To be considered equal, the two objects must met the following conditions, which depend on the mode argument:
        • STRICT: the two matrices must be of the same class, have the same size and the same element values.
        • BY_CONTRACT: the two matrices must have the same size and the same element values, but are not required to be the same implementation class (any Matrix is okay).
        • IGNORE_METADATA: same as BY_CONTRACT.
        • APPROXIMATE: the two matrices must have the same size, but the element values can differ up to some threshold. The threshold value is determined empirically and may change in any future SIS versions.
        Specified by:
        equals in interface Lenient­Comparable
        Parameters:
        object - the object to compare to this.
        mode - the strictness level of the comparison.
        Returns:
        true if both objects are equal.
        See Also:
        Matrices​.equals(Matrix, Matrix, Comparison­Mode)