java.lang.Object | +--java.awt.geom.AffineTransformAll Implemented Interfaces:
static int | TYPE_FLIP The transformation includes a flip about an axis, swapping between right-handed and left-handed coordinate systems. |
static int | TYPE_GENERAL_ROTATION The transformation includes a rotation by an arbitrary angle. |
static int | TYPE_GENERAL_SCALE The transformation includes a general scale - length is scaled in either or both the x and y directions, but by different amounts; without affecting angles. |
static int | TYPE_GENERAL_TRANSFORM The transformation is an arbitrary conversion of coordinates which could not be decomposed into the other TYPEs. |
static int | TYPE_IDENTITY The transformation is the identity (x' = x, y' = y). |
static int | TYPE_MASK_ROTATION This constant checks if either variety of rotation is performed. |
static int | TYPE_MASK_SCALE This constant checks if either variety of scale transform is performed. |
static int | TYPE_QUADRANT_ROTATION The transformation includes a rotation of a multiple of 90 degrees (PI/2 radians). |
static int | TYPE_TRANSLATION The transformation includes a translation - shifting in the x or y direction without changing length or angles. |
static int | TYPE_UNIFORM_SCALE The transformation includes a uniform scale - length is scaled in both the x and y directions by the same amount, without affecting angles. |
AffineTransform() Construct a new identity transform:[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ] |
AffineTransform(java.awt.geom.AffineTransform tx) Create a new transform which copies the given one. |
AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12) Construct a transform with the given matrix entries:[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ] |
AffineTransform(float[] f) Construct a transform from a sequence of float entries. |
AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12) Construct a transform with the given matrix entries:[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ] |
AffineTransform(double[] d) Construct a transform from a sequence of double entries. |
java.lang.Object | clone() Create a new transform of the same run-time type, with the same transforming properties as this one. |
void | concatenate(java.awt.geom.AffineTransform tx) Set this transform to the result of performing the original version of this followed by tx. |
java.awt.geom.AffineTransform | createInverse() Returns a transform, which if concatenated to this one, will result in the identity transform. |
java.awt.Shape | createTransformedShape(java.awt.Shape src) Return a new Shape, based on the given one, where the path of the shape has been transformed by this transform. |
java.awt.geom.Point2D | deltaTransform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst) Perform this transformation, less any translation, on the given source point, and store the result in the destination (creating it if necessary). |
void | deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num) Perform this transformation, less any translation, on an array of points, in (x,y) pairs, storing the results in another (possibly same) array. |
boolean | equals(java.lang.Object obj) Compares two transforms for equality. |
double | getDeterminant() Return the determinant of this transform matrix. |
void | getMatrix(double[] d) Return the matrix of values used in this transform. |
static java.awt.geom.AffineTransform | getRotateInstance(double theta) Returns a rotation transform. |
static java.awt.geom.AffineTransform | getRotateInstance(double theta, double x, double y) Returns a rotation transform about a point. |
static java.awt.geom.AffineTransform | getScaleInstance(double sx, double sy) Returns a scaling transform:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ] |
double | getScaleX() Returns the X coordinate scaling factor of the matrix. |
double | getScaleY() Returns the Y coordinate scaling factor of the matrix. |
static java.awt.geom.AffineTransform | getShearInstance(double shx, double shy) Returns a shearing transform (points are shifted in the x direction based on a factor of their y coordinate, and in the y direction as a factor of their x coordinate):[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ] |
double | getShearX() Returns the X coordinate shearing factor of the matrix. |
double | getShearY() Returns the Y coordinate shearing factor of the matrix. |
static java.awt.geom.AffineTransform | getTranslateInstance(double tx, double ty) Returns a translation transform:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ] |
double | getTranslateX() Returns the X coordinate translation factor of the matrix. |
double | getTranslateY() Returns the Y coordinate translation factor of the matrix. |
int | getType() Returns the type of this transform. |
int | hashCode() Return the hashcode for this transformation. |
java.awt.geom.Point2D | inverseTransform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst) Perform the inverse of this transformation on the given source point, and store the result in the destination (creating it if necessary). |
void | inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num) Perform the inverse of this transformation on an array of points, in (x,y) pairs, storing the results in another (possibly same) array. |
boolean | isIdentity() Tests if this transformation is the identity:[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ] |
void | preConcatenate(java.awt.geom.AffineTransform tx) Set this transform to the result of performing tx followed by the original version of this. |
void | rotate(double theta) Concatenate a rotation onto this transform. |
void | rotate(double theta, double x, double y) Concatenate a rotation about a point onto this transform. |
void | scale(double sx, double sy) Concatenate a scale onto this transform. |
void | setToIdentity() Reset this transform to the identity (no transformation):[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ] |
void | setToRotation(double theta) Set this transform to a rotation. |
void | setToRotation(double theta, double x, double y) Set this transform to a rotation about a point. |
void | setToScale(double sx, double sy) Set this transform to a scale:[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ] |
void | setToShear(double shx, double shy) Set this transform to a shear (points are shifted in the x direction based on a factor of their y coordinate, and in the y direction as a factor of their x coordinate):[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ] |
void | setToTranslation(double tx, double ty) Set this transform to a translation:[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ] |
void | setTransform(java.awt.geom.AffineTransform tx) Set this transform to a copy of the given one. |
void | setTransform(double m00, double m10, double m01, double m11, double m02, double m12) Set this transform to the given values:[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ] |
void | shear(double shx, double shy) Concatenate a shearing onto this transform. |
java.lang.String | toString() Returns a string representation of the transform, in the format:
|
java.awt.geom.Point2D | transform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst) Perform this transformation on the given source point, and store the result in the destination (creating it if necessary). |
void | transform(java.awt.geom.Point2D src, int srcOff, java.awt.geom.Point2D dst, int dstOff, int num) Perform this transformation on an array of points, storing the results in another (possibly same) array. |
void | transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int num) Perform this transformation on an array of points, in (x,y) pairs, storing the results in another (possibly same) array. |
void | transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num) Perform this transformation on an array of points, in (x,y) pairs, storing the results in another (possibly same) array. |
void | transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int num) Perform this transformation on an array of points, in (x,y) pairs, storing the results in another array. |
void | transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int num) Perform this transformation on an array of points, in (x,y) pairs, storing the results in another array. |
void | translate(double tx, double ty) Concatenate a translation onto this transform. |
public static final int TYPE_FLIP
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
getType()
public static final int TYPE_GENERAL_ROTATION
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_TRANSFORM
TYPE_MASK_ROTATION
getType()
public static final int TYPE_GENERAL_SCALE
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
TYPE_MASK_SCALE
getType()
public static final int TYPE_GENERAL_TRANSFORM
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
getType()
public static final int TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
getType()
public static final int TYPE_MASK_ROTATION
public static final int TYPE_MASK_SCALE
public static final int TYPE_QUADRANT_ROTATION
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
TYPE_MASK_ROTATION
getType()
public static final int TYPE_TRANSLATION
TYPE_IDENTITY
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
getType()
public static final int TYPE_UNIFORM_SCALE
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_GENERAL_SCALE
TYPE_FLIP
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
TYPE_MASK_SCALE
getType()
public AffineTransform()
[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]
public AffineTransform(double[] d)
[ d[0] d[2] (d[4]) ] [ d[1] d[3] (d[5]) ] [ 0 0 1 ]
d
- the matrix to copy from, with at least 4 (6) entriesNullPointerException
- if d is nullArrayIndexOutOfBoundsException
- if d is too smallpublic AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ]
m00
- the x scaling componentm10
- the y shearing componentm01
- the x shearing componentm11
- the y scaling componentm02
- the x translation componentm12
- the y translation componentpublic AffineTransform(float[] f)
[ f[0] f[2] (f[4]) ] [ f[1] f[3] (f[5]) ] [ 0 0 1 ]
f
- the matrix to copy from, with at least 4 (6) entriesNullPointerException
- if f is nullArrayIndexOutOfBoundsException
- if f is too smallpublic AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)
[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ]
m00
- the x scaling componentm10
- the y shearing componentm01
- the x shearing componentm11
- the y scaling componentm02
- the x translation componentm12
- the y translation componentpublic AffineTransform(java.awt.geom.AffineTransform tx)
tx
- the transform to copyNullPointerException
- if tx is nullpublic Object clone()
public void concatenate(java.awt.geom.AffineTransform tx)
[ this ] = [ this ] x [ tx ]
tx
- the transform to concatenateNullPointerException
- if tx is nullpublic AffineTransform createInverse()
NoninvertibleTransformException
- if inversion is not possiblepublic Shape createTransformedShape(java.awt.Shape src)
src
- the shape source to transformNullPointerException
- if src is nullpublic void deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num)
[ x' ] = [ m00 m01 ] [ x ] = [ m00 * x + m01 * y ] [ y' ] [ m10 m11 ] [ y ] = [ m10 * x + m11 * y ]
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededpublic Point2D deltaTransform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst)
[ x' ] = [ m00 m01 ] [ x ] = [ m00 * x + m01 * y ] [ y' ] [ m10 m11 ] [ y ] = [ m10 * x + m11 * y ]
src
- the source pointdst
- the destination, or nullNullPointerException
- if src is nullpublic boolean equals(java.lang.Object obj)
obj
- the transform to comparepublic double getDeterminant()
If this is a uniform scale transformation, the determinant also represents the squared value of the scale. Otherwise, it carries little additional meaning. The determinant is calculated as:
| m00 m01 m02 | | m10 m11 m12 | = m00 * m11 - m01 * m10 | 0 0 1 |
public void getMatrix(double[] d)
[ d[0] d[2] (d[4]) ] [ d[1] d[3] (d[5]) ] [ 0 0 1 ]
d
- the matrix to store the results into; with 4 (6) entriesNullPointerException
- if d is nullArrayIndexOutOfBoundsException
- if d is too smallpublic static AffineTransform getRotateInstance(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]
theta
- the rotation anglepublic static AffineTransform getRotateInstance(double theta, double x, double y)
AffineTransform tx = new AffineTransform(); tx.setToTranslation(x, y); tx.rotate(theta); tx.translate(-x, -y);
The resulting matrix is:
[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]
theta
- the rotation anglex
- the x coordinate of the pivot pointy
- the y coordinate of the pivot pointpublic static AffineTransform getScaleInstance(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- the x scaling factorsy
- the y scaling factorpublic double getScaleX()
public double getScaleY()
public static AffineTransform getShearInstance(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- the x shearing factorshy
- the y shearing factorpublic double getShearX()
public double getShearY()
public static AffineTransform getTranslateInstance(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- the x translation distancety
- the y translation distancepublic double getTranslateX()
public double getTranslateY()
public int getType()
TYPE_IDENTITY
TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
TYPE_GENERAL_TRANSFORM
public int hashCode()
long l = Double.doubleToLongBits(getScaleX()); l = l * 31 + Double.doubleToLongBits(getShearY()); l = l * 31 + Double.doubleToLongBits(getShearX()); l = l * 31 + Double.doubleToLongBits(getScaleY()); l = l * 31 + Double.doubleToLongBits(getTranslateX()); l = l * 31 + Double.doubleToLongBits(getTranslateY()); return (int) ((l >> 32) ^ l);
public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num)
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededNoninvertibleTransformException
- if the inverse does not existpublic Point2D inverseTransform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst)
src
- the source pointdst
- the destination, or nullNullPointerException
- if src is nullNoninvertibleTransformException
- if the inverse does not existpublic boolean isIdentity()
[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]
public void preConcatenate(java.awt.geom.AffineTransform tx)
[ this ] = [ tx ] x [ this ]
tx
- the transform to concatenateNullPointerException
- if tx is nullpublic void rotate(double theta)
concatenate(AffineTransform.getRotateInstance(theta))
.
theta
- the rotation anglepublic void rotate(double theta, double x, double y)
concatenate(AffineTransform.getRotateInstance(theta, x, y))
.
theta
- the rotation anglex
- the x coordinate of the pivot pointy
- the y coordinate of the pivot pointpublic void scale(double sx, double sy)
concatenate(AffineTransform.getScaleInstance(sx, sy))
.
sx
- the x scaling factorsy
- the y scaling factorpublic void setToIdentity()
[ 1 0 0 ] [ 0 1 0 ] [ 0 0 1 ]
public void setToRotation(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]
theta
- the rotation anglepublic void setToRotation(double theta, double x, double y)
tx.setToTranslation(x, y); tx.rotate(theta); tx.translate(-x, -y);
The resulting matrix is:
[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]
theta
- the rotation anglex
- the x coordinate of the pivot pointy
- the y coordinate of the pivot pointpublic void setToScale(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- the x scaling factorsy
- the y scaling factorpublic void setToShear(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- the x shearing factorshy
- the y shearing factorpublic void setToTranslation(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- the x translation distancety
- the y translation distancepublic void setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
[ m00 m01 m02 ] [ m10 m11 m12 ] [ 0 0 1 ]
m00
- the x scaling componentm10
- the y shearing componentm01
- the x shearing componentm11
- the y scaling componentm02
- the x translation componentm12
- the y translation componentpublic void setTransform(java.awt.geom.AffineTransform tx)
tx
- the transform to copyNullPointerException
- if tx is nullpublic void shear(double shx, double shy)
concatenate(AffineTransform.getShearInstance(sx, sy))
.
shx
- the x shearing factorshy
- the y shearing factorpublic String toString()
"AffineTransform[[" + m00 + ", " + m01 + ", " + m02 + "], ["
+ m10 + ", " + m11 + ", " + m12 + "]]"
.
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int num)
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededpublic void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int num)
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededpublic void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int num)
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededpublic void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int num)
srcPts
- the array of source pointssrcOff
- the starting offset into srcdstPts
- the array of destination pointsdstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is nullArrayIndexOutOfBoundsException
- if array bounds are exceededpublic void transform(java.awt.geom.Point2D src, int srcOff, java.awt.geom.Point2D dst, int dstOff, int num)
src
- the array of source pointssrcOff
- the starting offset into srcdst
- the array of destination points (may have null entries)dstOff
- the starting offset into dstnum
- the number of points to transformNullPointerException
- if src or dst is null, or src has null
entriesArrayIndexOutOfBoundsException
- if array bounds are exceededArrayStoreException
- if new points are incompatible with dstpublic Point2D transform(java.awt.geom.Point2D src, java.awt.geom.Point2D dst)
src
- the source pointdst
- the destination, or nullNullPointerException
- if src is nullpublic void translate(double tx, double ty)
concatenate(AffineTransform.getTranslateInstance(tx, ty))
.
tx
- the x translation distancety
- the y translation distance
The transformation can be represented using matrix math on a 3x3 array. Given (x,y), the transformation (x',y') can be found by:
The bottom row of the matrix is constant, so a transform can be uniquely represented (as in toString) by "[[m00, m01, m02], [m10, m11, m12]]".