com.esri.core.geometry

## Class Transformation2D

• ```public final class Transformation2D
extends Object```
The affine transformation class for 2D. Vector is a row: ``` |m11 m12 0| | x y 1| * |m21 m22 0| = |m11 * x + m21 * y + m31 m12 * x + m22 * y + m32 1| |m31 m32 1| Then elements of the Transformation2D are as follows: |xx yx 0| | x y 1| * |xy yy 0| = |xx * x + xy * y + xd yx * x + yy * y + yd 1| |xd yd 1| ``` Matrices are used for transformations of the vectors as rows (case 2). That means the math expressions on the Geometry matrix operations should be writen like this:
v' = v * M1 * M2 * M3 = ( (v * M1) * M2 ) * M3, where v is a vector, Mn are the matrices.
This is equivalent to the following line of code:
ResultVector = (M1.mul(M2).mul(M3)).transform(Vector)
• ### Field Summary

Fields
Modifier and Type Field and Description
`double` `xd`
X translation component of the transformation.
`double` `xx`
Matrix coefficient XX of the transformation.
`double` `xy`
Matrix coefficient XY of the transformation.
`double` `yd`
Y translation component of the transformation.
`double` `yx`
Matrix coefficient YX of the transformation.
`double` `yy`
Matrix coefficient YY of the transformation.
• ### Constructor Summary

Constructors
Constructor and Description
`Transformation2D()`
Creates a 2D affine transformation with identity transformation.
`Transformation2D(double scale)`
Creates a 2D affine transformation with a specified scale.
• ### Method Summary

All Methods
Modifier and Type Method and Description
`Transformation2D` `copy()`
Returns a copy of the Transformation2D object.
`boolean` `equals(Object other)`
Returns True when all members of this transformation are equal to the corresponding members of the other.
`void` ```extractScaleTransform(Transformation2D scale, Transformation2D rotateNshearNshift)```
Extracts scaling part of the transformation.
`void` ```flipX(double x0, double x1)```
Flips the transformation around the X axis.
`void` ```flipY(double y0, double y1)```
Flips the transformation around the Y axis.
`void` `getCoefficients(double[] coefs)`
Writes the matrix coefficients in the order XX, XY, XD, YX, YY, YD into the given array.
`int` `hashCode()`
Returns the hash code for the 2D transformation.
`void` `inverse()`
Inverses the matrix.
`void` `inverse(Transformation2D inverse)`
Produces inverse matrix for this matrix and puts result into the inverse parameter.
`boolean` `isDegenerate(double tol)`
Returns TRUE if this matrix is degenerated (does not have an inverse) within the given tolerance.
`boolean` `isIdentity()`
Returns TRUE if this matrix is the identity matrix.
`boolean` `isIdentity(double tol)`
Returns TRUE if this matrix is an identity matrix within the given tolerance.
`boolean` `isOrthonormal(double tol)`
Returns TRUE if this is an orthonormal transformation with the given tolerance.
`boolean` `isReflective()`
Returns TRUE for reflective transformations.
`boolean` `isScaleAndShift(double tol)`
Returns TRUE, if this transformation does not have rotation and shear within the given tolerance.
`boolean` `isShift()`
Returns TRUE if this transformation is a shift transformation.
`boolean` `isShift(double tol)`
Returns TRUE if this transformation is a shift transformation within the given tolerance.
`boolean` `isUniform(double eps)`
Returns TRUE if this transformation is a uniform transformation.
`void` `mulLeft(Transformation2D left)`
Multiplies this matrix on the left with the "left" matrix.
`void` `multiply(Transformation2D right)`
Multiplies this matrix on the right with the "right" matrix.
`static void` ```multiply(Transformation2D a, Transformation2D b, Transformation2D result)```
Performs multiplication of matrices a and b and places the result into this matrix.
`void` `rotate(double angle_in_Radians)`
Rotates the transformation.
`void` ```rotate(double cos, double sin)```
Rotates the transformation.
`void` ```rotate(double cos, double sin, Point2D rotationCenter)```
Rotates the transformation aroung a center point.
`void` ```scale(double x, double y)```
Scales the transformation.
`void` ```setFlipX(double x0, double x1)```
Sets the transformation to be a flip around the X axis.
`void` ```setFlipY(double y0, double y1)```
Sets the transformation to be a flip around the Y axis.
`void` `setIdentity()`
Sets this matrix to be the identity matrix.
`void` `setRotate(double angle_in_Radians)`
Sets this transformation to be a rotation around point (0, 0).
`void` ```setRotate(double cosA, double sinA)```
Sets rotation for this transformation.
`void` `setScale(double _scale)`
Set transformation to be a uniform scale.
`void` ```setScale(double x, double y)```
Set this transformation to be a scale.
`void` ```setShear(double proportionX, double proportionY)```
Set transformation to a shear.
`void` ```setShift(double x, double y)```
Set this transformation to be a shift.
`void` `setZero()`
Initializes a zero transformation.
`void` ```shear(double proportionX, double proportionY)```
Shears the transformation.
`void` ```shift(double x, double y)```
Shifts the transformation.
`double` `transform(double tolerance)`
Transforms a tolerance value.
`void` ```transform(double[] pointsXYInterleaved, int start, int count)```
Transforms an array of points stored in an array of doubles as interleaved XY coordinates.
`void` ```transform(Point[] pointsIn, int count, Point[] pointsOut)```
Transforms an array of points.
• ### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`
• ### Field Detail

