// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2013 Alec Jacobson // // This Source Code Form is subject to the terms of the Mozilla Public License // v. 2.0. If a copy of the MPL was not distributed with this file, You can // obtain one at http://mozilla.org/MPL/2.0/. #ifndef IGL_POLAR_SVD #define IGL_POLAR_SVD #include "igl_inline.h" #include namespace igl { // Computes the polar decomposition (R,T) of a matrix A using SVD singular // value decomposition // // Inputs: // A 3 by 3 matrix to be decomposed // Outputs: // R 3 by 3 rotation matrix part of decomposition (**always rotataion**) // T 3 by 3 stretch matrix part of decomposition // U 3 by 3 left-singular vectors // S 3 by 1 singular values // V 3 by 3 right-singular vectors // // template < typename DerivedA, typename DerivedR, typename DerivedT, typename DerivedU, typename DerivedS, typename DerivedV> IGL_INLINE void polar_svd( const Eigen::PlainObjectBase & A, Eigen::PlainObjectBase & R, Eigen::PlainObjectBase & T, Eigen::PlainObjectBase & U, Eigen::PlainObjectBase & S, Eigen::PlainObjectBase & V); template < typename DerivedA, typename DerivedR, typename DerivedT> IGL_INLINE void polar_svd( const Eigen::PlainObjectBase & A, Eigen::PlainObjectBase & R, Eigen::PlainObjectBase & T); } #ifndef IGL_STATIC_LIBRARY # include "polar_svd.cpp" #endif #endif