diff options
author | 2009-09-18 18:45:45 -0400 | |
---|---|---|
committer | 2009-09-18 18:45:45 -0400 | |
commit | 760636a237d875aa6f0e108e432fd98974ab25ea (patch) | |
tree | 9266a26a6f6b56fca9487e86a58941eccbc306dd /Eigen | |
parent | fcae32cc3fde7e0a4928c1f896f3eac82b48891d (diff) |
fix bug #52: Transform::inverse() should return a Transform
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Geometry/Transform.h | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index 9eb8ed535..dcb41435b 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h @@ -395,7 +395,7 @@ public: Transform& fromPositionOrientationScale(const MatrixBase<PositionDerived> &position, const OrientationType& orientation, const MatrixBase<ScaleDerived> &scale); - inline const MatrixType inverse(TransformTraits traits = (TransformTraits)Mode) const; + inline Transform inverse(TransformTraits traits = (TransformTraits)Mode) const; /** \returns a const pointer to the column major internal matrix */ const Scalar* data() const { return m_matrix.data(); } @@ -874,7 +874,7 @@ Transform<Scalar,Dim,Mode>::fromPositionOrientationScale(const MatrixBase<Positi /** \nonstableyet * - * \returns the inverse transformation matrix according to some given knowledge + * \returns the inverse transformation according to some given knowledge * on \c *this. * * \param traits allows to optimize the inversion process when the transformion @@ -892,37 +892,37 @@ Transform<Scalar,Dim,Mode>::fromPositionOrientationScale(const MatrixBase<Positi * \sa MatrixBase::inverse() */ template<typename Scalar, int Dim, int Mode> -const typename Transform<Scalar,Dim,Mode>::MatrixType +Transform<Scalar,Dim,Mode> Transform<Scalar,Dim,Mode>::inverse(TransformTraits hint) const { + Transform res; if (hint == Projective) { - return m_matrix.inverse(); + res.matrix() = m_matrix.inverse(); } else { - MatrixType res; if (hint == Isometry) { - res.template corner<Dim,Dim>(TopLeft) = linear().transpose(); + res.matrix().template corner<Dim,Dim>(TopLeft) = linear().transpose(); } else if(hint&Affine) { - res.template corner<Dim,Dim>(TopLeft) = linear().inverse(); + res.matrix().template corner<Dim,Dim>(TopLeft) = linear().inverse(); } else { ei_assert(false && "Invalid transform traits in Transform::Inverse"); } // translation and remaining parts - res.template corner<Dim,1>(TopRight) = - res.template corner<Dim,Dim>(TopLeft) * translation(); + res.matrix().template corner<Dim,1>(TopRight) = - res.matrix().template corner<Dim,Dim>(TopLeft) * translation(); if(int(Mode)!=int(AffineCompact)) { - res.template block<1,Dim>(Dim,0).setZero(); - res.coeffRef(Dim,Dim) = 1; + res.matrix().template block<1,Dim>(Dim,0).setZero(); + res.matrix().coeffRef(Dim,Dim) = 1; } - return res; } + return res; } /***************************************************** |