73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef POLARDECOMPOSITION_H
 | 
						|
#define POLARDECOMPOSITION_H
 | 
						|
 | 
						|
#include "btMatrix3x3.h"
 | 
						|
 | 
						|
/**
 | 
						|
 * This class is used to compute the polar decomposition of a matrix. In
 | 
						|
 * general, the polar decomposition factorizes a matrix, A, into two parts: a
 | 
						|
 * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H).
 | 
						|
 * However, in this particular implementation the original matrix, A, is
 | 
						|
 * required to be a square 3x3 matrix with real elements. This means that U will
 | 
						|
 * be an orthogonal matrix and H with be a positive-definite, symmetric matrix.
 | 
						|
 */
 | 
						|
class btPolarDecomposition
 | 
						|
{
 | 
						|
  public:
 | 
						|
   
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates an instance with optional parameters.
 | 
						|
     *
 | 
						|
     * @param tolerance     - the tolerance used to determine convergence of the
 | 
						|
     *                        algorithm
 | 
						|
     * @param maxIterations - the maximum number of iterations used to achieve
 | 
						|
     *                        convergence
 | 
						|
     */
 | 
						|
    btPolarDecomposition(btScalar tolerance = btScalar(0.0001),
 | 
						|
      unsigned int maxIterations = 16);
 | 
						|
 | 
						|
    /**
 | 
						|
     * Decomposes a matrix into orthogonal and symmetric, positive-definite
 | 
						|
     * parts. If the number of iterations returned by this function is equal to
 | 
						|
     * the maximum number of iterations, the algorithm has failed to converge.
 | 
						|
     *
 | 
						|
     * @param a - the original matrix
 | 
						|
     * @param u - the resulting orthogonal matrix
 | 
						|
     * @param h - the resulting symmetric matrix
 | 
						|
     *
 | 
						|
     * @return the number of iterations performed by the algorithm.
 | 
						|
     */
 | 
						|
    unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const; 
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the maximum number of iterations that this algorithm will perform
 | 
						|
     * to achieve convergence.
 | 
						|
     *
 | 
						|
     * @return maximum number of iterations
 | 
						|
     */
 | 
						|
    unsigned int maxIterations() const;
 | 
						|
 | 
						|
  private:
 | 
						|
    btScalar m_tolerance;
 | 
						|
    unsigned int m_maxIterations;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix
 | 
						|
 * 'u' and a symmetric, positive-definite matrix 'h'. If the number of
 | 
						|
 * iterations returned by this function is equal to
 | 
						|
 * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to
 | 
						|
 * converge.
 | 
						|
 *
 | 
						|
 * @param a - the original matrix
 | 
						|
 * @param u - the resulting orthogonal matrix
 | 
						|
 * @param h - the resulting symmetric matrix
 | 
						|
 *
 | 
						|
 * @return the number of iterations performed by the algorithm.
 | 
						|
 */
 | 
						|
unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h); 
 | 
						|
 | 
						|
#endif // POLARDECOMPOSITION_H
 | 
						|
 |