public class AffineTransformation extends Object implements Cloneable
Coordinates or Geometry.
An affine transformation is a mapping of the 2D plane into itself
via a series of transformations of the following basic types:
An affine transformation can be represented by a 3x3 matrix in the following form:
T = | m00 m01 m02 |
| m10 m11 m12 |
| 0 0 1 |
A coordinate P = (x, y) can be transformed to a new coordinate P' = (x', y')
by representing it as a 3x1 matrix and using matrix multiplication to compute:
| x' | = T x | x | | y' | | y | | 1 | | 1 |
compose(com.revolsys.jts.geom.util.AffineTransformation) method.
Composition is computed via multiplication of the
transformation matrices, and is defined as:
This produces a transformation whose effect is that of A followed by B. The methodsA.compose(B) = TB x TA
reflect(double, double), rotate(double),
scale(double, double), shear(double, double), and translate(double, double)
have the effect of composing a transformation of that type with
the transformation they are invoked on.
The composition of transformations is in general not commutative.
getInverse() method
computes the inverse of a transformation, if one exists.| Constructor and Description |
|---|
AffineTransformation()
Constructs a new identity transformation
|
AffineTransformation(AffineTransformation trans)
Constructs a transformation which is
a copy of the given one.
|
AffineTransformation(double[] matrix)
Constructs a new transformation whose
matrix has the specified values.
|
AffineTransformation(double m00,
double m01,
double m02,
double m10,
double m11,
double m12)
Constructs a new transformation whose
matrix has the specified values.
|
AffineTransformation(Point src0,
Point src1,
Point src2,
Point dest0,
Point dest1,
Point dest2)
Constructs a transformation
which maps the given source
points into the given destination points.
|
| Modifier and Type | Method and Description |
|---|---|
Object |
clone()
Clones this transformation
|
AffineTransformation |
compose(AffineTransformation trans)
Updates this transformation to be
the composition of this transformation with the given
AffineTransformation. |
AffineTransformation |
composeBefore(AffineTransformation trans)
Updates this transformation to be the composition
of a given
AffineTransformation with this transformation. |
boolean |
equals(Object obj)
Tests if an object is an
AffineTransformation
and has the same matrix as
this transformation.
|
double |
getDeterminant()
Computes the determinant of the transformation matrix.
|
AffineTransformation |
getInverse()
Computes the inverse of this transformation, if one
exists.
|
double[] |
getMatrixEntries()
Gets an array containing the entries
of the transformation matrix.
|
boolean |
isIdentity()
Tests if this transformation is the identity transformation.
|
AffineTransformation |
reflect(double x,
double y)
Updates the value of this transformation
to that of a reflection transformation composed
with the current value.
|
AffineTransformation |
reflect(double x0,
double y0,
double x1,
double y1)
Updates the value of this transformation
to that of a reflection transformation composed
with the current value.
|
static AffineTransformation |
reflectionInstance(double x,
double y)
Creates a transformation for a reflection about the
line (0,0) - (x,y).
|
static AffineTransformation |
reflectionInstance(double x0,
double y0,
double x1,
double y1)
Creates a transformation for a reflection about the
line (x0,y0) - (x1,y1).
|
AffineTransformation |
rotate(double theta)
Updates the value of this transformation
to that of a rotation transformation composed
with the current value.
|
AffineTransformation |
rotate(double sinTheta,
double cosTheta)
Updates the value of this transformation
to that of a rotation around the origin composed
with the current value,
with the sin and cos of the rotation angle specified directly.
|
AffineTransformation |
rotate(double theta,
double x,
double y)
Updates the value of this transformation
to that of a rotation around a given point composed
with the current value.
|
AffineTransformation |
rotate(double sinTheta,
double cosTheta,
double x,
double y)
Updates the value of this transformation
to that of a rotation around a given point composed
with the current value,
with the sin and cos of the rotation angle specified directly.
|
static AffineTransformation |
rotationInstance(double theta)
Creates a transformation for a rotation
about the origin
by an angle theta.
|
static AffineTransformation |
rotationInstance(double sinTheta,
double cosTheta)
Creates a transformation for a rotation
by an angle theta,
specified by the sine and cosine of the angle.
|
static AffineTransformation |
rotationInstance(double theta,
double x,
double y)
Creates a transformation for a rotation
about the point (x,y) by an angle theta.
|
static AffineTransformation |
rotationInstance(double sinTheta,
double cosTheta,
double x,
double y)
Creates a transformation for a rotation
about the point (x,y) by an angle theta,
specified by the sine and cosine of the angle.
|
AffineTransformation |
scale(double xScale,
double yScale)
Updates the value of this transformation
to that of a scale transformation composed
with the current value.
|
static AffineTransformation |
scaleInstance(double xScale,
double yScale)
Creates a transformation for a scaling relative to the origin.
|
static AffineTransformation |
scaleInstance(double xScale,
double yScale,
double x,
double y)
Creates a transformation for a scaling relative to the point (x,y).
|
AffineTransformation |
setToIdentity()
Sets this transformation to be the identity transformation.
|
AffineTransformation |
setToReflection(double x,
double y)
Sets this transformation to be a reflection
about the line defined by vector (x,y).
|
AffineTransformation |
setToReflection(double x0,
double y0,
double x1,
double y1)
Sets this transformation to be a reflection
about the line defined by a line (x0,y0) - (x1,y1).
|
AffineTransformation |
setToReflectionBasic(double x0,
double y0,
double x1,
double y1)
Explicitly computes the math for a reflection.
|
AffineTransformation |
setToRotation(double theta)
Sets this transformation to be a rotation around the origin.
|
AffineTransformation |
setToRotation(double sinTheta,
double cosTheta)
Sets this transformation to be a rotation around the origin
by specifying the sin and cos of the rotation angle directly.
|
AffineTransformation |
setToRotation(double theta,
double x,
double y)
Sets this transformation to be a rotation
around a given point (x,y).
|
AffineTransformation |
setToRotation(double sinTheta,
double cosTheta,
double x,
double y)
Sets this transformation to be a rotation
around a given point (x,y)
by specifying the sin and cos of the rotation angle directly.
|
AffineTransformation |
setToScale(double xScale,
double yScale)
Sets this transformation to be a scaling.
|
AffineTransformation |
setToShear(double xShear,
double yShear)
Sets this transformation to be a shear.
|
AffineTransformation |
setToTranslation(double dx,
double dy)
Sets this transformation to be a translation.
|
AffineTransformation |
setTransformation(AffineTransformation trans)
Sets this transformation to be a copy of the given one
|
AffineTransformation |
setTransformation(double m00,
double m01,
double m02,
double m10,
double m11,
double m12)
Sets this transformation's matrix to have the given values.
|
AffineTransformation |
shear(double xShear,
double yShear)
Updates the value of this transformation
to that of a shear transformation composed
with the current value.
|
static AffineTransformation |
shearInstance(double xShear,
double yShear)
Creates a transformation for a shear.
|
String |
toString()
Gets a text representation of this transformation.
|
Geometry |
transform(Geometry g)
Cretaes a new @link Geometry which is the result
of this transformation applied to the input Geometry.
|
Point |
transform(Point src)
Applies this transformation to the src coordinate
and places the results in the dest coordinate
(which may be the same as the source).
|
AffineTransformation |
translate(double x,
double y)
Updates the value of this transformation
to that of a translation transformation composed
with the current value.
|
static AffineTransformation |
translationInstance(double x,
double y)
Creates a transformation for a translation.
|
public AffineTransformation()
public AffineTransformation(AffineTransformation trans)
trans - the transformation to copypublic AffineTransformation(double m00,
double m01,
double m02,
double m10,
double m11,
double m12)
m00 - the entry for the [0, 0] element in the transformation matrixm01 - the entry for the [0, 1] element in the transformation matrixm02 - the entry for the [0, 2] element in the transformation matrixm10 - the entry for the [1, 0] element in the transformation matrixm11 - the entry for the [1, 1] element in the transformation matrixm12 - the entry for the [1, 2] element in the transformation matrixpublic AffineTransformation(double[] matrix)
matrix - an array containing the 6 values { m00, m01, m02, m10, m11, m12 }NullPointerException - if matrix is nullArrayIndexOutOfBoundsException - if matrix is too smallpublic AffineTransformation(Point src0, Point src1, Point src2, Point dest0, Point dest1, Point dest2)
src0 - source point 0src1 - source point 1src2 - source point 2dest0 - the mapped point for source point 0dest1 - the mapped point for source point 1dest2 - the mapped point for source point 2public static AffineTransformation reflectionInstance(double x, double y)
x - the x-ordinate of a point on the reflection liney - the y-ordinate of a point on the reflection linepublic static AffineTransformation reflectionInstance(double x0, double y0, double x1, double y1)
x0 - the x-ordinate of a point on the reflection liney0 - the y-ordinate of a point on the reflection linex1 - the x-ordinate of a another point on the reflection liney1 - the y-ordinate of a another point on the reflection linepublic static AffineTransformation rotationInstance(double theta)
theta - the rotation angle, in radianspublic static AffineTransformation rotationInstance(double sinTheta, double cosTheta)
sinTheta - the sine of the rotation anglecosTheta - the cosine of the rotation anglepublic static AffineTransformation rotationInstance(double theta, double x, double y)
theta - the rotation angle, in radiansx - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic static AffineTransformation rotationInstance(double sinTheta, double cosTheta, double x, double y)
sinTheta - the sine of the rotation anglecosTheta - the cosine of the rotation anglex - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic static AffineTransformation scaleInstance(double xScale, double yScale)
xScale - the value to scale by in the x directionyScale - the value to scale by in the y directionpublic static AffineTransformation scaleInstance(double xScale, double yScale, double x, double y)
xScale - the value to scale by in the x directionyScale - the value to scale by in the y directionx - the x-ordinate of the point to scale aroundy - the y-ordinate of the point to scale aroundpublic static AffineTransformation shearInstance(double xShear, double yShear)
xShear - the value to shear by in the x directionyShear - the value to shear by in the y directionpublic static AffineTransformation translationInstance(double x, double y)
x - the value to translate by in the x directiony - the value to translate by in the y directionpublic Object clone()
public AffineTransformation compose(AffineTransformation trans)
AffineTransformation.
This produces a transformation whose effect
is equal to applying this transformation
followed by the argument transformation.
Mathematically,
A.compose(B) = TB x TA
trans - an affine transformationpublic AffineTransformation composeBefore(AffineTransformation trans)
AffineTransformation with this transformation.
This produces a transformation whose effect
is equal to applying the argument transformation
followed by this transformation.
Mathematically,
A.composeBefore(B) = TA x TB
trans - an affine transformationpublic boolean equals(Object obj)
public double getDeterminant()
If the determinant is zero, the transform is singular (not invertible), and operations which attempt to compute an inverse will throw a NoninvertibleTransformException.| m00 m01 m02 | | m10 m11 m12 | = m00 * m11 - m01 * m10 | 0 0 1 |
getInverse()public AffineTransformation getInverse() throws NoninvertibleTransformationException
The matrix of the inverse is equal to the inverse of the matrix for the transformation. It is computed as follows:
1
inverse(A) = --- x adjoint(A)
det
= 1 | m11 -m01 m01*m12-m02*m11 |
--- x | -m10 m00 -m00*m12+m10*m02 |
det | 0 0 m00*m11-m10*m01 |
= | m11/det -m01/det m01*m12-m02*m11/det |
| -m10/det m00/det -m00*m12+m10*m02/det |
| 0 0 1 |
NoninvertibleTransformationExceptiongetDeterminant()public double[] getMatrixEntries()
m00, m01, m02, m10, m11, m12
public boolean isIdentity()
public AffineTransformation reflect(double x, double y)
x - the x-ordinate of the line to reflect aroundy - the y-ordinate of the line to reflect aroundpublic AffineTransformation reflect(double x0, double y0, double x1, double y1)
x0 - the x-ordinate of a point on the line to reflect aroundy0 - the y-ordinate of a point on the line to reflect aroundx1 - the x-ordinate of a point on the line to reflect aroundy1 - the y-ordinate of a point on the line to reflect aroundpublic AffineTransformation rotate(double theta)
theta - the angle to rotate by, in radianspublic AffineTransformation rotate(double sinTheta, double cosTheta)
sinTheta - the sine of the angle to rotate bycosTheta - the cosine of the angle to rotate bypublic AffineTransformation rotate(double theta, double x, double y)
theta - the angle to rotate by, in radiansx - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic AffineTransformation rotate(double sinTheta, double cosTheta, double x, double y)
sinTheta - the sine of the angle to rotate bycosTheta - the cosine of the angle to rotate byx - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic AffineTransformation scale(double xScale, double yScale)
xScale - the value to scale by in the x directionyScale - the value to scale by in the y directionpublic AffineTransformation setToIdentity()
| 1 0 0 | | 0 1 0 | | 0 0 1 |
public AffineTransformation setToReflection(double x, double y)
d = sqrt(x2 + y2) sin = y / d; cos = x / d; Tref = Trot(sin, cos) x Tscale(1, -1) x Trot(-sin, cos)
x - the x-component of the reflection line vectory - the y-component of the reflection line vectorpublic AffineTransformation setToReflection(double x0, double y0, double x1, double y1)
x0 - the X ordinate of one point on the reflection liney0 - the Y ordinate of one point on the reflection linex1 - the X ordinate of another point on the reflection liney1 - the Y ordinate of another point on the reflection linepublic AffineTransformation setToReflectionBasic(double x0, double y0, double x1, double y1)
x0 - the X ordinate of one point on the reflection liney0 - the Y ordinate of one point on the reflection linex1 - the X ordinate of another point on the reflection liney1 - the Y ordinate of another point on the reflection linepublic AffineTransformation setToRotation(double theta)
| cos(theta) -sin(theta) 0 | | sin(theta) cos(theta) 0 | | 0 0 1 |
theta - the rotation angle, in radianspublic AffineTransformation setToRotation(double sinTheta, double cosTheta)
| cosTheta -sinTheta 0 | | sinTheta cosTheta 0 | | 0 0 1 |
sinTheta - the sine of the rotation anglecosTheta - the cosine of the rotation anglepublic AffineTransformation setToRotation(double theta, double x, double y)
| cosTheta -sinTheta x-x*cos+y*sin | | sinTheta cosTheta y-x*sin-y*cos | | 0 0 1 |
theta - the rotation angle, in radiansx - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic AffineTransformation setToRotation(double sinTheta, double cosTheta, double x, double y)
| cosTheta -sinTheta x-x*cos+y*sin | | sinTheta cosTheta y-x*sin-y*cos | | 0 0 1 |
sinTheta - the sine of the rotation anglecosTheta - the cosine of the rotation anglex - the x-ordinate of the rotation pointy - the y-ordinate of the rotation pointpublic AffineTransformation setToScale(double xScale, double yScale)
| xScale 0 dx | | 1 yScale dy | | 0 0 1 |
xScale - the amount to scale x-ordinates byyScale - the amount to scale y-ordinates bypublic AffineTransformation setToShear(double xShear, double yShear)
Note that a shear of (1, 1) is not equal to shear(1, 0) composed with shear(0, 1). Instead, shear(1, 1) corresponds to a mapping onto the line x = y.| 1 xShear 0 | | yShear 1 0 | | 0 0 1 |
xShear - the x component to shear byyShear - the y component to shear bypublic AffineTransformation setToTranslation(double dx, double dy)
| 1 0 dx | | 1 0 dy | | 0 0 1 |
dx - the x component to translate bydy - the y component to translate bypublic AffineTransformation setTransformation(AffineTransformation trans)
trans - a transformation to copypublic AffineTransformation setTransformation(double m00, double m01, double m02, double m10, double m11, double m12)
m00 - the entry for the [0, 0] element in the transformation matrixm01 - the entry for the [0, 1] element in the transformation matrixm02 - the entry for the [0, 2] element in the transformation matrixm10 - the entry for the [1, 0] element in the transformation matrixm11 - the entry for the [1, 1] element in the transformation matrixm12 - the entry for the [1, 2] element in the transformation matrixpublic AffineTransformation shear(double xShear, double yShear)
xShear - the value to shear by in the x directionyShear - the value to shear by in the y directionpublic String toString()
AffineTransformation[[m00, m01, m02], [m10, m11, m12]]
public Geometry transform(Geometry g)
seq - a Geometrypublic Point transform(Point src)
src - the coordinate to transformdest - the coordinate to accept the resultspublic AffineTransformation translate(double x, double y)
x - the value to translate by in the x directiony - the value to translate by in the y directionCopyright © 2015 Revolution Systems Inc.. All rights reserved.