mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-23 18:19:34 +08:00
add missing implementation of uniform scaling products
This commit is contained in:
parent
2f3d685e0c
commit
c7828ac45c
@ -72,8 +72,8 @@ public:
|
|||||||
inline Transform<Scalar,Dim> operator* (const Translation<Scalar,Dim>& t) const;
|
inline Transform<Scalar,Dim> operator* (const Translation<Scalar,Dim>& t) const;
|
||||||
|
|
||||||
/** Concatenates a uniform scaling and an affine transformation */
|
/** Concatenates a uniform scaling and an affine transformation */
|
||||||
template<int Dim>
|
template<int Dim, int Mode>
|
||||||
inline Transform<Scalar,Dim> operator* (const Transform<Scalar,Dim>& t) const;
|
inline Transform<Scalar,Dim,Mode> operator* (const Transform<Scalar,Dim, Mode>& t) const;
|
||||||
|
|
||||||
/** Concatenates a uniform scaling and a linear transformation matrix */
|
/** Concatenates a uniform scaling and a linear transformation matrix */
|
||||||
// TODO returns an expression
|
// TODO returns an expression
|
||||||
@ -156,4 +156,27 @@ typedef DiagonalMatrix<float, 3> AlignedScaling3f;
|
|||||||
typedef DiagonalMatrix<double,3> AlignedScaling3d;
|
typedef DiagonalMatrix<double,3> AlignedScaling3d;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
template<typename Scalar>
|
||||||
|
template<int Dim>
|
||||||
|
inline Transform<Scalar,Dim>
|
||||||
|
UniformScaling<Scalar>::operator* (const Translation<Scalar,Dim>& t) const
|
||||||
|
{
|
||||||
|
Transform<Scalar,Dim> res;
|
||||||
|
res.matrix().setZero();
|
||||||
|
res.linear().diagonal().fill(factor());
|
||||||
|
res.translation() = factor() * t.vector();
|
||||||
|
res(Dim,Dim) = Scalar(1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Scalar>
|
||||||
|
template<int Dim,int Mode>
|
||||||
|
inline Transform<Scalar,Dim,Mode>
|
||||||
|
UniformScaling<Scalar>::operator* (const Transform<Scalar,Dim, Mode>& t) const
|
||||||
|
{
|
||||||
|
Transform<Scalar,Dim> res = t;
|
||||||
|
res.prescale(factor());
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // EIGEN_SCALING_H
|
#endif // EIGEN_SCALING_H
|
||||||
|
@ -59,6 +59,7 @@ template<typename Scalar, int Mode> void transformations(void)
|
|||||||
Matrix3 matrot1, m;
|
Matrix3 matrot1, m;
|
||||||
|
|
||||||
Scalar a = ei_random<Scalar>(-Scalar(M_PI), Scalar(M_PI));
|
Scalar a = ei_random<Scalar>(-Scalar(M_PI), Scalar(M_PI));
|
||||||
|
Scalar s0 = ei_random<Scalar>();
|
||||||
|
|
||||||
VERIFY_IS_APPROX(v0, AngleAxisx(a, v0.normalized()) * v0);
|
VERIFY_IS_APPROX(v0, AngleAxisx(a, v0.normalized()) * v0);
|
||||||
VERIFY_IS_APPROX(-v0, AngleAxisx(Scalar(M_PI), v0.unitOrthogonal()) * v0);
|
VERIFY_IS_APPROX(-v0, AngleAxisx(Scalar(M_PI), v0.unitOrthogonal()) * v0);
|
||||||
@ -234,6 +235,16 @@ template<typename Scalar, int Mode> void transformations(void)
|
|||||||
t1 = Matrix3(q1) * (AlignedScaling3(v0) * Translation3(v0));
|
t1 = Matrix3(q1) * (AlignedScaling3(v0) * Translation3(v0));
|
||||||
VERIFY_IS_APPROX(t0.matrix(), t1.matrix());
|
VERIFY_IS_APPROX(t0.matrix(), t1.matrix());
|
||||||
|
|
||||||
|
|
||||||
|
t0.setIdentity();
|
||||||
|
t0.scale(s0).translate(v0);
|
||||||
|
t1 = Scaling(s0) * Translation3(v0);
|
||||||
|
VERIFY_IS_APPROX(t0.matrix(), t1.matrix());
|
||||||
|
t0.prescale(s0);
|
||||||
|
t1 = Scaling(s0) * t1;
|
||||||
|
VERIFY_IS_APPROX(t0.matrix(), t1.matrix());
|
||||||
|
|
||||||
|
|
||||||
t0.setIdentity();
|
t0.setIdentity();
|
||||||
t0.prerotate(q1).prescale(v0).pretranslate(v0);
|
t0.prerotate(q1).prescale(v0).pretranslate(v0);
|
||||||
// translation * aligned scaling and transformation * mat
|
// translation * aligned scaling and transformation * mat
|
||||||
|
Loading…
x
Reference in New Issue
Block a user