Bullet 2.85 update
[Torque-3d.git] / Engine / lib / bullet / src / LinearMath / btPolarDecomposition.h
blob1feea0f78e859164487f48b81f18a4941564f415
1 #ifndef POLARDECOMPOSITION_H
2 #define POLARDECOMPOSITION_H
4 #include "btMatrix3x3.h"
6 /**
7 * This class is used to compute the polar decomposition of a matrix. In
8 * general, the polar decomposition factorizes a matrix, A, into two parts: a
9 * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H).
10 * However, in this particular implementation the original matrix, A, is
11 * required to be a square 3x3 matrix with real elements. This means that U will
12 * be an orthogonal matrix and H with be a positive-definite, symmetric matrix.
14 class btPolarDecomposition
16 public:
19 /**
20 * Creates an instance with optional parameters.
22 * @param tolerance - the tolerance used to determine convergence of the
23 * algorithm
24 * @param maxIterations - the maximum number of iterations used to achieve
25 * convergence
27 btPolarDecomposition(btScalar tolerance = btScalar(0.0001),
28 unsigned int maxIterations = 16);
30 /**
31 * Decomposes a matrix into orthogonal and symmetric, positive-definite
32 * parts. If the number of iterations returned by this function is equal to
33 * the maximum number of iterations, the algorithm has failed to converge.
35 * @param a - the original matrix
36 * @param u - the resulting orthogonal matrix
37 * @param h - the resulting symmetric matrix
39 * @return the number of iterations performed by the algorithm.
41 unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const;
43 /**
44 * Returns the maximum number of iterations that this algorithm will perform
45 * to achieve convergence.
47 * @return maximum number of iterations
49 unsigned int maxIterations() const;
51 private:
52 btScalar m_tolerance;
53 unsigned int m_maxIterations;
56 /**
57 * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix
58 * 'u' and a symmetric, positive-definite matrix 'h'. If the number of
59 * iterations returned by this function is equal to
60 * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to
61 * converge.
63 * @param a - the original matrix
64 * @param u - the resulting orthogonal matrix
65 * @param h - the resulting symmetric matrix
67 * @return the number of iterations performed by the algorithm.
69 unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h);
71 #endif // POLARDECOMPOSITION_H