Class Matrix

  • All Implemented Interfaces:
    java.lang.Cloneable

    public final class Matrix
    extends java.lang.Object
    implements java.lang.Cloneable
    This class will be used for matrix manipulation.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private float[] single  
      static int SIZE  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        Matrix()
      Constructor.
      private Matrix​(float[] src)
      Constructor.
        Matrix​(float a, float b, float c, float d, float e, float f)
      Creates a transformation matrix with the given 6 elements.
        Matrix​(java.awt.geom.AffineTransform at)
      Creates a matrix with the same elements as the given AffineTransform.
      private Matrix​(COSArray array)
      Creates a matrix from a 6-element (a b c d e f) COS array.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private float[] checkFloatValues​(float[] values)  
      Matrix clone()
      Clones this object.
      void concatenate​(Matrix matrix)
      Concatenates (premultiplies) the given matrix to this matrix.
      static Matrix concatenate​(Matrix a, Matrix b)
      Produces a copy of the first matrix, with the second matrix concatenated.
      java.awt.geom.AffineTransform createAffineTransform()
      Create an affine transform from this matrix's values.
      static Matrix createMatrix​(COSBase base)
      Convenience method to be used when creating a matrix from unverified data.
      boolean equals​(java.lang.Object obj)  
      static Matrix getRotateInstance​(double theta, float tx, float ty)
      Convenience method to create a rotated instance.
      static Matrix getScaleInstance​(float x, float y)
      Convenience method to create a scaled instance.
      float getScaleX()
      Returns the x-scaling element of this matrix.
      float getScaleY()
      Returns the y-scaling element of this matrix.
      float getScalingFactorX()
      Returns the x-scaling factor of this matrix.
      float getScalingFactorY()
      Returns the y-scaling factor of this matrix.
      float getShearX()
      Returns the x-shear element of this matrix.
      float getShearY()
      Returns the y-shear element of this matrix.
      static Matrix getTranslateInstance​(float x, float y)
      Convenience method to create a translating instance.
      float getTranslateX()
      Returns the x-translation element of this matrix.
      float getTranslateY()
      Returns the y-translation element of this matrix.
      float getValue​(int row, int column)
      This will get a matrix value at some point.
      float[][] getValues()
      Return a single dimension array of all values in the matrix.
      int hashCode()  
      Matrix multiply​(Matrix other)
      This method multiplies this Matrix with the specified other Matrix, storing the product in a new instance.
      private float[] multiplyArrays​(float[] a, float[] b)  
      void rotate​(double theta)
      Rotates this matrix by the given factors.
      void scale​(float sx, float sy)
      Scales this matrix by the given factors.
      void setValue​(int row, int column, float value)
      This will set a value at a position.
      COSArray toCOSArray()
      Returns a COS array which represent the geometric relevant components of the matrix.
      java.lang.String toString()  
      void transform​(java.awt.geom.Point2D point)
      Transforms the given point by this matrix.
      Vector transform​(Vector vector)
      Transforms the given vector by this matrix.
      java.awt.geom.Point2D.Float transformPoint​(float x, float y)
      Transforms the given point by this matrix.
      void translate​(float tx, float ty)
      Translates this matrix by the given amount.
      void translate​(Vector vector)
      Translates this matrix by the given vector.
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • Matrix

        public Matrix()
        Constructor. This produces an identity matrix.
      • Matrix

        private Matrix​(float[] src)
        Constructor. This produces a matrix with the given array as data. The source array is not copied or cloned.
      • Matrix

        private Matrix​(COSArray array)
        Creates a matrix from a 6-element (a b c d e f) COS array.
        Parameters:
        array - source array, elements must be or extend COSNumber
      • Matrix

        public Matrix​(float a,
                      float b,
                      float c,
                      float d,
                      float e,
                      float f)
        Creates a transformation matrix with the given 6 elements. Transformation matrices are discussed in 8.3.3, "Common Transformations" and 8.3.4, "Transformation Matrices" of the PDF specification. For simple purposes (rotate, scale, translate) it is recommended to use the static methods below. Produces the following matrix: a b 0 c d 0 e f 1
        Parameters:
        a - the X coordinate scaling element (m00) of the 3x3 matrix
        b - the Y coordinate shearing element (m10) of the 3x3 matrix
        c - the X coordinate shearing element (m01) of the 3x3 matrix
        d - the Y coordinate scaling element (m11) of the 3x3 matrix
        e - the X coordinate translation element (m02) of the 3x3 matrix
        f - the Y coordinate translation element (m12) of the 3x3 matrix
        See Also:
        getRotateInstance(double, float, float), getScaleInstance(float, float), getTranslateInstance(float, float)
      • Matrix

        public Matrix​(java.awt.geom.AffineTransform at)
        Creates a matrix with the same elements as the given AffineTransform.
        Parameters:
        at - matrix elements will be initialize with the values from this affine transformation, as follows: scaleX shearY 0 shearX scaleY 0 transX transY 1
    • Method Detail

      • createMatrix

        public static Matrix createMatrix​(COSBase base)
        Convenience method to be used when creating a matrix from unverified data. If the parameter is a COSArray with at least six numbers, a Matrix object is created from the first six numbers and returned. If not, then the identity Matrix is returned.
        Parameters:
        base - a COS object, preferably a COSArray with six numbers.
        Returns:
        a Matrix object.
      • createAffineTransform

        public java.awt.geom.AffineTransform createAffineTransform()
        Create an affine transform from this matrix's values.
        Returns:
        An affine transform with this matrix's values.
      • getValue

        public float getValue​(int row,
                              int column)
        This will get a matrix value at some point.
        Parameters:
        row - The row to get the value from.
        column - The column to get the value from.
        Returns:
        The value at the row/column position.
      • setValue

        public void setValue​(int row,
                             int column,
                             float value)
        This will set a value at a position.
        Parameters:
        row - The row to set the value at.
        column - the column to set the value at.
        value - The value to set at the position.
      • getValues

        public float[][] getValues()
        Return a single dimension array of all values in the matrix.
        Returns:
        The values of this matrix.
      • concatenate

        public void concatenate​(Matrix matrix)
        Concatenates (premultiplies) the given matrix to this matrix.
        Parameters:
        matrix - The matrix to concatenate.
      • translate

        public void translate​(Vector vector)
        Translates this matrix by the given vector.
        Parameters:
        vector - 2D vector
      • translate

        public void translate​(float tx,
                              float ty)
        Translates this matrix by the given amount.
        Parameters:
        tx - x-translation
        ty - y-translation
      • scale

        public void scale​(float sx,
                          float sy)
        Scales this matrix by the given factors.
        Parameters:
        sx - x-scale
        sy - y-scale
      • rotate

        public void rotate​(double theta)
        Rotates this matrix by the given factors.
        Parameters:
        theta - The angle of rotation measured in radians
      • multiply

        public Matrix multiply​(Matrix other)
        This method multiplies this Matrix with the specified other Matrix, storing the product in a new instance. It is allowed to have (other == this).
        Parameters:
        other - the second operand Matrix in the multiplication; required
        Returns:
        the product of the two matrices.
      • checkFloatValues

        private float[] checkFloatValues​(float[] values)
      • multiplyArrays

        private float[] multiplyArrays​(float[] a,
                                       float[] b)
      • transform

        public void transform​(java.awt.geom.Point2D point)
        Transforms the given point by this matrix.
        Parameters:
        point - point to transform
      • transformPoint

        public java.awt.geom.Point2D.Float transformPoint​(float x,
                                                          float y)
        Transforms the given point by this matrix.
        Parameters:
        x - x-coordinate
        y - y-coordinate
        Returns:
        the transformed point.
      • transform

        public Vector transform​(Vector vector)
        Transforms the given vector by this matrix.
        Parameters:
        vector - 2D vector
        Returns:
        the transformed vector.
      • getScaleInstance

        public static Matrix getScaleInstance​(float x,
                                              float y)
        Convenience method to create a scaled instance. Produces the following matrix: x 0 0 0 y 0 0 0 1
        Parameters:
        x - The x-scale operator.
        y - The y-scale operator.
        Returns:
        A new matrix with just the x/y scaling
      • getTranslateInstance

        public static Matrix getTranslateInstance​(float x,
                                                  float y)
        Convenience method to create a translating instance. Produces the following matrix: 1 0 0 0 1 0 x y 1
        Parameters:
        x - The x translating operator.
        y - The y translating operator.
        Returns:
        A new matrix with just the x/y translating.
      • getRotateInstance

        public static Matrix getRotateInstance​(double theta,
                                               float tx,
                                               float ty)
        Convenience method to create a rotated instance.
        Parameters:
        theta - The angle of rotation measured in radians
        tx - The x translation.
        ty - The y translation.
        Returns:
        A new matrix with the rotation and the x/y translating.
      • concatenate

        public static Matrix concatenate​(Matrix a,
                                         Matrix b)
        Produces a copy of the first matrix, with the second matrix concatenated.
        Parameters:
        a - The matrix to copy.
        b - The matrix to concatenate.
        Returns:
        a copy of the first matrix with the second matrix concatenated
      • clone

        public Matrix clone()
        Clones this object.
        Overrides:
        clone in class java.lang.Object
        Returns:
        cloned matrix as an object.
      • getScalingFactorX

        public float getScalingFactorX()
        Returns the x-scaling factor of this matrix. This is calculated from the scale and shear.
        Returns:
        The x-scaling factor.
      • getScalingFactorY

        public float getScalingFactorY()
        Returns the y-scaling factor of this matrix. This is calculated from the scale and shear.
        Returns:
        The y-scaling factor.
      • getScaleX

        public float getScaleX()
        Returns the x-scaling element of this matrix.
        Returns:
        the x-scaling element of the matrix
        See Also:
        getScalingFactorX()
      • getShearY

        public float getShearY()
        Returns the y-shear element of this matrix.
        Returns:
        the y-shear element of the matrix
      • getShearX

        public float getShearX()
        Returns the x-shear element of this matrix.
        Returns:
        the x-shear element of the matrix
      • getScaleY

        public float getScaleY()
        Returns the y-scaling element of this matrix.
        Returns:
        the y-scaling element of the matrix
        See Also:
        getScalingFactorY()
      • getTranslateX

        public float getTranslateX()
        Returns the x-translation element of this matrix.
        Returns:
        the x-translation element of the matrix
      • getTranslateY

        public float getTranslateY()
        Returns the y-translation element of this matrix.
        Returns:
        the y-translation element of the matrix
      • toCOSArray

        public COSArray toCOSArray()
        Returns a COS array which represent the geometric relevant components of the matrix. The last column of the matrix is ignored, only the first two columns are returned. This is analog to the Matrix(COSArray) constructor.
        Returns:
        a COSArray representing the geometric relevant components of the matrix
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object