• #### xx

`public double xx`
Matrix coefficient XX of the transformation.
• #### xy

`public double xy`
Matrix coefficient XY of the transformation.
• #### xd

`public double xd`
X translation component of the transformation.
• #### yx

`public double yx`
Matrix coefficient YX of the transformation.
• #### yy

`public double yy`
Matrix coefficient YY of the transformation.
• #### yd

`public double yd`
Y translation component of the transformation.
• ### Constructor Detail

• #### Transformation2D

`public Transformation2D()`
Creates a 2D affine transformation with identity transformation.
• #### Transformation2D

`public Transformation2D(double scale)`
Creates a 2D affine transformation with a specified scale.
Parameters:
`scale` - The scale to use for the transformation.
• ### Method Detail

• #### setZero

`public void setZero()`
Initializes a zero transformation. Transforms any coordinate to (0, 0).
• #### equals

`public boolean equals(Object other)`
Returns True when all members of this transformation are equal to the corresponding members of the other.
Overrides:
`equals` in class `Object`
• #### hashCode

`public int hashCode()`
Returns the hash code for the 2D transformation.
Overrides:
`hashCode` in class `Object`
• #### transform

```public void transform(Point[] pointsIn,
int count,
Point[] pointsOut)```
Transforms an array of points.
Parameters:
`pointsIn` - The points to be transformed.
`count` - The number of points to transform.
`pointsOut` - The transformed points are returned using this array. It should have the same or greater size as the input array.
• #### transform

```public void transform(double[] pointsXYInterleaved,
int start,
int count)```
Transforms an array of points stored in an array of doubles as interleaved XY coordinates.
Parameters:
`pointsXYInterleaved` - The array of points with interleaved X, Y values to be transformed.
`start` - The start point index to transform from (the actual element index is 2 * start).
`count` - The number of points to transform (the actual element count is 2 * count).
• #### multiply

`public void multiply(Transformation2D right)`
Multiplies this matrix on the right with the "right" matrix. Stores the result into this matrix and returns a reference to it.
Equivalent to this *= right.
Parameters:
`right` - The matrix to be multiplied with.
• #### mulLeft

`public void mulLeft(Transformation2D left)`
Multiplies this matrix on the left with the "left" matrix. Stores the result into this matrix and returns a reference to it.
Equivalent to this = left * this.
Parameters:
`left` - The matrix to be multiplied with.
• #### multiply

```public static void multiply(Transformation2D a,
Transformation2D b,
Transformation2D result)```
Performs multiplication of matrices a and b and places the result into this matrix. The a, b, and result could point to same objects.
Equivalent to result = a * b.
Parameters:
`a` - The 2D transformation to be multiplied.
`b` - The 2D transformation to be multiplied.
`result` - The 2D transformation created by multiplication of matrices.
• #### copy

`public Transformation2D copy()`
Returns a copy of the Transformation2D object.
Returns:
A copy of this object.
• #### getCoefficients

`public void getCoefficients(double[] coefs)`
Writes the matrix coefficients in the order XX, XY, XD, YX, YY, YD into the given array.
Parameters:
`coefs` - The array into which the coefficients are returned. Should be of size 6 elements.
• #### transform

`public double transform(double tolerance)`
Transforms a tolerance value.
Parameters:
`tolerance` - The tolerance value.
• #### setIdentity

`public void setIdentity()`
Sets this matrix to be the identity matrix.
• #### isIdentity

`public boolean isIdentity()`
Returns TRUE if this matrix is the identity matrix.
• #### isIdentity

`public boolean isIdentity(double tol)`
Returns TRUE if this matrix is an identity matrix within the given tolerance.
Parameters:
`tol` - The tolerance value.
• #### isReflective

`public boolean isReflective()`
Returns TRUE for reflective transformations. It inverts the sign of vector cross product.
• #### isUniform

`public boolean isUniform(double eps)`
Returns TRUE if this transformation is a uniform transformation. The uniform transformation is a transformation, which transforms a square to a square.
• #### isShift

`public boolean isShift()`
Returns TRUE if this transformation is a shift transformation. The shift transformation performs shift only.
• #### isShift

`public boolean isShift(double tol)`
Returns TRUE if this transformation is a shift transformation within the given tolerance.
Parameters:
`tol` - The tolerance value.
• #### isOrthonormal

