mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-19 16:19:37 +08:00
Fix false negatives in geo_transformations unit tests
This commit is contained in:
parent
99501a2c4c
commit
f806c23012
@ -100,9 +100,15 @@ template<typename Scalar, int Mode, int Options> void transformations()
|
|||||||
Scalar a = internal::random<Scalar>(-Scalar(M_PI), Scalar(M_PI));
|
Scalar a = internal::random<Scalar>(-Scalar(M_PI), Scalar(M_PI));
|
||||||
Scalar s0 = internal::random<Scalar>(), s1 = internal::random<Scalar>();
|
Scalar s0 = internal::random<Scalar>(), s1 = internal::random<Scalar>();
|
||||||
|
|
||||||
|
while(v0.norm() < test_precision<Scalar>()) v0 = Vector3::Random();
|
||||||
|
while(v1.norm() < test_precision<Scalar>()) v1 = Vector3::Random();
|
||||||
|
|
||||||
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);
|
||||||
VERIFY_IS_APPROX(cos(a)*v0.squaredNorm(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0));
|
if(abs(cos(a)) > test_precision<Scalar>())
|
||||||
|
{
|
||||||
|
VERIFY_IS_APPROX(cos(a)*v0.squaredNorm(), v0.dot(AngleAxisx(a, v0.unitOrthogonal()) * v0));
|
||||||
|
}
|
||||||
m = AngleAxisx(a, v0.normalized()).toRotationMatrix().adjoint();
|
m = AngleAxisx(a, v0.normalized()).toRotationMatrix().adjoint();
|
||||||
VERIFY_IS_APPROX(Matrix3::Identity(), m * AngleAxisx(a, v0.normalized()));
|
VERIFY_IS_APPROX(Matrix3::Identity(), m * AngleAxisx(a, v0.normalized()));
|
||||||
VERIFY_IS_APPROX(Matrix3::Identity(), AngleAxisx(a, v0.normalized()) * m);
|
VERIFY_IS_APPROX(Matrix3::Identity(), AngleAxisx(a, v0.normalized()) * m);
|
||||||
@ -123,11 +129,18 @@ template<typename Scalar, int Mode, int Options> void transformations()
|
|||||||
// angle-axis conversion
|
// angle-axis conversion
|
||||||
AngleAxisx aa = AngleAxisx(q1);
|
AngleAxisx aa = AngleAxisx(q1);
|
||||||
VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1);
|
VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1);
|
||||||
VERIFY_IS_NOT_APPROX(q1 * v1, Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1);
|
|
||||||
|
if(abs(aa.angle()) > NumTraits<Scalar>::dummy_precision())
|
||||||
|
{
|
||||||
|
VERIFY( !(q1 * v1).isApprox(Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1) );
|
||||||
|
}
|
||||||
|
|
||||||
aa.fromRotationMatrix(aa.toRotationMatrix());
|
aa.fromRotationMatrix(aa.toRotationMatrix());
|
||||||
VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1);
|
VERIFY_IS_APPROX(q1 * v1, Quaternionx(aa) * v1);
|
||||||
VERIFY_IS_NOT_APPROX(q1 * v1, Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1);
|
if(abs(aa.angle()) > NumTraits<Scalar>::dummy_precision())
|
||||||
|
{
|
||||||
|
VERIFY( !(q1 * v1).isApprox(Quaternionx(AngleAxisx(aa.angle()*2,aa.axis())) * v1) );
|
||||||
|
}
|
||||||
|
|
||||||
// AngleAxis
|
// AngleAxis
|
||||||
VERIFY_IS_APPROX(AngleAxisx(a,v1.normalized()).toRotationMatrix(),
|
VERIFY_IS_APPROX(AngleAxisx(a,v1.normalized()).toRotationMatrix(),
|
||||||
@ -347,7 +360,9 @@ template<typename Scalar, int Mode, int Options> void transformations()
|
|||||||
// test transform inversion
|
// test transform inversion
|
||||||
t0.setIdentity();
|
t0.setIdentity();
|
||||||
t0.translate(v0);
|
t0.translate(v0);
|
||||||
t0.linear().setRandom();
|
do {
|
||||||
|
t0.linear().setRandom();
|
||||||
|
} while(t0.linear().jacobiSvd().singularValues()(2)<test_precision<Scalar>());
|
||||||
Matrix4 t044 = Matrix4::Zero();
|
Matrix4 t044 = Matrix4::Zero();
|
||||||
t044(3,3) = 1;
|
t044(3,3) = 1;
|
||||||
t044.block(0,0,t0.matrix().rows(),4) = t0.matrix();
|
t044.block(0,0,t0.matrix().rows(),4) = t0.matrix();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user