Isis 3 Programmer Reference
Isis::Affine Class Reference

Affine basis function. More...

#include <Affine.h>

Collaboration diagram for Isis::Affine:
Collaboration graph

Public Types

typedef TNT::Array2D< double > AMatrix
 Affine Matrix.
 

Public Member Functions

 Affine ()
 Constructs an Affine transform.
 
 Affine (const AMatrix &a)
 Create Affine transform from matrix.
 
 ~Affine ()
 Destroys the Affine object.
 
void Solve (const double x[], const double y[], const double xp[], const double yp[], int n)
 Given a set of coordinate pairs (n >= 3), compute the affine transform that best fits the points.
 
void Identity ()
 Set the forward and inverse affine transform to the identity.
 
void Translate (double tx, double ty)
 Apply a translation to the current affine transform.
 
void Rotate (double rot)
 Apply a translation to the current affine transform.
 
void Scale (double scaleFactor)
 Apply a scale to the current affine transform.
 
void Compute (double x, double y)
 Compute (xp,yp) given (x,y).
 
double xp () const
 Returns the computed x'.
 
double yp () const
 Returns the computed y'.
 
void ComputeInverse (double xp, double yp)
 Compute (x,y) given (xp,yp).
 
double x () const
 Returns the computed x.
 
double y () const
 Returns the computed y.
 
std::vector< double > Coefficients (int var)
 Return the affine coeffients for the entered variable (1 or 2).
 
std::vector< double > InverseCoefficients (int var)
 Return the inverse affine coeffients for the entered variable (1 or 2).
 
AMatrix Forward () const
 Returns the forward Affine matrix.
 
AMatrix Inverse () const
 Returns the inverse Affine matrix.
 

Static Public Member Functions

static AMatrix getIdentity ()
 Return an Affine identity matrix.
 

Private Member Functions

void checkDims (const AMatrix &am) const
 Checks affine matrix to ensure it is a 3x3 standard form transform.
 
AMatrix invert (const AMatrix &a) const
 Compute the inverse of a matrix.
 

Private Attributes

AMatrix p_matrix
 Affine forward matrix.
 
AMatrix p_invmat
 Affine inverse matrix.
 
double p_x
 x value of the (x,y) coordinate
 
double p_y
 y value of the (x,y) coordinate
 
double p_xp
 x' value of the (x',y') coordinate
 
double p_yp
 y' value of the (x',y') coordinate
 

Detailed Description

Affine basis function.

An affine transform in two-dimensional space is defined as

x' = Ax + By + C
y' = Dx + Ey + F
double x() const
Returns the computed x.
Definition Affine.h:106

This routine allows the programmer to define three or more mappings from (x,y) to (x',y') and will solve for A,B,C,D,E,F.

If the above coefficients can be computed then the inverse of the affine transform exists and will be computed such that

x = A'x' + B'y' + C'
y = D'x' + E'y' + F'
double y() const
Returns the computed y.
Definition Affine.h:115

Alternatively (or in combination), translations and rotations can be applied to create a transform.

See also
http://www.gnome.org/~mathieu/libart/libart-affine-transformation-matrices.html
Author
2005-03-24 Jeff Anderson
Todo

Allow the programmer to apply scale and shear.

Write multiplaction method (operator*) for Affine * Affine.

History

2006-08-03 Tracie Sucharski, Added Scale method

2007-07-12 Debbie A. Cook, Added methods Coefficients and InverseCoefficients

2008-06-18 Christopher Austin - Added documentation

2008-10-29 Steven Lambright - Corrected usage of std::vector, problem pointed out by "novas0x2a" (Support Forum Member)

2009-07-24 Kris Becker Introduced the AMatrix typedef; added new constructor that accepts an AMatrix; added static method to return an Affine identity matrix; added methods to retrieve forward and inverse AMatrixs; added new method that inverts the matrix.

2010-11-18 Kris Becker Fixed bug in inverse representation when scaling is applied to the current transform.

2017-06-28 Makayla Shepherd - Updated documentation. References #4807.

Definition at line 65 of file Affine.h.

Member Typedef Documentation

◆ AMatrix

typedef TNT::Array2D<double> Isis::Affine::AMatrix

Affine Matrix.

Definition at line 67 of file Affine.h.

Constructor & Destructor Documentation

◆ Affine() [1/2]

Isis::Affine::Affine ( )

