10 #ifndef EIGEN_SCALING_H 11 #define EIGEN_SCALING_H 32 template<
typename _Scalar>
37 typedef _Scalar Scalar;
48 explicit inline UniformScaling(
const Scalar& s) : m_factor(s) {}
50 inline const Scalar& factor()
const {
return m_factor; }
51 inline Scalar& factor() {
return m_factor; }
54 inline UniformScaling
operator* (
const UniformScaling& other)
const 55 {
return UniformScaling(m_factor * other.factor()); }
59 inline Transform<Scalar,Dim,Affine>
operator* (
const Translation<Scalar,Dim>& t)
const;
62 template<
int Dim,
int Mode,
int Options>
63 inline Transform<Scalar,Dim,(int(Mode)==int(Isometry)?Affine:Mode)>
operator* (
const Transform<Scalar,Dim, Mode, Options>& t)
const 65 Transform<Scalar,Dim,(int(Mode)==int(Isometry)?Affine:Mode)> res = t;
66 res.prescale(factor());
72 template<
typename Derived>
73 inline typename internal::plain_matrix_type<Derived>::type
operator* (
const MatrixBase<Derived>& other)
const 74 {
return other * m_factor; }
76 template<
typename Derived,
int Dim>
77 inline Matrix<Scalar,Dim,Dim>
operator*(
const RotationBase<Derived,Dim>& r)
const 78 {
return r.toRotationMatrix() * m_factor; }
81 inline UniformScaling
inverse()
const 82 {
return UniformScaling(Scalar(1)/m_factor); }
89 template<
typename NewScalarType>
90 inline UniformScaling<NewScalarType> cast()
const 91 {
return UniformScaling<NewScalarType>(NewScalarType(m_factor)); }
94 template<
typename OtherScalarType>
95 inline explicit UniformScaling(
const UniformScaling<OtherScalarType>& other)
96 { m_factor = Scalar(other.factor()); }
102 bool isApprox(
const UniformScaling& other,
const typename NumTraits<Scalar>::Real& prec = NumTraits<Scalar>::dummy_precision())
const 103 {
return internal::isApprox(m_factor, other.factor(), prec); }
115 template<
typename Derived,
typename Scalar>
116 EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Derived,Scalar,product)
117 operator*(const
MatrixBase<Derived>& matrix, const UniformScaling<Scalar>& s)
118 {
return matrix.derived() * s.factor(); }
121 inline UniformScaling<float>
Scaling(
float s) {
return UniformScaling<float>(s); }
123 inline UniformScaling<double>
Scaling(
double s) {
return UniformScaling<double>(s); }
125 template<
typename RealScalar>
126 inline UniformScaling<std::complex<RealScalar> >
Scaling(
const std::complex<RealScalar>& s)
127 {
return UniformScaling<std::complex<RealScalar> >(s); }
130 template<
typename Scalar>
134 template<
typename Scalar>
141 template<
typename Derived>
155 template<
typename Scalar>
162 res.
linear().diagonal().fill(factor());
164 res(Dim,Dim) = Scalar(1);
170 #endif // EIGEN_SCALING_H
DiagonalMatrix< float, 3 > AlignedScaling3f
Definition: Scaling.h:150
DiagonalMatrix< float, 2 > AlignedScaling2f
Definition: Scaling.h:146
Represents a diagonal matrix with its storage.
Definition: DiagonalMatrix.h:116
Namespace containing all symbols from the Eigen library.
Definition: Core:287
DiagonalMatrix< double, 3 > AlignedScaling3d
Definition: Scaling.h:152
UniformScaling< float > Scaling(float s)
Definition: Scaling.h:121
Represents a translation transformation.
Definition: ForwardDeclarations.h:271
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_inverse_op< typename Derived::Scalar >, const Derived > inverse(const Eigen::ArrayBase< Derived > &x)
const Product< MatrixDerived, PermutationDerived, AliasFreeProduct > operator*(const MatrixBase< MatrixDerived > &matrix, const PermutationBase< PermutationDerived > &permutation)
Definition: PermutationMatrix.h:543
const DiagonalWrapper< const Derived > asDiagonal() const
Definition: DiagonalMatrix.h:277
DiagonalMatrix< double, 2 > AlignedScaling2d
Definition: Scaling.h:148
Expression of a diagonal matrix.
Definition: DiagonalMatrix.h:245
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:48