10#ifndef EIGEN_SCALING_H
11#define EIGEN_SCALING_H
37 template <
typename Scalar,
int Dim,
int Mode>
38 struct uniformscaling_times_affine_returntype
44 typedef Transform <Scalar, Dim, NewMode> type;
48template<
typename _Scalar>
66 inline const Scalar& factor()
const {
return m_factor; }
67 inline Scalar& factor() {
return m_factor; }
75 inline Transform<Scalar,Dim,Affine>
operator* (
const Translation<Scalar,Dim>& t)
const;
78 template<
int Dim,
int Mode,
int Options>
80 internal::uniformscaling_times_affine_returntype<Scalar,Dim,Mode>::type
81 operator* (
const Transform<Scalar, Dim, Mode, Options>& t)
const
83 typename internal::uniformscaling_times_affine_returntype<Scalar,Dim,Mode>::type res = t;
84 res.prescale(factor());
90 template<
typename Derived>
91 inline typename Eigen::internal::plain_matrix_type<Derived>::type
operator* (
const MatrixBase<Derived>& other)
const
92 {
return other * m_factor; }
94 template<
typename Derived,
int Dim>
95 inline Matrix<Scalar,Dim,Dim>
operator*(
const RotationBase<Derived,Dim>& r)
const
96 {
return r.toRotationMatrix() * m_factor; }
107 template<
typename NewScalarType>
108 inline UniformScaling<NewScalarType>
cast()
const
109 {
return UniformScaling<NewScalarType>(NewScalarType(m_factor)); }
112 template<
typename OtherScalarType>
114 { m_factor =
Scalar(other.factor()); }
121 {
return internal::isApprox(m_factor, other.factor(), prec); }
133template<
typename Derived,
typename Scalar>
134EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,Scalar,product)
136{
return matrix.derived() * s.factor(); }
139inline UniformScaling<float>
Scaling(
float s) {
return UniformScaling<float>(s); }
141inline UniformScaling<double>
Scaling(
double s) {
return UniformScaling<double>(s); }
143template<
typename RealScalar>
144inline UniformScaling<std::complex<RealScalar> >
Scaling(
const std::complex<RealScalar>& s)
145{
return UniformScaling<std::complex<RealScalar> >(s); }
148template<
typename Scalar>
149inline DiagonalMatrix<Scalar,2>
Scaling(
const Scalar& sx,
const Scalar& sy)
150{
return DiagonalMatrix<Scalar,2>(sx, sy); }
152template<
typename Scalar>
153inline DiagonalMatrix<Scalar,3>
Scaling(
const Scalar& sx,
const Scalar& sy,
const Scalar& sz)
154{
return DiagonalMatrix<Scalar,3>(sx, sy, sz); }
159template<
typename Derived>
160inline const DiagonalWrapper<const Derived>
Scaling(
const MatrixBase<Derived>& coeffs)
161{
return coeffs.asDiagonal(); }
173template<
typename Scalar>
175inline Transform<Scalar,Dim,Affine>
178 Transform<Scalar,Dim,Affine> res;
179 res.matrix().setZero();
180 res.linear().diagonal().fill(factor());
181 res.translation() = factor() * t.vector();
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
@ Affine
Definition Constants.h:460
@ Isometry
Definition Constants.h:457
Namespace containing all symbols from the Eigen library.
Definition Core:141
DiagonalMatrix< double, 3 > AlignedScaling3d
Definition Scaling.h:170
UniformScaling< float > Scaling(float s)
Definition Scaling.h:139
DiagonalMatrix< float, 3 > AlignedScaling3f
Definition Scaling.h:168
DiagonalMatrix< float, 2 > AlignedScaling2f
Definition Scaling.h:164
DiagonalMatrix< double, 2 > AlignedScaling2d
Definition Scaling.h:166
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233