diff options
Diffstat (limited to 'Eigen/src/Geometry/Transform.h')
-rw-r--r-- | Eigen/src/Geometry/Transform.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index d03fd52fd..70204f72b 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h @@ -876,6 +876,24 @@ Transform<Scalar,Dim,Mode>::fromPositionOrientationScale(const MatrixBase<Positi return *this; } +// selector needed to avoid taking the inverse of a 3x4 matrix +template<typename TransformType, int Mode=TransformType::Mode> +struct ei_projective_transform_inverse +{ + static inline void run(const TransformType&, TransformType&) + {} +}; + +template<typename TransformType> +struct ei_projective_transform_inverse<TransformType, Projective> +{ + static inline void run(const TransformType& m, TransformType& res) + { + res.matrix() = m.matrix().inverse(); + } +}; + + /** \nonstableyet * * \returns the inverse transformation according to some given knowledge @@ -902,7 +920,7 @@ Transform<Scalar,Dim,Mode>::inverse(TransformTraits hint) const Transform res; if (hint == Projective) { - res.matrix() = m_matrix.inverse(); + ei_projective_transform_inverse<Transform>::run(*this, res); } else { |