java.lang.Object | +--java.awt.geom.AffineTransformAll Implemented Interfaces:
static int | TYPE_FLIPThe transformation includes a flip about an axis, swapping between right-handed and left-handed coordinate systems. |
static int | TYPE_GENERAL_ROTATIONThe transformation includes a rotation by an arbitrary angle. |
static int | TYPE_GENERAL_SCALEThe 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_TRANSFORMThe transformation is an arbitrary conversion of coordinates which could not be decomposed into the other TYPEs. |
static int | TYPE_IDENTITYThe transformation is the identity (x' = x, y' = y). |
static int | TYPE_MASK_ROTATIONThis constant checks if either variety of rotation is performed. |
static int | TYPE_MASK_SCALEThis constant checks if either variety of scale transform is performed. |
static int | TYPE_QUADRANT_ROTATIONThe transformation includes a rotation of a multiple of 90 degrees (PI/2 radians). |
static int | TYPE_TRANSLATIONThe transformation includes a translation - shifting in the x or y direction without changing length or angles. |
static int | TYPE_UNIFORM_SCALEThe 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_FLIPTYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMgetType()public static final int TYPE_GENERAL_ROTATIONTYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_TRANSFORMTYPE_MASK_ROTATIONgetType()public static final int TYPE_GENERAL_SCALETYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMTYPE_MASK_SCALEgetType()public static final int TYPE_GENERAL_TRANSFORMTYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONgetType()public static final int TYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMgetType()public static final int TYPE_MASK_ROTATIONpublic static final int TYPE_MASK_SCALEpublic static final int TYPE_QUADRANT_ROTATIONTYPE_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_FLIPTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMTYPE_MASK_ROTATIONgetType()public static final int TYPE_TRANSLATIONTYPE_IDENTITYTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMgetType()public static final int TYPE_UNIFORM_SCALETYPE_IDENTITYTYPE_TRANSLATIONTYPE_GENERAL_SCALETYPE_FLIPTYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMTYPE_MASK_SCALEgetType()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_IDENTITYTYPE_TRANSLATIONTYPE_UNIFORM_SCALETYPE_GENERAL_SCALETYPE_QUADRANT_ROTATIONTYPE_GENERAL_ROTATIONTYPE_GENERAL_TRANSFORMpublic 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]]".