Version: 6.3.1
Public Member Functions | Private Member Functions | Private Attributes

INTERP_KERNEL.TetraAffineTransform Class Reference

Class representing an affine transformation x -> Ax + b that transforms a given tetrahedron into the unit tetrahedron. More...

#include <TetraAffineTransform.hxx>

Public Member Functions

 TetraAffineTransform (const double **pts)
 PUBLIC INTERFACE METHODS //////////////.
void apply (double *destPt, const double *srcPt) const
 Calculates the transform of point srcPt and stores the result in destPt.
void reverseApply (double *destPt, const double *srcPt) const
 Calculates the reverse transform of point srcPt and stores the result in destPt.
double determinant () const
 Returns the determinant of the linear part A of the transform.
void dump () const
 Outputs to std.cout the matrix A and the vector b of the transform Ax + b.

Private Member Functions

void invertLinearTransform ()
 PRIVATE METHODS //////////////.
void calculateDeterminant ()
 Updates the member _determinant of the matrix A of the transformation.
void factorizeLU (double *lu, int *idx) const
 Auxiliary methods for inverse calculation ///.
void forwardSubstitution (double *x, const double *lu, const double *b, const int *idx) const
 Solves the system Lx = b, where L is lower unit-triangular (ones on the diagonal)
void backwardSubstitution (double *x, const double *lu, const double *b, const int *idx) const
 Solves the system Ux = b, where U is upper-triangular.

Private Attributes

double _linear_transform [9]
 3x3 matrix A in affine transform x -> Ax + b
double _translation [3]
 3x1 vector b in affine transform x -> Ax + b
double _determinant
 The determinant of the matrix A is calculated at the construction of the object and cached.
double _back_linear_transform [9]
 3x3 matrix AT is transposed A matrix used for y -> ATy - c transformation
double _back_translation [3]
 3x1 vector c in affine transform y -> ATy - c

Detailed Description

Class representing an affine transformation x -> Ax + b that transforms a given tetrahedron into the unit tetrahedron.


Constructor & Destructor Documentation

INTERP_KERNEL.TetraAffineTransform::TetraAffineTransform ( const double **  pts)

PUBLIC INTERFACE METHODS //////////////.

Constructor Create the TetraAffineTransform object from the tetrahedron with corners specified in pts. If the tetrahedron is degenerate or almost degenerate, construction succeeds, but the determinant of the transform is set to 0.

Parameters:
ptsa 4x3 matrix containing 4 points (pts[0], ..., pts[3]) of 3 coordinates each

References INTERP_KERNEL.TetraAffineTransform._back_linear_transform, INTERP_KERNEL.TetraAffineTransform._back_translation, INTERP_KERNEL.TetraAffineTransform._determinant, INTERP_KERNEL.TetraAffineTransform._linear_transform, INTERP_KERNEL.TetraAffineTransform._translation, INTERP_KERNEL.TetraAffineTransform.apply(), INTERP_KERNEL.TetraAffineTransform.calculateDeterminant(), INTERP_KERNEL.epsilonEqual(), INTERP_KERNEL.TetraAffineTransform.invertLinearTransform(), LOG, and INTERP_KERNEL.vToStr().


Member Function Documentation

void INTERP_KERNEL.TetraAffineTransform::apply ( double destPt,
const double srcPt 
) const

Calculates the transform of point srcPt and stores the result in destPt.

If destPt == srcPt, then srcPt is overwritten safely.

Parameters:
destPtdouble[3] in which to store the transformed point
srcPtdouble[3] containing coordinates of points to be transformed

References INTERP_KERNEL.TetraAffineTransform._linear_transform, INTERP_KERNEL.TetraAffineTransform._translation, and LOG.

void INTERP_KERNEL.TetraAffineTransform::reverseApply ( double destPt,
const double srcPt 
) const

Calculates the reverse transform of point srcPt and stores the result in destPt.

If destPt == srcPt, then srcPt is overwritten safely.

Parameters:
destPtdouble[3] in which to store the transformed point
srcPtdouble[3] containing coordinates of points to be transformed

References INTERP_KERNEL.TetraAffineTransform._back_linear_transform, INTERP_KERNEL.TetraAffineTransform._back_translation, and LOG.

double INTERP_KERNEL.TetraAffineTransform::determinant ( ) const

Returns the determinant of the linear part A of the transform.

Returns:
determinant of the transform

References INTERP_KERNEL.TetraAffineTransform._determinant.

void INTERP_KERNEL.TetraAffineTransform::dump ( ) const

Outputs to std.cout the matrix A and the vector b of the transform Ax + b.

References INTERP_KERNEL.TetraAffineTransform._linear_transform, and INTERP_KERNEL.TetraAffineTransform._translation.

void INTERP_KERNEL.TetraAffineTransform::invertLinearTransform ( ) [private]

PRIVATE METHODS //////////////.

Calculates the inverse of the matrix A, stored in _linear_transform by LU-factorization and substitution

References INTERP_KERNEL.TetraAffineTransform._linear_transform, testGaussLocalization.b, INTERP_KERNEL.TetraAffineTransform.backwardSubstitution(), INTERP_KERNEL.TetraAffineTransform.factorizeLU(), INTERP_KERNEL.TetraAffineTransform.forwardSubstitution(), and LOG.

void INTERP_KERNEL.TetraAffineTransform::calculateDeterminant ( ) [private]

Updates the member _determinant of the matrix A of the transformation.

References INTERP_KERNEL.TetraAffineTransform._determinant, and INTERP_KERNEL.TetraAffineTransform._linear_transform.

void INTERP_KERNEL.TetraAffineTransform::factorizeLU ( double lu,
int idx 
) const [private]

Auxiliary methods for inverse calculation ///.

Calculates the LU-factorization of the matrix A (_linear_transform) and stores it in lu. Since partial pivoting is used, there are row swaps. This is represented by the index permutation vector idx : to access element (i,j) of lu, use lu[3*idx[i] + j]

Parameters:
ludouble[9] in which to store LU-factorization
idxint[3] in which to store row permutation vector

References TestMedCorba7.s.

void INTERP_KERNEL.TetraAffineTransform::forwardSubstitution ( double x,
const double lu,
const double b,
const int idx 
) const [private]

Solves the system Lx = b, where L is lower unit-triangular (ones on the diagonal)

Parameters:
xdouble[3] in which the solution is stored
ludouble[9] containing the LU-factorization
bdouble[3] containing the right-hand side
idxint[3] containing the permutation vector associated with lu
void INTERP_KERNEL.TetraAffineTransform::backwardSubstitution ( double x,
const double lu,
const double b,
const int idx 
) const [private]

Solves the system Ux = b, where U is upper-triangular.

Parameters:
xdouble[3] in which the solution is stored
ludouble[9] containing the LU-factorization
bdouble[3] containing the right-hand side
idxint[3] containing the permutation vector associated with lu

Field Documentation

3x3 matrix A in affine transform x -> Ax + b

3x1 vector b in affine transform x -> Ax + b

The determinant of the matrix A is calculated at the construction of the object and cached.

3x3 matrix AT is transposed A matrix used for y -> ATy - c transformation

3x1 vector c in affine transform y -> ATy - c

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS