Home | History | Annotate | Download | only in Geometry

Lines Matching defs:Dim

15 // Note that we have to pass Dim and HDim because it is not allowed to use a template
17 // specializations, it is not allowed to use Dim+1 instead of HDim.
19 int Dim,
34 * The homography is internally represented and stored as a (Dim+1)^2 matrix which
48 Dim = _Dim, ///< space dimension in which the transformation holds
56 typedef Matrix<Scalar,Dim,Dim> LinearMatrixType;
58 typedef Block<MatrixType,Dim,Dim> LinearPart;
60 typedef const Block<const MatrixType,Dim,Dim> ConstLinearPart;
62 typedef Matrix<Scalar,Dim,1> VectorType;
64 typedef Block<MatrixType,Dim,1> TranslationPart;
66 typedef const Block<const MatrixType,Dim,1> ConstTranslationPart;
68 typedef Translation<Scalar,Dim> TranslationType;
70 typedef Scaling<Scalar,Dim> ScalingType;
89 inline explicit Transform(const RotationBase<Derived, Dim>& r) { *this = r; }
109 transform->matrix()(Dim,Dim) = Scalar(1);
110 transform->matrix().template block<1,Dim>(Dim,0).setZero();
114 /** Constructs and initializes a transformation from a Dim^2 or a (Dim+1)^2 matrix. */
118 construct_from_matrix<OtherDerived, int(OtherDerived::RowsAtCompileTime) == Dim>::run(this, other);
121 /** Set \c *this from a (Dim+1)^2 matrix. */
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); }
160 * \li a vector of size Dim,
161 * \li an homogeneous vector of size Dim+1,
162 * \li a transformation matrix of size Dim+1 x Dim+1.
168 { return ei_transform_product_impl<OtherDerived,Dim,HDim>::run(*this,other.derived()); }
171 * The transformation matrix \a a must have a Dim+1 x Dim+1 sizes. */
223 res.matrix().row(Dim) = t.matrix().row(Dim);
224 res.matrix().template block<Dim,HDim>(0,0) = (mat * t.matrix().template block<Dim,HDim>(0,0)).lazy();
229 inline Transform& operator=(const RotationBase<Derived,Dim>& r);
231 inline Transform& operator*=(const RotationBase<Derived,Dim>& r) { return rotate(r.toRotationMatrix()); }
233 inline Transform operator*(const RotationBase<Derived,Dim>& r) const;
258 inline typename internal::cast_return_type<Transform,Transform<NewScalarType,Dim> >::type cast() const
259 { return typename internal::cast_return_type<Transform,Transform<NewScalarType,Dim> >::type(*this); }
263 inline explicit Transform(const Transform<OtherScalarType,Dim>& other)
299 template<typename Scalar, int Dim>
300 Transform<Scalar,Dim>::Transform(const QMatrix& other)
309 template<typename Scalar, int Dim>
310 Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const QMatrix& other)
312 EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
325 template<typename Scalar, int Dim>
326 QMatrix Transform<Scalar,Dim>::toQMatrix(void) const
328 EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
338 template<typename Scalar, int Dim>
339 Transform<Scalar,Dim>::Transform(const QTransform& other)
348 template<typename Scalar, int Dim>
349 Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const QTransform& other)
351 EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
362 template<typename Scalar, int Dim>
363 QTransform Transform<Scalar,Dim>::toQTransform(void) const
365 EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
380 template<typename Scalar, int Dim>
382 Transform<Scalar,Dim>&
383 Transform<Scalar,Dim>::scale(const MatrixBase<OtherDerived> &other)
385 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,int(Dim))
394 template<typename Scalar, int Dim>
395 inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::scale(Scalar s)
405 template<typename Scalar, int Dim>
407 Transform<Scalar,Dim>&
408 Transform<Scalar,Dim>::prescale(const MatrixBase<OtherDerived> &other)
410 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,int(Dim))
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>
420 inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::prescale(Scalar s)
422 m_matrix.template corner<Dim,HDim>(TopLeft) *= s;
430 template<typename Scalar, int Dim>
432 Transform<Scalar,Dim>&
433 Transform<Scalar,Dim>::translate(const MatrixBase<OtherDerived> &other)
435 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,int(Dim))
444 template<typename Scalar, int Dim>
446 Transform<Scalar,Dim>&
447 Transform<Scalar,Dim>::pretranslate(const MatrixBase<OtherDerived> &other)
449 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,int(Dim))
462 * - a Dim x Dim matrix expression,
471 template<typename Scalar, int Dim>
473 Transform<Scalar,Dim>&
474 Transform<Scalar,Dim>::rotate(const RotationType& rotation)
476 linear() *= ei_toRotationMatrix<Scalar,Dim>(rotation);
487 template<typename Scalar, int Dim>
489 Transform<Scalar,Dim>&
490 Transform<Scalar,Dim>::prerotate(const RotationType& rotation)
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>
503 Transform<Scalar,Dim>&
504 Transform<Scalar,Dim>::shear(Scalar sx, Scalar sy)
506 EIGEN_STATIC_ASSERT(int(Dim)==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
517 template<typename Scalar, int Dim>
518 Transform<Scalar,Dim>&
519 Transform<Scalar,Dim>::preshear(Scalar sx, Scalar sy)
521 EIGEN_STATIC_ASSERT(int(Dim)==2, YOU_MADE_A_PROGRAMMING_MISTAKE)
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>
531 inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const TranslationType& t)
535 m_matrix.template block<1,Dim>(Dim,0).setZero();
536 m_matrix(Dim,Dim) = Scalar(1);
540 template<typename Scalar, int Dim>
541 inline Transform<Scalar,Dim> Transform<Scalar,Dim>::operator*(const TranslationType& t) const
548 template<typename Scalar, int Dim>
549 inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const ScalingType& s)
553 m_matrix.coeffRef(Dim,Dim) = Scalar(1);
557 template<typename Scalar, int Dim>
558 inline Transform<Scalar,Dim> Transform<Scalar,Dim>::operator*(const ScalingType& s) const
565 template<typename Scalar, int Dim>
567 inline Transform<Scalar,Dim>& Transform<Scalar,Dim>::operator=(const RotationBase<Derived,Dim>& r)
569 linear() = ei_toRotationMatrix<Scalar,Dim>(r);
571 m_matrix.template block<1,Dim>(Dim,0).setZero();
572 m_matrix.coeffRef(Dim,Dim) = Scalar(1);
576 template<typename Scalar, int Dim>
578 inline Transform<Scalar,Dim> Transform<Scalar,Dim>::operator*(const RotationBase<Derived,Dim>& r) const
596 template<typename Scalar, int Dim>
597 typename Transform<Scalar,Dim>::LinearMatrixType
598 Transform<Scalar,Dim>::rotation() const
617 template<typename Scalar, int Dim>
619 void Transform<Scalar,Dim>::computeRotationScaling(RotationMatrixType *rotation, ScalingMatrixType *scaling) const
623 Matrix<Scalar, Dim, 1> sv(svd.singularValues());
648 template<typename Scalar, int Dim>
650 void Transform<Scalar,Dim>::computeScalingRotation(ScalingMatrixType *scaling, RotationMatrixType *rotation) const
654 Matrix<Scalar, Dim, 1> sv(svd.singularValues());
671 template<typename Scalar, int Dim>
673 Transform<Scalar,Dim>&
674 Transform<Scalar,Dim>::fromPositionOrientationScale(const MatrixBase<PositionDerived> &position,
677 linear() = ei_toRotationMatrix<Scalar,Dim>(orientation);
680 m_matrix.template block<1,Dim>(Dim,0).setZero();
681 m_matrix(Dim,Dim) = Scalar(1);
704 template<typename Scalar, int Dim>
705 inline const typename Transform<Scalar,Dim>::MatrixType
706 Transform<Scalar,Dim>::inverse(TransformTraits traits) const
717 res.template corner<Dim,Dim>(TopLeft) = linear().inverse();
721 res.template corner<Dim,Dim>(TopLeft) = linear().transpose();
728 res.template corner<Dim,1>(TopRight) = - res.template corner<Dim,Dim>(TopLeft) * translation();
729 res.template corner<1,Dim>(BottomLeft).setZero();
730 res.coeffRef(Dim,Dim) = Scalar(1);
739 template<typename Other, int Dim, int HDim>
740 struct ei_transform_product_impl<Other,Dim,HDim, HDim,HDim>
742 typedef Transform<typename Other::Scalar,Dim> TransformType;
749 template<typename Other, int Dim, int HDim>
750 struct ei_transform_product_impl<Other,Dim,HDim, Dim,Dim>
752 typedef Transform<typename Other::Scalar,Dim> TransformType;
759 res.matrix().row(Dim) = tr.matrix().row(Dim);
765 template<typename Other, int Dim, int HDim>
766 struct ei_transform_product_impl<Other,Dim,HDim, HDim,1>
768 typedef Transform<typename Other::Scalar,Dim> TransformType;
775 template<typename Other, int Dim, int HDim>
776 struct ei_transform_product_impl<Other,Dim,HDim, Dim,1>
779 typedef Transform<Scalar,Dim> TransformType;
780 typedef Matrix<Scalar,Dim,1> ResultType;
783 * (Scalar(1) / ( (tr.matrix().template block<1,Dim>(Dim,0) * other).coeff(0) + tr.matrix().coeff(Dim,Dim))); }