|
Blender V4.5
|
Go to the source code of this file.
Classes | |
| class | btMatrix2x2 |
| class | GivensRotation |
Functions | |
| static btScalar | copySign (btScalar x, btScalar y) |
| void | zeroChase (btMatrix3x3 &H, btMatrix3x3 &U, btMatrix3x3 &V) |
| zero chasing the 3X3 matrix to bidiagonal form original form of H: x x 0 x x x 0 0 x after zero chase: x x 0 0 x x 0 0 x | |
| void | makeUpperBidiag (btMatrix3x3 &H, btMatrix3x3 &U, btMatrix3x3 &V) |
| make a 3X3 matrix to upper bidiagonal form original form of H: x x x x x x x x x after zero chase: x x 0 0 x x 0 0 x | |
| void | makeLambdaShape (btMatrix3x3 &H, btMatrix3x3 &U, btMatrix3x3 &V) |
| make a 3X3 matrix to lambda shape original form of H: x x x x x x x x x after : x 0 0 x x 0 x 0 x | |
| void | polarDecomposition (const btMatrix2x2 &A, GivensRotation &R, const btMatrix2x2 &S_Sym) |
| 2x2 polar decomposition. | |
| void | polarDecomposition (const btMatrix2x2 &A, const btMatrix2x2 &R, const btMatrix2x2 &S_Sym) |
| void | singularValueDecomposition (const btMatrix2x2 &A, GivensRotation &U, const btMatrix2x2 &Sigma, GivensRotation &V, const btScalar tol=64 *std::numeric_limits< btScalar >::epsilon()) |
| 2x2 SVD (singular value decomposition) A=USV' | |
| void | singularValueDecomposition (const btMatrix2x2 &A, const btMatrix2x2 &U, const btMatrix2x2 &Sigma, const btMatrix2x2 &V, const btScalar tol=64 *std::numeric_limits< btScalar >::epsilon()) |
| 2x2 SVD (singular value decomposition) A=USV' | |
| btScalar | wilkinsonShift (const btScalar a1, const btScalar b1, const btScalar a2) |
| compute wilkinsonShift of the block a1 b1 b1 a2 based on the wilkinsonShift formula mu = c + d - sign (d) \ sqrt (d*d + b*b), where d = (a-c)/2 | |
| template<int t> | |
| void | process (btMatrix3x3 &B, btMatrix3x3 &U, btVector3 &sigma, btMatrix3x3 &V) |
| Helper function of 3X3 SVD for processing 2X2 SVD. | |
| void | flipSign (int i, btMatrix3x3 &U, btVector3 &sigma) |
| Helper function of 3X3 SVD for flipping signs due to flipping signs of sigma. | |
| void | flipSign (int i, btMatrix3x3 &U) |
| void | swapCol (btMatrix3x3 &A, int i, int j) |
| void | sort (btMatrix3x3 &U, btVector3 &sigma, btMatrix3x3 &V, int t) |
| Helper function of 3X3 SVD for sorting singular values. | |
| int | singularValueDecomposition (const btMatrix3x3 &A, btMatrix3x3 &U, btVector3 &sigma, btMatrix3x3 &V, btScalar tol=128 *std::numeric_limits< btScalar >::epsilon()) |
| 3X3 SVD (singular value decomposition) A=USV' | |
Definition at line 90 of file btImplicitQRSVD.h.
References copySign(), x, and y.
Referenced by copySign(), and wilkinsonShift().
|
inline |
Definition at line 653 of file btImplicitQRSVD.h.
References btMatrix3x3, flipSign(), i, and U.
|
inline |
Helper function of 3X3 SVD for flipping signs due to flipping signs of sigma.
Definition at line 645 of file btImplicitQRSVD.h.
References btMatrix3x3, btVector3, flipSign(), i, and U.
Referenced by flipSign(), flipSign(), and sort().
|
inline |
make a 3X3 matrix to lambda shape original form of H: x x x x x x x x x after : x 0 0 x x 0 x 0 x
Reduce H to of form x x 0 x x x x x x
Reduce H to of form x x 0 x x 0 x x x
Reduce H to of form x x 0 x x 0 x 0 x
Reduce H to of form x 0 0 x x 0 x 0 x
Definition at line 372 of file btImplicitQRSVD.h.
References btMatrix3x3, GivensRotation::columnRotation(), GivensRotation::computeUnconventional(), H, makeLambdaShape(), GivensRotation::rowRotation(), U, and V.
Referenced by makeLambdaShape().
|
inline |
make a 3X3 matrix to upper bidiagonal form original form of H: x x x x x x x x x after zero chase: x x 0 0 x x 0 0 x
Reduce H to of form x x x x x x 0 x x
Definition at line 342 of file btImplicitQRSVD.h.
References btMatrix3x3, GivensRotation::columnRotation(), H, makeUpperBidiag(), GivensRotation::rowRotation(), U, V, and zeroChase().
Referenced by makeUpperBidiag(), and singularValueDecomposition().
|
inline |
Definition at line 453 of file btImplicitQRSVD.h.
References A, GivensRotation::fill(), polarDecomposition(), and R.
|
inline |
2x2 polar decomposition.
| [in] | A | matrix. |
| [out] | R | Robustly a rotation matrix. |
| [out] | S_Sym | Symmetric. Whole matrix is stored |
Polar guarantees negative sign is on the small magnitude singular value. S is guaranteed to be the closest one to identity. R is guaranteed to be the closest rotation to A.
Definition at line 431 of file btImplicitQRSVD.h.
References A, b, btSqrt(), polarDecomposition(), R, and SIMD_EPSILON.
Referenced by polarDecomposition(), polarDecomposition(), and singularValueDecomposition().
|
inline |
Helper function of 3X3 SVD for processing 2X2 SVD.
Definition at line 592 of file btImplicitQRSVD.h.
References B, btMatrix3x3, btVector3, GivensRotation::columnRotation(), btMatrix2x2::m_00, btMatrix2x2::m_01, btMatrix2x2::m_10, btMatrix2x2::m_11, process(), GivensRotation::rowi, GivensRotation::rowk, singularValueDecomposition(), U, V, and v.
Referenced by add_cube(), addtovertices(), BKE_mball_polygonize(), build_bvh_spatial(), converge(), docube(), find_first_points(), freepolygonize(), init_meta(), make_face(), metaball(), polygonize(), process(), setcenter(), setcorner(), setedge(), singularValueDecomposition(), and vertid().
|
inline |
2x2 SVD (singular value decomposition) A=USV'
| [in] | A | Input matrix. |
| [out] | U | Robustly a rotation matrix. |
| [out] | Sigma | Vector of singular values sorted with decreasing magnitude. The second one can be negative. |
| [out] | V | Robustly a rotation matrix. |
Definition at line 549 of file btImplicitQRSVD.h.
References A, GivensRotation::fill(), singularValueDecomposition(), U, and V.
|
inline |
2x2 SVD (singular value decomposition) A=USV'
| [in] | A | Input matrix. |
| [out] | U | Robustly a rotation matrix in Givens form |
| [out] | Sigma | matrix of singular values sorted with decreasing magnitude. The second one can be negative. |
| [out] | V | Robustly a rotation matrix in Givens form |
Definition at line 469 of file btImplicitQRSVD.h.
References A, btSqrt(), polarDecomposition(), btMatrix2x2::setIdentity(), SIMD_EPSILON, singularValueDecomposition(), U, V, w(), x, y, and z().
Referenced by btDeformableLinearElasticityForce::addScaledElasticForce(), btDeformableNeoHookeanForce::addScaledElasticForce(), btSoftBody::getRigidTransform(), process(), singularValueDecomposition(), singularValueDecomposition(), and singularValueDecomposition().
|
inline |
3X3 SVD (singular value decomposition) A=USV'
| [in] | A | Input matrix. |
| [out] | U | is a rotation matrix. |
| [out] | sigma | Diagonal matrix, sorted with decreasing magnitude. The third one can be negative. |
| [out] | V | is a rotation matrix. |
Do implicit shift QR until A^T A is block diagonal
Handle the cases of one of the alphas and betas being 0 Sorted by ease of handling and then frequency of occurrence
If B is of form x x 0 0 x 0 0 0 x
If B is of form x 0 0 0 x x 0 0 x
If B is of form x x 0 0 0 x 0 0 x
Reduce B to x x 0 0 0 0 0 0 x
If B is of form x x 0 0 x x 0 0 0
Reduce B to x x + 0 x 0 0 0 0
Reduce B to x x 0
If B is of form 0 x 0 0 x x 0 0 x
Reduce B to 0 0 + 0 x x 0 0 x
Reduce B to 0 0 0 0 x x 0 + x
Definition at line 750 of file btImplicitQRSVD.h.
References A, B, btFabs(), btMatrix3x3, btMax(), btSqrt(), btVector3, GivensRotation::columnRotation(), GivensRotation::compute(), GivensRotation::computeUnconventional(), makeUpperBidiag(), process(), GivensRotation::rowRotation(), SIMD_EPSILON, singularValueDecomposition(), sort(), U, V, wilkinsonShift(), and zeroChase().
|
inline |
Helper function of 3X3 SVD for sorting singular values.
Definition at line 668 of file btImplicitQRSVD.h.
References btFabs(), btMatrix3x3, btVector3, flipSign(), sort(), swapCol(), U, and V.
Referenced by Freestyle::ViewMapBuilder::ComputeSweepLineIntersections(), filelist_setsorting(), NamedNestedSampleStats::full_report(), NamedSampleCountStats::full_report(), NamedSizeStats::full_report(), NamedTimeStats::full_report(), blender::ed::transform::object_project_all_view3d_ex(), OSLRenderServices::pointcloud_search(), blender::ed::transform::snap_object_project_ray_all(), and DeviceQueue::~DeviceQueue().
|
inline |
Definition at line 660 of file btImplicitQRSVD.h.
References A, btMatrix3x3, i, and swapCol().
compute wilkinsonShift of the block a1 b1 b1 a2 based on the wilkinsonShift formula mu = c + d - sign (d) \ sqrt (d*d + b*b), where d = (a-c)/2
Definition at line 572 of file btImplicitQRSVD.h.
References btFabs(), btSqrt(), copySign(), SIMD_EPSILON, and wilkinsonShift().
Referenced by singularValueDecomposition(), and wilkinsonShift().
|
inline |
zero chasing the 3X3 matrix to bidiagonal form original form of H: x x 0 x x x 0 0 x after zero chase: x x 0 0 x x 0 0 x
Reduce H to of form x x + 0 x x 0 0 x
Reduce H to of form x x 0 0 x x 0 + x Can calculate r2 without multiplying by r1 since both entries are in first two rows thus no need to divide by sqrt(a^2+b^2)
Reduce H to of form x x 0 0 x x 0 0 x
Definition at line 286 of file btImplicitQRSVD.h.
References btMatrix3x3, GivensRotation::columnRotation(), GivensRotation::compute(), H, GivensRotation::rowRotation(), U, V, and zeroChase().
Referenced by makeUpperBidiag(), singularValueDecomposition(), and zeroChase().