`public boolean isOrthonormal(double tol)`
Returns TRUE if this is an orthonormal transformation with the given tolerance. The orthonormal: Rotation or rotoinversion and shift (preserves lengths of vectors and angles between vectors).
Parameters:
`tol` - The tolerance value.
• #### isDegenerate

`public boolean isDegenerate(double tol)`
Returns TRUE if this matrix is degenerated (does not have an inverse) within the given tolerance.
Parameters:
`tol` - The tolerance value.
• #### isScaleAndShift

`public boolean isScaleAndShift(double tol)`
Returns TRUE, if this transformation does not have rotation and shear within the given tolerance.
Parameters:
`tol` - The tolerance value.
• #### setShift

```public void setShift(double x,
double y)```
Set this transformation to be a shift.
Parameters:
`x` - The X coordinate to shift to.
`y` - The Y coordinate to shift to.
• #### setScale

```public void setScale(double x,
double y)```
Set this transformation to be a scale.
Parameters:
`x` - The X coordinate to scale to.
`y` - The Y coordinate to scale to.
• #### setScale

`public void setScale(double _scale)`
Set transformation to be a uniform scale.
Parameters:
`_scale` - The scale of the transformation.
• #### setFlipX

```public void setFlipX(double x0,
double x1)```
Sets the transformation to be a flip around the X axis. Flips the X coordinates so that the x0 becomes x1 and vice verse.
Parameters:
`x0` - The X coordinate to flip.
`x1` - The X coordinate to flip to.
• #### setFlipY

```public void setFlipY(double y0,
double y1)```
Sets the transformation to be a flip around the Y axis. Flips the Y coordinates so that the y0 becomes y1 and vice verse.
Parameters:
`y0` - The Y coordinate to flip.
`y1` - The Y coordinate to flip to.
• #### setShear

```public void setShear(double proportionX,
double proportionY)```
Set transformation to a shear.
Parameters:
`proportionX` - The proportion of shearing in x direction.
`proportionY` - The proportion of shearing in y direction.
• #### setRotate

`public void setRotate(double angle_in_Radians)`
Sets this transformation to be a rotation around point (0, 0). When the axis Y is directed up and X is directed to the right, the positive angle corresponds to the anti-clockwise rotation. When the axis Y is directed down and X is directed to the right, the positive angle corresponds to the clockwise rotation.
Parameters:
`angle_in_Radians` - The rotation angle in radian.
• #### setRotate

```public void setRotate(double cosA,
double sinA)```
Sets rotation for this transformation. When the axis Y is directed up and X is directed to the right, the positive angle corresponds to the anti-clockwise rotation. When the axis Y is directed down and X is directed to the right, the positive angle corresponds to the clockwise rotation.
Parameters:
`cosA` - The rotation angle.
`sinA` - The rotation angle.
• #### shift

```public void shift(double x,
double y)```
Shifts the transformation.
Parameters:
`x` - The shift factor in X direction.
`y` - The shift factor in Y direction.
• #### scale

```public void scale(double x,
double y)```
Scales the transformation.
Parameters:
`x` - The scale factor in X direction.
`y` - The scale factor in Y direction.
• #### flipX

```public void flipX(double x0,
double x1)```
Flips the transformation around the X axis.
Parameters:
`x0` - The X coordinate to flip.
`x1` - The X coordinate to flip to.
• #### flipY

```public void flipY(double y0,
double y1)```
Flips the transformation around the Y axis.
Parameters:
`y0` - The Y coordinate to flip.
`y1` - The Y coordinate to flip to.
• #### shear

```public void shear(double proportionX,
double proportionY)```
Shears the transformation.
Parameters:
`proportionX` - The proportion of shearing in x direction.
`proportionY` - The proportion of shearing in y direction.
• #### rotate

`public void rotate(double angle_in_Radians)`
Rotates the transformation.
Parameters:
`angle_in_Radians` - The rotation angle in radian.
• #### rotate

```public void rotate(double cos,
double sin)```
Rotates the transformation.
Parameters:
`cos` - The cos angle of the rotation.
`sin` - The sin angle of the rotation.
• #### rotate

```public void rotate(double cos,
double sin,
Point2D rotationCenter)```
Rotates the transformation aroung a center point.
Parameters:
`cos` - The cos angle of the rotation.
`sin` - sin angle of the rotation.
`rotationCenter` - The center point of the rotation.
• #### inverse

`public void inverse(Transformation2D inverse)`
Produces inverse matrix for this matrix and puts result into the inverse parameter.
Parameters:
`inverse` - The result inverse matrix.
• #### inverse

`public void inverse()`
Inverses the matrix.
• #### extractScaleTransform

```public void extractScaleTransform(Transformation2D scale,
Transformation2D rotateNshearNshift)```
Extracts scaling part of the transformation. this == scale * rotateNshearNshift.
Parameters:
`scale` - The destination matrix where the scale part is copied.
`rotateNshearNshift` - The destination matrix where the part excluding rotation is copied.