Package com.irurueta.geometry
Class AffineTransformation2D
java.lang.Object
com.irurueta.geometry.Transformation2D
com.irurueta.geometry.AffineTransformation2D
- All Implemented Interfaces:
Serializable
This class performs affine transformations on 2D space.
Affine transformations include transformations related to rotations,
translations, independently scaling horizontal or vertical coordinates
or skewing the coordinates axis.
This class is not intended to be used on points located at infinity or
at very large coordinates, since numerical instabilities may occur. For
those cases use a ProjectiveTransformation2D instead.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate com.irurueta.algebra.MatrixLinear mapping.static final intConstant defining number of homogeneous coordinates in 2D space.static final intConstant defining number of inhomogeneous coordinates in 2D space.static final intConstant indicating number of coordinates required in translation arrays.private double[]2D translation to be performed on geometric objects. -
Constructor Summary
ConstructorsConstructorDescriptionEmpty constructor.AffineTransformation2D(double scale) Creates transformation with provided scale value.AffineTransformation2D(double[] translation) Creates transformation with provided 2D translation.AffineTransformation2D(double scale, double[] translation) Creates transformation with provided scale and translation.AffineTransformation2D(double scale, Rotation2D rotation) Creates transformation with provided scale and rotation.AffineTransformation2D(double scale, Rotation2D rotation, double[] translation) Creates transformation with provided scale, rotation and translationAffineTransformation2D(com.irurueta.algebra.Matrix a) Creates transformation with provided linear mapping matrix.AffineTransformation2D(com.irurueta.algebra.Matrix a, double[] translation) Creates transformation with provided linear mapping and translation.AffineTransformation2D(AffineParameters2D params, Rotation2D rotation) Creates transformation with provided affine parameters and rotation.AffineTransformation2D(AffineParameters2D params, Rotation2D rotation, double[] translation) Creates transformation with provided parameters, rotation and translation.AffineTransformation2D(Line2D inputLine1, Line2D inputLine2, Line2D inputLine3, Line2D outputLine1, Line2D outputLine2, Line2D outputLine3) Creates transformation by estimating its internal values using provided 3 corresponding original and transformed lines.AffineTransformation2D(Point2D inputPoint1, Point2D inputPoint2, Point2D inputPoint3, Point2D outputPoint1, Point2D outputPoint2, Point2D outputPoint3) Creates transformation by estimating its internal values using provided 3 corresponding original and transformed points.AffineTransformation2D(Rotation2D rotation) Creates transformation with provided rotation.AffineTransformation2D(Rotation2D rotation, double[] translation) Creates transformation with provided rotation and translation. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddRotation(Rotation2D rotation) Adds provided rotation to current rotation assigned to this transformation.voidaddTranslation(double[] translation) Adds provided translation to current translation on this transformation.voidaddTranslation(double translationX, double translationY) Adds provided coordinates to current translation assigned to this transformation.voidaddTranslation(Point2D translation) Adds provided coordinates to current translation assigned to this transformation.voidaddTranslationX(double translationX) Adds provided x coordinate to current translation assigned to this transformation.voidaddTranslationY(double translationY) Adds provided y coordinate to current translation assigned to this transformation.com.irurueta.algebra.MatrixasMatrix()Represents this transformation as a 3x3 matrix.voidasMatrix(com.irurueta.algebra.Matrix m) Represents this transformation as a 3x3 matrix and stores the result in provided instance.voidcombine(AffineTransformation2D transformation) Combines this transformation with provided transformation.private voidcombine(AffineTransformation2D inputTransformation, AffineTransformation2D outputTransformation) Combines this transformation with provided input transformation and stores the result into provided output transformation.combineAndReturnNew(AffineTransformation2D transformation) Combines this transformation with provided transformation and returns the result as a new transformation instance.com.irurueta.algebra.MatrixgetA()Returns linear mapping matrix to perform affine transformation.Gets affine parameters of this instance.voidgetParameters(AffineParameters2D result) Computes affine parameters of this instance and stores the result in provided instance.Returns 2D rotation assigned to this transformation.double[]Returns 2D translation assigned to this transformation as an array expressed in inhomogeneous coordinates.Gets x, y coordinates of translation to be made by this transformation as a new point.voidGets x, y coordinates of translation to be made by this transformation and stores them into provided point.doubleReturns current x coordinate translation assigned to this transformation.doubleReturns current y coordinate translation assigned to this transformation.voidinverse()Inverses this transformation.voidinverse(AffineTransformation2D result) Computes the inverse of this transformation and stores the result in provided instance.Computes the inverse of this transformation and returns the result as a new transformation instance.final voidsetA(com.irurueta.algebra.Matrix a) Sets linear mapping matrix to perform affine transformation.voidsetParameters(AffineParameters2D parameters) Sets affine parameters of this instance.voidsetRotation(Rotation2D rotation) Sets 2D rotation for this transformation.voidsetScale(double scale) Sets scale of this transformation.final voidsetTransformationFromLines(Line2D inputLine1, Line2D inputLine2, Line2D inputLine3, Line2D outputLine1, Line2D outputLine2, Line2D outputLine3) Estimates this transformation internal parameters by using 3 corresponding original and transformed lines.final voidsetTransformationFromPoints(Point2D inputPoint1, Point2D inputPoint2, Point2D inputPoint3, Point2D outputPoint1, Point2D outputPoint2, Point2D outputPoint3) Estimates this transformation internal parameters by using 3 corresponding original and transformed points.voidsetTranslation(double[] translation) Sets 2D translation assigned to this transformation as an array expressed in inhomogeneous coordinates.voidsetTranslation(double translationX, double translationY) Sets x, y coordinates of translation to be made by this transformation.voidsetTranslation(Point2D translation) Sets x, y, coordinates of translation to be made by this transformation.voidsetTranslationX(double translationX) Sets x coordinate translation to be made by this transformation.voidsetTranslationY(double translationY) Sets y coordinate translation to be made by this transformation.Converts this transformation into a metric transformation.voidTransforms a conic using this transformation and stores the result into provided output conic.voidTransforms a dual conic using this transformation and stores the result into provided output dual conic.voidTransforms provided input line using this transformation and stores the result into provided output line instance.voidTransforms input point using this transformation and stores the result in provided output points.Methods inherited from class com.irurueta.geometry.Transformation2D
transform, transform, transform, transform, transform, transform, transform, transform, transformAndOverwriteLines, transformAndOverwritePoints, transformAndReturnNew, transformAndReturnNew, transformAndReturnNew, transformAndReturnNew, transformAndReturnNew, transformAndReturnNew, transformLines, transformLinesAndReturnNew, transformPoints, transformPointsAndReturnNew
-
Field Details
-
NUM_TRANSLATION_COORDS
public static final int NUM_TRANSLATION_COORDSConstant indicating number of coordinates required in translation arrays.- See Also:
-
INHOM_COORDS
public static final int INHOM_COORDSConstant defining number of inhomogeneous coordinates in 2D space.- See Also:
-
HOM_COORDS
public static final int HOM_COORDSConstant defining number of homogeneous coordinates in 2D space.- See Also:
-
a
private com.irurueta.algebra.Matrix aLinear mapping. -
translation
private double[] translation2D translation to be performed on geometric objects. Translation is specified using inhomogeneous coordinates.
-
-
Constructor Details
-
AffineTransformation2D
public AffineTransformation2D()Empty constructor. Creates transformation that has no effect. -
AffineTransformation2D
public AffineTransformation2D(com.irurueta.algebra.Matrix a) Creates transformation with provided linear mapping matrix.- Parameters:
a- linear mapping.- Throws:
NullPointerException- raised if provided rotation is null.IllegalArgumentException- raised if provided matrix does not have size 2x2.
-
AffineTransformation2D
public AffineTransformation2D(double scale) Creates transformation with provided scale value.- Parameters:
scale- Scale value. Values between 0.0 and 1.0 reduce objects, values greater than 1.0 enlarge objects and negative values reverse objects.
-
AffineTransformation2D
Creates transformation with provided rotation.- Parameters:
rotation- a 2D rotation.- Throws:
NullPointerException- Raised if provided rotation is null.
-
AffineTransformation2D
Creates transformation with provided scale and rotation.- Parameters:
scale- Scale value. Values between 0.0 and 1.0 reduce objects, values greater than 1.0 enlarge objects and negative values reverse objects.rotation- a 2D rotation.- Throws:
NullPointerException- raised if provided rotation is null.
-
AffineTransformation2D
Creates transformation with provided affine parameters and rotation.- Parameters:
params- affine parameters including horizontal scaling, vertical scaling and skewness.rotation- a 2D rotation.- Throws:
NullPointerException- raised if provided parameters are null or if provided rotation is null.
-
AffineTransformation2D
public AffineTransformation2D(double[] translation) Creates transformation with provided 2D translation.- Parameters:
translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided array is null.IllegalArgumentException- raised if length of array is not equal to NUM_TRANSLATION_COORDS.
-
AffineTransformation2D
public AffineTransformation2D(com.irurueta.algebra.Matrix a, double[] translation) Creates transformation with provided linear mapping and translation.- Parameters:
a- linear mapping.translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided array is null or if linear mapping is null.IllegalArgumentException- raised if length of array is not equal to NUM_TRANSLATION_COORDS.
-
AffineTransformation2D
public AffineTransformation2D(double scale, double[] translation) Creates transformation with provided scale and translation.- Parameters:
scale- scale value. Values between 0.0 and 1.0 reduce objects, values greater than 1.0 enlarge objects and negative values reverse objects.translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided translation is nullIllegalArgumentException- raised if provided translation does not have length 2.
-
AffineTransformation2D
Creates transformation with provided rotation and translation.- Parameters:
rotation- a 2D rotation.translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided rotation or translation is null.IllegalArgumentException- raised if provided translation does not have length 2.
-
AffineTransformation2D
Creates transformation with provided scale, rotation and translation- Parameters:
scale- Scale value. Values between 0.0 and 1.0 reduce objects, values greater than 1.0 enlarge objects and negative values reverse objects.rotation- a 2D rotation.translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided rotation or translation is null.IllegalArgumentException- raised if provided translation does not have length 2.
-
AffineTransformation2D
Creates transformation with provided parameters, rotation and translation.- Parameters:
params- affine parameters including horizontal scaling, vertical scaling and skewness.rotation- a 2D rotation.translation- array indicating 2D translation using inhomogeneous coordinates.- Throws:
NullPointerException- raised if provided parameters, rotation or translation is null.IllegalArgumentException- raised if provided translation does not have length 2.
-
AffineTransformation2D
public AffineTransformation2D(Point2D inputPoint1, Point2D inputPoint2, Point2D inputPoint3, Point2D outputPoint1, Point2D outputPoint2, Point2D outputPoint3) throws CoincidentPointsException Creates transformation by estimating its internal values using provided 3 corresponding original and transformed points.- Parameters:
inputPoint1- 1st input point.inputPoint2- 2nd input point.inputPoint3- 3rd input point.outputPoint1- 1st transformed point corresponding to 1st input point.outputPoint2- 2nd transformed point corresponding to 2nd input point.outputPoint3- 3rd transformed point corresponding to 3rd input point.- Throws:
CoincidentPointsException- raised if transformation cannot be estimated for some reason (point configuration degeneracy, duplicate points or numerical instabilities).
-
AffineTransformation2D
public AffineTransformation2D(Line2D inputLine1, Line2D inputLine2, Line2D inputLine3, Line2D outputLine1, Line2D outputLine2, Line2D outputLine3) throws CoincidentLinesException Creates transformation by estimating its internal values using provided 3 corresponding original and transformed lines.- Parameters:
inputLine1- 1st input line.inputLine2- 2nd input line.inputLine3- 3rd input line.outputLine1- 1st transformed line corresponding to 1st input line.outputLine2- 2nd transformed line corresponding to 2nd input line.outputLine3- 3rd transformed line corresponding to 3rd input line.- Throws:
CoincidentLinesException- raised if transformation cannot be estimated for some reason (line configuration degeneracy, duplicate lines or numerical instabilities).
-
-
Method Details
-
getA
public com.irurueta.algebra.Matrix getA()Returns linear mapping matrix to perform affine transformation. Point transformation is computed as a * x + t, where x is a point and t is the amount of translation.- Returns:
- linear mapping matrix.
-
setA
public final void setA(com.irurueta.algebra.Matrix a) Sets linear mapping matrix to perform affine transformation.- Parameters:
a- linear mapping matrix.- Throws:
NullPointerException- raised if provided matrix is null.IllegalArgumentException- raised if provided matrix does not have size 2x2.
-
getRotation
Returns 2D rotation assigned to this transformation. Note: if this rotation instance is modified, its changes won't be reflected on this instance until rotation is set again.- Returns:
- 2D rotation.
- Throws:
com.irurueta.algebra.AlgebraException- if for some reason rotation cannot be estimated (usually because of numerical instability).
-
setRotation
Sets 2D rotation for this transformation.- Parameters:
rotation- a 2D rotation.- Throws:
NullPointerException- raised if provided rotation is null.com.irurueta.algebra.AlgebraException- raised if for numerical reasons rotation cannot be set (usually because of numerical instability in parameters of this transformation).
-
addRotation
Adds provided rotation to current rotation assigned to this transformation.- Parameters:
rotation- 2D rotation to be added.- Throws:
com.irurueta.algebra.AlgebraException- raised if for numerical reasons rotation cannot be set (usually because of numerical instability in parameters of this transformation).
-
setScale
public void setScale(double scale) throws com.irurueta.algebra.AlgebraException Sets scale of this transformation.- Parameters:
scale- scale value to be set. a value between 0.0 and 1.0 indicates that objects will be reduced, a value greater than 1.0 indicates that objects will be enlarged, and a negative value indicates that objects will be reversed.- Throws:
com.irurueta.algebra.AlgebraException- raised if for numerical reasons scale cannot be set (usually because of numerical instability in parameters of this transformation).
-
getParameters
Gets affine parameters of this instance. Affine parameters contain horizontal scale, vertical scale and skewness of axes.- Returns:
- affine parameters.
- Throws:
com.irurueta.algebra.AlgebraException- raised if for numerical reasons affine parameters cannot be retrieved (usually because of numerical instability in matrix a).
-
getParameters
Computes affine parameters of this instance and stores the result in provided instance. Affine parameters contain horizontal scale, vertical scale and skewness of axes.- Parameters:
result- instance where affine parameters will be stored.- Throws:
com.irurueta.algebra.AlgebraException- raised if for numerical reasons affine parameters cannot be retrieved (usually because of numerical instability in matrix a).
-
setParameters
public void setParameters(AffineParameters2D parameters) throws com.irurueta.algebra.AlgebraException Sets affine parameters of this instance. Affine parameters contain horizontal scale, vertical scale and skewness of axes.- Parameters:
parameters- affine parameters to be set.- Throws:
com.irurueta.algebra.AlgebraException- raised if for numerical reasons affine parameters cannot be set (usually because of numerical instability in current matrix a).
-
getTranslation
public double[] getTranslation()Returns 2D translation assigned to this transformation as an array expressed in inhomogeneous coordinates.- Returns:
- 2D translation array.
-
setTranslation
public void setTranslation(double[] translation) Sets 2D translation assigned to this transformation as an array expressed in inhomogeneous coordinates.- Parameters:
translation- 2D translation array.- Throws:
IllegalArgumentException- raised if provided array does not have length equal to NUM_TRANSLATION_COORDS.
-
addTranslation
public void addTranslation(double[] translation) Adds provided translation to current translation on this transformation. Provided translation must be expressed as an array of inhomogeneous coordinates.- Parameters:
translation- 2D translation array.- Throws:
IllegalArgumentException- raised if provided array does not have length equal to NUM_TRANSLATION_COORDS.
-
getTranslationX
public double getTranslationX()Returns current x coordinate translation assigned to this transformation.- Returns:
- X coordinate translation.
-
setTranslationX
public void setTranslationX(double translationX) Sets x coordinate translation to be made by this transformation.- Parameters:
translationX- X coordinate translation to be set.
-
getTranslationY
public double getTranslationY()Returns current y coordinate translation assigned to this transformation.- Returns:
- Y coordinate translation.
-
setTranslationY
public void setTranslationY(double translationY) Sets y coordinate translation to be made by this transformation.- Parameters:
translationY- Y coordinate translation to be set.
-
setTranslation
public void setTranslation(double translationX, double translationY) Sets x, y coordinates of translation to be made by this transformation.- Parameters:
translationX- translation x coordinate to be set.translationY- translation y coordinate to be set.
-
setTranslation
Sets x, y, coordinates of translation to be made by this transformation.- Parameters:
translation- translation to be set.
-
getTranslationPoint
Gets x, y coordinates of translation to be made by this transformation as a new point.- Returns:
- a new point containing translation coordinates.
-
getTranslationPoint
Gets x, y coordinates of translation to be made by this transformation and stores them into provided point.- Parameters:
out- point where translation coordinates will be stored.
-
addTranslationX
public void addTranslationX(double translationX) Adds provided x coordinate to current translation assigned to this transformation.- Parameters:
translationX- X coordinate to be added to current translation.
-
addTranslationY
public void addTranslationY(double translationY) Adds provided y coordinate to current translation assigned to this transformation.- Parameters:
translationY- Y coordinate to be added to current translation.
-
addTranslation
public void addTranslation(double translationX, double translationY) Adds provided coordinates to current translation assigned to this transformation.- Parameters:
translationX- x coordinate to be added to current translation.translationY- y coordinate to be added to current translation.
-
addTranslation
Adds provided coordinates to current translation assigned to this transformation.- Parameters:
translation- x, y, coordinates to be added to current translation.
-
asMatrix
public com.irurueta.algebra.Matrix asMatrix()Represents this transformation as a 3x3 matrix. a point can be transformed as T * p, where T is the transformation matrix and p is a point expressed as an homogeneous vector.- Specified by:
asMatrixin classTransformation2D- Returns:
- This transformation in matrix form.
-
asMatrix
public void asMatrix(com.irurueta.algebra.Matrix m) Represents this transformation as a 3x3 matrix and stores the result in provided instance.- Specified by:
asMatrixin classTransformation2D- Parameters:
m- instance where transformation matrix will be stored.- Throws:
IllegalArgumentException- raised if provided instance is not a 3x3 matrix.
-
transform
Transforms input point using this transformation and stores the result in provided output points.- Specified by:
transformin classTransformation2D- Parameters:
inputPoint- point to be transformed.outputPoint- instance where transformed point data will be stored.
-
transform
public void transform(Conic inputConic, Conic outputConic) throws NonSymmetricMatrixException, com.irurueta.algebra.AlgebraException Transforms a conic using this transformation and stores the result into provided output conic.- Specified by:
transformin classTransformation2D- Parameters:
inputConic- conic to be transformed.outputConic- instance where data of transformed conic will be stored.- Throws:
NonSymmetricMatrixException- raised if due to numerical precision the resulting output conic matrix is not considered to be symmetric.com.irurueta.algebra.AlgebraException- raised if transform cannot be computed because of numerical instabilities.
-
transform
public void transform(DualConic inputDualConic, DualConic outputDualConic) throws NonSymmetricMatrixException Transforms a dual conic using this transformation and stores the result into provided output dual conic.- Specified by:
transformin classTransformation2D- Parameters:
inputDualConic- dual conic to be transformed.outputDualConic- instance where data of transformed dual conic will be stored.- Throws:
NonSymmetricMatrixException- raised if due to numerical precision the resulting output dual conic matrix is not considered to be symmetric.
-
transform
public void transform(Line2D inputLine, Line2D outputLine) throws com.irurueta.algebra.AlgebraException Transforms provided input line using this transformation and stores the result into provided output line instance.- Specified by:
transformin classTransformation2D- Parameters:
inputLine- line to be transformed.outputLine- instance where data of transformed line will be stored.- Throws:
com.irurueta.algebra.AlgebraException- raised if transform cannot be computed because of numerical instabilities.
-
inverse
public void inverse() throws com.irurueta.algebra.AlgebraExceptionInverses this transformation.- Throws:
com.irurueta.algebra.AlgebraException- if inverse transform cannot be computed because of numerical instabilities.
-
inverseAndReturnNew
Computes the inverse of this transformation and returns the result as a new transformation instance.- Returns:
- Inverse transformation.
- Throws:
com.irurueta.algebra.AlgebraException- if inverse transform cannot be computed because of numerical instabilities.
-
inverse
Computes the inverse of this transformation and stores the result in provided instance.- Parameters:
result- instance where inverse transformation will be stored.- Throws:
com.irurueta.algebra.AlgebraException- if inverse transform cannot be computed because of numerical instabilities.
-
toProjective
Converts this transformation into a metric transformation.- Returns:
- This transformation converted into a projective transformation.
-
combine
Combines this transformation with provided transformation. The combination is equivalent to multiplying the matrix of this transformation with the matrix of provided transformation.- Parameters:
transformation- Transformation to be combined with.
-
combineAndReturnNew
Combines this transformation with provided transformation and returns the result as a new transformation instance. The combination is equivalent to multiplying the matrix of this transformation with the matrix of provided transformation.- Parameters:
transformation- Transformation to be combined with- Returns:
- a new transformation resulting of the combination with this transformation and provided transformation.
-
combine
private void combine(AffineTransformation2D inputTransformation, AffineTransformation2D outputTransformation) Combines this transformation with provided input transformation and stores the result into provided output transformation. The combination is equivalent to multiplying the matrix of this transformation with the matrix of provided input transformation.- Parameters:
inputTransformation- transformation to be combined with.outputTransformation- transformation where result will be stored.
-
setTransformationFromPoints
public final void setTransformationFromPoints(Point2D inputPoint1, Point2D inputPoint2, Point2D inputPoint3, Point2D outputPoint1, Point2D outputPoint2, Point2D outputPoint3) throws CoincidentPointsException Estimates this transformation internal parameters by using 3 corresponding original and transformed points.- Parameters:
inputPoint1- 1st input point.inputPoint2- 2nd input point.inputPoint3- 3rd input point.outputPoint1- 1st transformed point corresponding to 1st input point.outputPoint2- 2nd transformed point corresponding to 2nd input point.outputPoint3- 3rd transformed point corresponding to 3rd input point.- Throws:
CoincidentPointsException- raised if transformation cannot be estimated for some reason (point configuration degeneracy, duplicate points or numerical instabilities).
-
setTransformationFromLines
public final void setTransformationFromLines(Line2D inputLine1, Line2D inputLine2, Line2D inputLine3, Line2D outputLine1, Line2D outputLine2, Line2D outputLine3) throws CoincidentLinesException Estimates this transformation internal parameters by using 3 corresponding original and transformed lines.- Parameters:
inputLine1- 1st input line.inputLine2- 2nd input line.inputLine3- 3rd input line.outputLine1- 1st transformed line corresponding to 1st input line.outputLine2- 2nd transformed line corresponding to 2nd input line.outputLine3- 3rd transformed line corresponding to 3rd input line.- Throws:
CoincidentLinesException- raised if transformation cannot be estimated for some reason (line configuration degeneracy, duplicate lines or numerical instabilities).
-