18 template<
typename Other,
21 int OtherRows=Other::RowsAtCompileTime,
22 int OtherCols=Other::ColsAtCompileTime>
42 template<
typename _Scalar,
int _Dim>
86 inline explicit Transform(
const TranslationType& t) { *
this = t; }
87 inline explicit Transform(
const ScalingType& s) { *
this = s; }
88 template<
typename Derived>
92 { m_matrix = other.
m_matrix;
return *
this; }
94 template<
typename OtherDerived,
bool BigMatrix>
99 transform->
matrix() = other;
107 transform->
linear() = other;
110 transform->
matrix().template block<1,Dim>(Dim,0).setZero();
115 template<
typename OtherDerived>
122 template<
typename OtherDerived>
124 { m_matrix = other;
return *
this; }
126 #ifdef EIGEN_QT_SUPPORT 129 inline QMatrix toQMatrix(
void)
const;
130 inline Transform(
const QTransform& other);
132 inline QTransform toQTransform(
void)
const;
148 inline ConstLinearPart
linear()
const {
return m_matrix.template block<Dim,Dim>(0,0); }
150 inline LinearPart
linear() {
return m_matrix.template block<Dim,Dim>(0,0); }
153 inline ConstTranslationPart
translation()
const {
return m_matrix.template block<Dim,1>(0,Dim); }
155 inline TranslationPart
translation() {
return m_matrix.template block<Dim,1>(0,Dim); }
165 template<
typename OtherDerived>
172 template<
typename OtherDerived>
175 {
return a.derived() * b.
matrix(); }
184 static const typename MatrixType::IdentityReturnType
Identity()
186 return MatrixType::Identity();
189 template<
typename OtherDerived>
192 template<
typename OtherDerived>
198 template<
typename OtherDerived>
201 template<
typename OtherDerived>
204 template<
typename RotationType>
207 template<
typename RotationType>
224 res.
matrix().template block<Dim,HDim>(0,0) = (mat * t.
matrix().template block<Dim,HDim>(0,0)).lazy();
228 template<
typename Derived>
230 template<
typename Derived>
232 template<
typename Derived>
236 template<
typename RotationMatrixType,
typename ScalingMatrixType>
238 template<
typename ScalingMatrixType,
typename RotationMatrixType>
241 template<
typename PositionDerived,
typename OrientationType,
typename ScaleDerived>
248 const Scalar*
data()
const {
return m_matrix.
data(); }
257 template<
typename NewScalarType>
262 template<
typename OtherScalarType>
264 { m_matrix = other.
matrix().template cast<Scalar>(); }
271 {
return m_matrix.isApprox(other.
m_matrix, prec); }
273 #ifdef EIGEN_TRANSFORM_PLUGIN 274 #include EIGEN_TRANSFORM_PLUGIN 294 #ifdef EIGEN_QT_SUPPORT 299 template<
typename Scalar,
int Dim>
309 template<
typename Scalar,
int Dim>
313 m_matrix << other.m11(), other.m21(), other.dx(),
314 other.m12(), other.m22(), other.dy(),
325 template<
typename Scalar,
int Dim>
329 return QMatrix(m_matrix.
coeff(0,0), m_matrix.
coeff(1,0),
338 template<
typename Scalar,
int Dim>
348 template<
typename Scalar,
int Dim>
352 m_matrix << other.m11(), other.m21(), other.dx(),
353 other.m12(), other.m22(), other.dy(),
354 other.m13(), other.m23(), other.m33();
362 template<
typename Scalar,
int Dim>
366 return QTransform(m_matrix.
coeff(0,0), m_matrix.
coeff(1,0), m_matrix.
coeff(2,0),
380 template<
typename Scalar,
int Dim>
381 template<
typename OtherDerived>
394 template<
typename Scalar,
int Dim>
405 template<
typename Scalar,
int Dim>
406 template<
typename OtherDerived>
411 m_matrix.template block<Dim,HDim>(0,0) = (other.
asDiagonal() * m_matrix.template block<Dim,HDim>(0,0)).lazy();
419 template<
typename Scalar,
int Dim>
422 m_matrix.template corner<Dim,HDim>(
TopLeft) *= s;
430 template<
typename Scalar,
int Dim>
431 template<
typename OtherDerived>
444 template<
typename Scalar,
int Dim>
445 template<
typename OtherDerived>
471 template<
typename Scalar,
int Dim>
472 template<
typename RotationType>
487 template<
typename Scalar,
int Dim>
488 template<
typename RotationType>
492 m_matrix.template block<Dim,HDim>(0,0) = ei_toRotationMatrix<Scalar,Dim>(rotation)
493 * m_matrix.template block<Dim,HDim>(0,0);
502 template<
typename Scalar,
int Dim>
517 template<
typename Scalar,
int Dim>
522 m_matrix.template block<Dim,HDim>(0,0) =
LinearMatrixType(1, sx, sy, 1) * m_matrix.template block<Dim,HDim>(0,0);
530 template<
typename Scalar,
int Dim>
535 m_matrix.template block<1,Dim>(Dim,0).setZero();
540 template<
typename Scalar,
int Dim>
548 template<
typename Scalar,
int Dim>
557 template<
typename Scalar,
int Dim>
565 template<
typename Scalar,
int Dim>
566 template<
typename Derived>
569 linear() = ei_toRotationMatrix<Scalar,Dim>(r);
571 m_matrix.template block<1,Dim>(Dim,0).setZero();
576 template<
typename Scalar,
int Dim>
577 template<
typename Derived>
596 template<
typename Scalar,
int Dim>
600 LinearMatrixType result;
617 template<
typename Scalar,
int Dim>
618 template<
typename RotationMatrixType,
typename ScalingMatrixType>
622 Scalar x = (svd.
matrixU() * svd.
matrixV().adjoint()).determinant();
627 scaling->noalias() = svd.
matrixV() * sv.asDiagonal() * svd.
matrixV().adjoint();
631 LinearMatrixType m(svd.
matrixU());
633 rotation->noalias() = m * svd.
matrixV().adjoint();
648 template<
typename Scalar,
int Dim>
649 template<
typename ScalingMatrixType,
typename RotationMatrixType>
653 Scalar x = (svd.
matrixU() * svd.
matrixV().adjoint()).determinant();
658 scaling->noalias() = svd.
matrixU() * sv.asDiagonal() * svd.
matrixU().adjoint();
662 LinearMatrixType m(svd.
matrixU());
664 rotation->noalias() = m * svd.
matrixV().adjoint();
671 template<
typename Scalar,
int Dim>
672 template<
typename PositionDerived,
typename OrientationType,
typename ScaleDerived>
677 linear() = ei_toRotationMatrix<Scalar,Dim>(orientation);
680 m_matrix.template block<1,Dim>(Dim,0).setZero();
704 template<
typename Scalar,
int Dim>
710 return m_matrix.inverse();
721 res.template corner<Dim,Dim>(
TopLeft) =
linear().transpose();
725 ei_assert(
"invalid traits value in Transform::inverse()");
729 res.template corner<1,Dim>(
BottomLeft).setZero();
739 template<
typename Other,
int Dim,
int HDim>
745 static ResultType
run(
const TransformType& tr,
const Other& other)
746 {
return tr.
matrix() * other; }
749 template<
typename Other,
int Dim,
int HDim>
755 static ResultType
run(
const TransformType& tr,
const Other& other)
765 template<
typename Other,
int Dim,
int HDim>
771 static ResultType
run(
const TransformType& tr,
const Other& other)
772 {
return tr.
matrix() * other; }
775 template<
typename Other,
int Dim,
int HDim>
781 static ResultType
run(
const TransformType& tr,
const Other& other)
Expression of the product of two general matrices or vectors.
Represents a possibly non uniform scaling transformation.
const VectorType & vector() const
iterative scaling algorithm to equilibrate rows and column norms in matrices
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
const SingularValuesType & singularValues() const
Represents a translation transformation.
Transform< float, 2 > Transform2f
const VectorType & coeffs() const
EIGEN_STRONG_INLINE const Scalar & coeff(Index rowId, Index colId) const
EIGEN_STRONG_INLINE Scalar & coeffRef(Index rowId, Index colId)
Common base class for compact rotation representations.
Transform< float, 3 > Transform3f
Derived & setZero(Index size)
EIGEN_STRONG_INLINE const Scalar * data() const
Expression of a fixed-size or dynamic-size block.
Two-sided Jacobi SVD decomposition of a rectangular matrix.
const Derived & derived() const
const MatrixUType & matrixU() const
const DiagonalWrapper< const Derived > asDiagonal() const
Transform< double, 2 > Transform2d
Base class for all dense matrices, vectors, and expressions.
const MatrixVType & matrixV() const
RotationMatrixType toRotationMatrix() const
#define EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(TYPE, SIZE)
Transform< double, 3 > Transform3d