Constructs an Affine transform.

The default transform is the identity.

Definition at line 30 of file Affine.cpp.

References Identity(), p_x, p_xp, p_y, and p_yp.

◆ Affine() [2/2]

Isis::Affine::Affine ( const AMatrix & a)

Create Affine transform from matrix.

This constructor creates the affine transform from a forward matrix. The input matrix is checked for the proper dimensions (3x3) and is then inverted to complete the inverse functionality.

The input matrix must be invertable or an exception will be thrown!

Parameters
aForward affine matrix

Definition at line 46 of file Affine.cpp.

References checkDims(), invert(), p_invmat, p_matrix, p_x, p_xp, p_y, and p_yp.

◆ ~Affine()

Isis::Affine::~Affine ( )

Destroys the Affine object.

Definition at line 54 of file Affine.cpp.

Member Function Documentation

◆ checkDims()

void Isis::Affine::checkDims ( const AMatrix & am) const
private

Checks affine matrix to ensure it is a 3x3 standard form transform.

Parameters
amAffine matrix to validate

Definition at line 251 of file Affine.cpp.

References Isis::IException::Programmer.

Referenced by Affine().

◆ Coefficients()

vector< double > Isis::Affine::Coefficients ( int var)

Return the affine coeffients for the entered variable (1 or 2).

The coefficients are returned in a 3-dimensional vector

Parameters
varThe coefficient vector index (1 or 2)
Returns
vector<double> Vector of coefficients

Definition at line 220 of file Affine.cpp.

References p_matrix.

◆ Compute()

void Isis::Affine::Compute ( double x,
double y )

Compute (xp,yp) given (x,y).

Use the methods xp() and yp() to obtain the results.

Parameters
xThe transformation x factor
yThe transformation y factor

Definition at line 191 of file Affine.cpp.

References p_matrix, p_x, p_xp, p_y, p_yp, x(), and y().

Referenced by Isis::Chip::Load(), and Isis::Chip::SetChipPosition().

◆ ComputeInverse()

void Isis::Affine::ComputeInverse ( double xp,
double yp )

Compute (x,y) given (xp,yp).

Use the methods x() and y() to obtain the results.

Parameters
xpThe inverse transformation xp factor
ypThe inverse transformation yp factor

Definition at line 205 of file Affine.cpp.

References p_invmat, p_x, p_xp, p_y, p_yp, xp(), and yp().

Referenced by Isis::Chip::SetCubePosition().

◆ Forward()

AMatrix Isis::Affine::Forward ( ) const
inline

Returns the forward Affine matrix.

Returns
AMatrix Forward Affine matrix

Definition at line 127 of file Affine.h.

References p_matrix.

Referenced by Isis::Chip::Extract().

◆ getIdentity()

Affine::AMatrix Isis::Affine::getIdentity ( )
static

◆ Identity()

void Isis::Affine::Identity ( )

Set the forward and inverse affine transform to the identity.

That is, xp = x and yp = y for all (x,y).

Definition at line 73 of file Affine.cpp.

References getIdentity(), p_invmat, and p_matrix.

Referenced by Affine(), Isis::Chip::Load(), Isis::Chip::SetSize(), and Isis::Chip::TackCube().

◆ Inverse()

AMatrix Isis::Affine::Inverse ( ) const
inline

Returns the inverse Affine matrix.

Returns
AMatrix Inverse Affine matrix

Definition at line 136 of file Affine.h.

References p_invmat.

◆ InverseCoefficients()

vector< double > Isis::Affine::InverseCoefficients ( int var)

Return the inverse affine coeffients for the entered variable (1 or 2).

The coefficients are returned in a 3-dimensional vector

Parameters
varThe inverse coefficient vector index
Returns
vector<double> Vector of inverse coefficients

Definition at line 237 of file Affine.cpp.

References p_invmat.

◆ invert()

Affine::AMatrix Isis::Affine::invert ( const AMatrix & a) const
private

Compute the inverse of a matrix.

This method will compute the inverse of an affine matrix for purposes of forward and inverse Affine computations.

Parameters
aMatrix to invert
Returns
Affine::AMatrix The inverted matrix

Definition at line 271 of file Affine.cpp.

References Isis::IException::Unknown.

Referenced by Affine(), Scale(), and Solve().

◆ Rotate()

void Isis::Affine::Rotate ( double angle)

