org.geotoolkit.referencing.operation.transform
Class AffineTransform2D

Object
  extended by AffineTransform
      extended by XAffineTransform
          extended by AffineTransform2D
All Implemented Interfaces:
Serializable, Cloneable, Formattable, LinearTransform, Parameterized, LenientComparable, MathTransform, MathTransform2D

@Immutable
public class AffineTransform2D
extends XAffineTransform
implements MathTransform2D, LinearTransform, Parameterized, Formattable, Cloneable

Transforms two-dimensional coordinate points using an affine transform. This class both extends AffineTransform and implements MathTransform2D, so it can be used as a bridge between Java2D and the referencing module. Note that this bridge role involve a tricky issue with the equals method, hopefully to occur only in exceptional corner cases.

See any of the following providers for a list of programmatic parameters:

Since:
1.2
Version:
3.18
Author:
Martin Desruisseaux (IRD, Geomatys)
See Also:
ProjectiveTransform, Serialized Form
Module:
referencing/geotk-referencing (download)    View source code for this class

Field Summary
 
Fields inherited from class AffineTransform
TYPE_FLIP, TYPE_GENERAL_ROTATION, TYPE_GENERAL_SCALE, TYPE_GENERAL_TRANSFORM, TYPE_IDENTITY, TYPE_MASK_ROTATION, TYPE_MASK_SCALE, TYPE_QUADRANT_ROTATION, TYPE_TRANSLATION, TYPE_UNIFORM_SCALE
 
Constructor Summary
AffineTransform2D(AffineTransform transform)
          Constructs a new affine transform with the same coefficient than the specified transform.
AffineTransform2D(double m00, double m10, double m01, double m11, double m02, double m12)
          Constructs a new AffineTransform2D from 6 values representing the 6 specifiable entries of the 3×3 transformation matrix.
 
Method Summary
protected  void checkPermission()
          Throws an UnsupportedOperationException when a mutable method is invoked, since AffineTransform2D must be immutable.
 AffineTransform clone()
          Returns a new affine transform which is a modifiable copy of this transform.
 Shape createTransformedShape(Shape shape)
          Transforms the specified shape.
 Matrix derivative(DirectPosition point)
          Gets the derivative of this transform at a point.
 Matrix derivative(Point2D point)
          Gets the derivative of this transform at a point.
 boolean equals(Object object)
          Compares this affine transform with the given object for equality.
 boolean equals(Object object, ComparisonMode mode)
          Compares this affine transform with the given object for equality.
 String formatWKT(Formatter formatter)
          Format the inner part of a Well Known Text (WKT) element.
 Matrix getMatrix()
          Returns this transform as an affine transform matrix.
 ParameterDescriptorGroup getParameterDescriptors()
          Returns the parameter descriptors for this math transform.
 ParameterValueGroup getParameterValues()
          Returns the matrix elements as a group of parameters values.
 int getSourceDimensions()
          Gets the dimension of input points, which is fixed to 2.
 int getTargetDimensions()
          Gets the dimension of output points, which is fixed to 2.
 MathTransform2D inverse()
          Creates the inverse transform of this object.
 String toString()
          Returns the WKT representation of this transform.
 String toWKT()
          Returns the WKT for this transform.
 DirectPosition transform(DirectPosition ptSrc, DirectPosition ptDst)
          Transforms the specified ptSrc and stores the result in ptDst.
 
Methods inherited from class XAffineTransform
concatenate, getFlip, getRotation, getScale, getScaleInstance, getScaleX0, getScaleY0, getSwapXY, inverseDeltaTransform, inverseTransform, invert, isIdentity, isIdentity, preConcatenate, quadrantRotate, quadrantRotate, rotate, rotate, rotate, rotate, roundIfAlmostInteger, scale, setToIdentity, setToQuadrantRotation, setToQuadrantRotation, setToRotation, setToRotation, setToRotation, setToRotation, setToScale, setToShear, setToTranslation, setTransform, setTransform, shear, transform, transform, translate
 
