Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/LinearMath/btPolarDecomposition.h
| #ifndef POLARDECOMPOSITION_H | #ifndef POLARDECOMPOSITION_H | ||||
| #define POLARDECOMPOSITION_H | #define POLARDECOMPOSITION_H | ||||
| #include "btMatrix3x3.h" | #include "btMatrix3x3.h" | ||||
| /** | /** | ||||
| * This class is used to compute the polar decomposition of a matrix. In | * 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 | * general, the polar decomposition factorizes a matrix, A, into two parts: a | ||||
| * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H). | * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H). | ||||
| * However, in this particular implementation the original matrix, A, is | * 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 | * 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. | * be an orthogonal matrix and H with be a positive-definite, symmetric matrix. | ||||
| */ | */ | ||||
| class btPolarDecomposition | class btPolarDecomposition | ||||
| { | { | ||||
| public: | public: | ||||
| static const btScalar DEFAULT_TOLERANCE; | |||||
| static const unsigned int DEFAULT_MAX_ITERATIONS; | |||||
| /** | /** | ||||
| * Creates an instance with optional parameters. | * Creates an instance with optional parameters. | ||||
| * | * | ||||
| * @param tolerance - the tolerance used to determine convergence of the | * @param tolerance - the tolerance used to determine convergence of the | ||||
| * algorithm | * algorithm | ||||
| * @param maxIterations - the maximum number of iterations used to achieve | * @param maxIterations - the maximum number of iterations used to achieve | ||||
| * convergence | * convergence | ||||
| */ | */ | ||||
| btPolarDecomposition(btScalar tolerance = DEFAULT_TOLERANCE, | btPolarDecomposition(btScalar tolerance = btScalar(0.0001), | ||||
| unsigned int maxIterations = DEFAULT_MAX_ITERATIONS); | unsigned int maxIterations = 16); | ||||
| /** | /** | ||||
| * Decomposes a matrix into orthogonal and symmetric, positive-definite | * Decomposes a matrix into orthogonal and symmetric, positive-definite | ||||
| * parts. If the number of iterations returned by this function is equal to | * parts. If the number of iterations returned by this function is equal to | ||||
| * the maximum number of iterations, the algorithm has failed to converge. | * the maximum number of iterations, the algorithm has failed to converge. | ||||
| * | * | ||||
| * @param a - the original matrix | * @param a - the original matrix | ||||
| * @param u - the resulting orthogonal matrix | * @param u - the resulting orthogonal matrix | ||||
| * @param h - the resulting symmetric matrix | * @param h - the resulting symmetric matrix | ||||
| * | * | ||||
| * @return the number of iterations performed by the algorithm. | * @return the number of iterations performed by the algorithm. | ||||
| */ | */ | ||||
| unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const; | unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const; | ||||
| /** | /** | ||||
| * Returns the maximum number of iterations that this algorithm will perform | * Returns the maximum number of iterations that this algorithm will perform | ||||
| * to achieve convergence. | * to achieve convergence. | ||||
| * | * | ||||
| * @return maximum number of iterations | * @return maximum number of iterations | ||||
| */ | */ | ||||
| unsigned int maxIterations() const; | unsigned int maxIterations() const; | ||||
| private: | private: | ||||
| btScalar m_tolerance; | btScalar m_tolerance; | ||||
| unsigned int m_maxIterations; | unsigned int m_maxIterations; | ||||
| }; | }; | ||||
| /** | /** | ||||
| * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix | * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix | ||||
| * 'u' and a symmetric, positive-definite matrix 'h'. If the number of | * 'u' and a symmetric, positive-definite matrix 'h'. If the number of | ||||
| * iterations returned by this function is equal to | * iterations returned by this function is equal to | ||||
| * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to | * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to | ||||
| * converge. | * converge. | ||||
| * | * | ||||
| * @param a - the original matrix | * @param a - the original matrix | ||||
| * @param u - the resulting orthogonal matrix | * @param u - the resulting orthogonal matrix | ||||
| * @param h - the resulting symmetric matrix | * @param h - the resulting symmetric matrix | ||||
| * | * | ||||
| * @return the number of iterations performed by the algorithm. | * @return the number of iterations performed by the algorithm. | ||||
| */ | */ | ||||
| unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h); | unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h); | ||||
| #endif // POLARDECOMPOSITION_H | #endif // POLARDECOMPOSITION_H | ||||