Apply a translation to the current affine transform.

Parameters
angledegrees of counterclockwise rotation

Definition at line 151 of file Affine.cpp.

References getIdentity(), p_invmat, p_matrix, and Isis::PI.

Referenced by Isis::Chip::Load().

◆ Scale()

void Isis::Affine::Scale ( double scaleFactor)

Apply a scale to the current affine transform.

Parameters
scaleFactorThe scale factor

Definition at line 174 of file Affine.cpp.

References getIdentity(), invert(), p_invmat, and p_matrix.

Referenced by Isis::Chip::Load(), and Isis::Chip::Load().

◆ Solve()

void Isis::Affine::Solve ( const double x[],
const double y[],
const double xp[],
const double yp[],
int n )

Given a set of coordinate pairs (n >= 3), compute the affine transform that best fits the points.

If given exactly three coordinates that are not colinear, the fit will be guarenteed to be exact through the points.

Parameters
xThe transformation x coordinates
yThe transformation y coordinates
xpThe transformation xp coordinates
ypThe transformation yp coordinates
nThe number of coordiante pairs
Exceptions
Isis::iException::Math- Affine transform not invertible

Definition at line 92 of file Affine.cpp.

References invert(), p_invmat, p_matrix, x(), xp(), y(), and yp().

Referenced by Isis::Chip::Load().

◆ Translate()

void Isis::Affine::Translate ( double tx,
double ty )

Apply a translation to the current affine transform.

Parameters
txtranslatation to add to x'
tytranslation to add to y'

Definition at line 134 of file Affine.cpp.

References getIdentity(), p_invmat, and p_matrix.

Referenced by Isis::Chip::Load(), Isis::Chip::Load(), and Isis::Chip::TackCube().

◆ x()

double Isis::Affine::x ( ) const
inline

Returns the computed x.

Returns
double Computed x

Definition at line 106 of file Affine.h.

References p_x.

Referenced by Compute(), Isis::Chip::SetCubePosition(), and Solve().

◆ xp()

double Isis::Affine::xp ( ) const
inline

Returns the computed x'.

Returns
double Computed x'

Definition at line 86 of file Affine.h.

References p_xp.

Referenced by ComputeInverse(), Isis::Chip::Load(), Isis::Chip::SetChipPosition(), and Solve().

◆ y()

double Isis::Affine::y ( ) const
inline

Returns the computed y.

Returns
double Computed y

Definition at line 115 of file Affine.h.

References p_y.

Referenced by Compute(), Isis::Chip::SetCubePosition(), and Solve().

◆ yp()

double Isis::Affine::yp ( ) const
inline

Returns the computed y'.

Returns
double Computed y'

Definition at line 95 of file Affine.h.

References p_yp.

Referenced by ComputeInverse(), Isis::Chip::Load(), Isis::Chip::SetChipPosition(), and Solve().

Member Data Documentation

◆ p_invmat

AMatrix Isis::Affine::p_invmat
private

Affine inverse matrix.

Definition at line 142 of file Affine.h.

Referenced by Affine(), ComputeInverse(), Identity(), Inverse(), InverseCoefficients(), Rotate(), Scale(), Solve(), and Translate().

◆ p_matrix

AMatrix Isis::Affine::p_matrix
private

Affine forward matrix.

Definition at line 141 of file Affine.h.

Referenced by Affine(), Coefficients(), Compute(), Forward(), Identity(), Rotate(), Scale(), Solve(), and Translate().

◆ p_x

double Isis::Affine::p_x
private

x value of the (x,y) coordinate

Definition at line 144 of file Affine.h.

Referenced by Affine(), Affine(), Compute(), ComputeInverse(), and x().

◆ p_xp

double Isis::Affine::p_xp
private

x' value of the (x',y') coordinate

Definition at line 146 of file Affine.h.

Referenced by Affine(), Affine(), Compute(), ComputeInverse(), and xp().

◆ p_y

double Isis::Affine::p_y
private

y value of the (x,y) coordinate

Definition at line 145 of file Affine.h.

Referenced by Affine(), Affine(), Compute(), ComputeInverse(), and y().

◆ p_yp

double Isis::Affine::p_yp
private

y' value of the (x',y') coordinate

Definition at line 147 of file Affine.h.

Referenced by Affine(), Affine(), Compute(), ComputeInverse(), and yp().


The documentation for this class was generated from the following files: