aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-09-18 18:45:45 -0400
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-09-18 18:45:45 -0400
commit760636a237d875aa6f0e108e432fd98974ab25ea (patch)
tree9266a26a6f6b56fca9487e86a58941eccbc306dd /Eigen
parentfcae32cc3fde7e0a4928c1f896f3eac82b48891d (diff)
fix bug #52: Transform::inverse() should return a Transform
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/Geometry/Transform.h22
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;
}
/*****************************************************