Methods inherited from class AffineTransform
createInverse, deltaTransform, deltaTransform, getDeterminant, getMatrix, getQuadrantRotateInstance, getQuadrantRotateInstance, getRotateInstance, getRotateInstance, getRotateInstance, getRotateInstance, getScaleInstance, getScaleX, getScaleY, getShearInstance, getShearX, getShearY, getTranslateInstance, getTranslateX, getTranslateY, getType, hashCode, inverseTransform, inverseTransform, isIdentity, transform, transform, transform, transform, transform, transform
 
Methods inherited from class Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface MathTransform2D
transform
 
Methods inherited from interface LinearTransform
isIdentity
 
Methods inherited from interface MathTransform
isIdentity, transform, transform, transform, transform
 

Constructor Detail

AffineTransform2D

public AffineTransform2D(AffineTransform transform)
Constructs a new affine transform with the same coefficient than the specified transform.

Parameters:
transform - The affine transform to copy.

AffineTransform2D

public AffineTransform2D(double m00,
                         double m10,
                         double m01,
                         double m11,
                         double m02,
                         double m12)
Constructs a new AffineTransform2D from 6 values representing the 6 specifiable entries of the 3×3 transformation matrix. Those values are given unchanged to the super class constructor.

Parameters:
m00 - the X coordinate scaling.
m10 - the Y coordinate shearing.
m01 - the X coordinate shearing.
m11 - the Y coordinate scaling.
m02 - the X coordinate translation.
m12 - the Y coordinate translation.
Since:
2.5
Method Detail

checkPermission

protected final void checkPermission()
                              throws UnsupportedOperationException
Throws an UnsupportedOperationException when a mutable method is invoked, since AffineTransform2D must be immutable.

Overrides:
checkPermission in class XAffineTransform
Throws:
UnsupportedOperationException - Always thrown.

getParameterDescriptors

public ParameterDescriptorGroup getParameterDescriptors()
Returns the parameter descriptors for this math transform.

Specified by:
getParameterDescriptors in interface Parameterized
Returns:
The parameter descriptors for this math transform, or null.
See Also:
OperationMethod.getParameters()

getParameterValues

public ParameterValueGroup getParameterValues()
Returns the matrix elements as a group of parameters values. The number of parameters depends on the matrix size. Only matrix elements different from their default value will be included in this group.

Specified by:
getParameterValues in interface Parameterized
Returns:
A copy of the parameter values for this math transform, or null. Since this method returns a copy of the parameter values, any change to a value will have no effect on this math transform.
See Also:
SingleOperation.getParameterValues()

getSourceDimensions

public final int getSourceDimensions()
Gets the dimension of input points, which is fixed to 2.

Specified by:
getSourceDimensions in interface MathTransform

getTargetDimensions

public final int getTargetDimensions()
Gets the dimension of output points, which is fixed to 2.

Specified by:
getTargetDimensions in interface MathTransform

transform

public DirectPosition transform(DirectPosition ptSrc,
                                DirectPosition ptDst)
Transforms the specified ptSrc and stores the result in ptDst.

Specified by:
transform in interface MathTransform

createTransformedShape

public Shape createTransformedShape(Shape shape)
Transforms the specified shape. This method creates a simpler shape then the default super-class implementation. For example if the given shape is a rectangle and this affine transform has no scale or shear, then the returned shape will be an instance of Rectangle2D.

Specified by:
createTransformedShape in interface MathTransform2D
Overrides:
createTransformedShape in class AffineTransform
Parameters:
shape - Shape to transform.
Returns:
Transformed shape, or shape if this transform is the identity transform.

getMatrix

public Matrix getMatrix()
Returns this transform as an affine transform matrix.

Specified by:
getMatrix in interface LinearTransform
Returns:
A copy of the underlying matrix.

