From 47ec0a700706791b06be60f74eed01bb096a2079 Mon Sep 17 00:00:00 2001 From: Justin Carpentier <justin.carpentier@inria.fr> Date: Fri, 13 Dec 2019 11:49:08 +0100 Subject: [PATCH] test/capsule: test if capsule and shpere provides same results --- test/capsule_capsule.cpp | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/capsule_capsule.cpp b/test/capsule_capsule.cpp index 7dda5376..09aa46de 100644 --- a/test/capsule_capsule.cpp +++ b/test/capsule_capsule.cpp @@ -45,6 +45,7 @@ #include <cmath> #include <iostream> #include <hpp/fcl/distance.h> +#include <hpp/fcl/collision.h> #include <hpp/fcl/math/transform.h> #include <hpp/fcl/collision.h> #include <hpp/fcl/collision_object.h> @@ -55,6 +56,49 @@ using namespace hpp::fcl; typedef boost::shared_ptr <CollisionGeometry> CollisionGeometryPtr_t; +BOOST_AUTO_TEST_CASE(collision_capsule_capsule_trivial) +{ + const double radius = 1.; + + CollisionGeometryPtr_t c1 (new Capsule (radius, 0.)); + CollisionGeometryPtr_t c2 (new Capsule (radius, 0.)); + + CollisionGeometryPtr_t s1 (new Sphere (radius)); + CollisionGeometryPtr_t s2 (new Sphere (radius)); + + int num_tests = 1e6; + + Transform3f tf1; + Transform3f tf2; + + for(int i = 0; i < num_tests; ++i) + { + Eigen::Vector3d p1 = Eigen::Vector3d::Random()*(2.*radius); + Eigen::Vector3d p2 = Eigen::Vector3d::Random()*(2.*radius); + + Eigen::Matrix3d rot1 = Eigen::Quaterniond::UnitRandom().toRotationMatrix(); + Eigen::Matrix3d rot2 = Eigen::Quaterniond::UnitRandom().toRotationMatrix(); + + tf1.setTranslation(p1); tf1.setRotation(rot1); + tf2.setTranslation(p2); tf2.setRotation(rot2); + + CollisionObject capsule_o1 (c1, tf1); + CollisionObject capsule_o2 (c2, tf2); + + CollisionObject sphere_o1 (s1, tf1); + CollisionObject sphere_o2 (s2, tf2); + + // Enable computation of nearest points + CollisionRequest collisionRequest; + CollisionResult capsule_collisionResult, sphere_collisionResult; + + size_t sphere_num_collisions = collide(&sphere_o1, &sphere_o2, collisionRequest, sphere_collisionResult); + size_t capsule_num_collisions = collide(&capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult); + + BOOST_CHECK(sphere_num_collisions == capsule_num_collisions); + } +} + BOOST_AUTO_TEST_CASE(distance_capsulecapsule_origin) { CollisionGeometryPtr_t s1 (new Capsule (5, 10)); -- GitLab