derivative

public Matrix derivative(Point2D point)
Gets the derivative of this transform at a point. For an affine transform, the derivative is the same everywhere.

Specified by:
derivative in interface MathTransform2D

derivative

public Matrix derivative(DirectPosition point)
Gets the derivative of this transform at a point. For an affine transform, the derivative is the same everywhere.

Specified by:
derivative in interface MathTransform

inverse

public MathTransform2D inverse()
                        throws NoninvertibleTransformException
Creates the inverse transform of this object.

Specified by:
inverse in interface MathTransform
Specified by:
inverse in interface MathTransform2D
Throws:
NoninvertibleTransformException - if this transform can't be inverted.

equals

public boolean equals(Object object,
                      ComparisonMode mode)
Compares this affine transform with the given object for equality. This method behaves as documented in the LinearTransform interface, except for the following case: if the given mode is ComparisonMode.STRICT, then this method delegates to equals(Object). The later method has different rules than the ones documented in the LinearTransform interface, because of the AffineTransform inheritance.

Specified by:
equals in interface LinearTransform
Specified by:
equals in interface LenientComparable
Parameters:
object - The object to compare to this.
mode - The strictness level of the comparison.
Returns:
true if both objects are equal.
Since:
3.18

equals

public boolean equals(Object object)
Compares this affine transform with the given object for equality. The comparison is performed in the same way than AffineTransform.equals(Object) with one additional rule: if the other object is also an instance of AffineTransform2D, then the two objects must be of the exact same class.

Most Geotk implementations require that the objects being compared are unconditionally of the same class in order to be considered equal. However many JDK implementations, including AffineTransform, do not have this requirement. Consequently the above condition (i.e. require the same class only if the given object is an AffineTransform2D or a subclass) is necessary in order to preserve the symmetricity contract of Object.equals(java.lang.Object).

A side-effect of this implementation is that the transitivity contract of Object.equals(Object) may be broken is some corner cases. This contract said:

a.equals(b) and b.equals(c) implies a.equals(c)
Assuming that a, b and c are instances of AffineTransform (where "instance of T" means T or any subclass of T), then the transitivity contract is broken if and only if exactly two of those objects are instance of AffineTransform2D and those two objects are not of the same class. Note that this implies that at least one subclass of AffineTransform2D is used.

In the vast majority of cases, the transitivity contract is not broken and the users can ignore this documentation. The transitivity contract is typically not broken either because we usually don't subclass AffineTransform2D, or because we don't mix AffineTransform with AffineTransform2D subclasses in the same collection.

This special case exists in order to allow developers to attach additional information to their own subclass of AffineTransform2D, and still distinguish their specialized subclass from ordinary affine transforms in a pool of MathTransform instances. The main application is the Equirectangular map projection, which can be simplified to an affine transform but still needs to remember the projection parameters.

Specified by:
equals in interface LenientComparable
Overrides:
equals in class AffineTransform
Parameters:
object - The object to compare with this affine transform for equality.
Returns:
true if the given object is of appropriate class (as explained in the above documentation) and the affine transform coefficients are the same.

clone

public AffineTransform clone()
Returns a new affine transform which is a modifiable copy of this transform. This implementation always returns an instance of AffineTransform, not AffineTransform2D, because the later is unmodifiable and cloning it make little sense.

Overrides:
clone in class AffineTransform

formatWKT

public String formatWKT(Formatter formatter)
Format the inner part of a Well Known Text (WKT) element.

Specified by:
formatWKT in interface Formattable
Parameters:
formatter - The formatter to use.
Returns:
The WKT element name.

toWKT

public String toWKT()
Returns the WKT for this transform.

Specified by:
toWKT in interface MathTransform

toString

public String toString()
Returns the WKT representation of this transform.

Overrides:
toString in class AffineTransform


Copyright © 2009-2011 Geotoolkit.org. All Rights Reserved.