diff --git a/test/test_fcl_box_box_distance.cpp b/test/test_fcl_box_box_distance.cpp index a3f32d9c098aaadb7a892788c69f5922e03d167e..9a05b58bdc7e473b5ee0054562456b874e53c40a 100644 --- a/test/test_fcl_box_box_distance.cpp +++ b/test/test_fcl_box_box_distance.cpp @@ -46,13 +46,20 @@ #include <fcl/collision_object.h> #include <fcl/shape/geometric_shapes.h> -using namespace fcl; -typedef boost::shared_ptr <CollisionGeometry> CollisionGeometryPtr_t; +typedef boost::shared_ptr <fcl::CollisionGeometry> CollisionGeometryPtr_t; + +using fcl::Transform3f; +using fcl::Quaternion3f; +using fcl::Vec3f; +using fcl::CollisionObject; +using fcl::DistanceResult; +using fcl::DistanceRequest; +using fcl::GST_INDEP; BOOST_AUTO_TEST_CASE(distance_box_box_1) { - CollisionGeometryPtr_t s1 (new Box (6, 10, 2)); - CollisionGeometryPtr_t s2 (new Box (2, 2, 2)); + CollisionGeometryPtr_t s1 (new fcl::Box (6, 10, 2)); + CollisionGeometryPtr_t s2 (new fcl::Box (2, 2, 2)); Transform3f tf1; Transform3f tf2 (Vec3f(25, 20, 5)); @@ -64,11 +71,13 @@ BOOST_AUTO_TEST_CASE(distance_box_box_1) DistanceRequest distanceRequest (true, 0, 0, GST_INDEP); DistanceResult distanceResult; - distance (&o1, &o2, distanceRequest, distanceResult); + fcl::distance (&o1, &o2, distanceRequest, distanceResult); - std::cerr << "Applied translation on two boxes"; - std::cerr << " T1 = " << tf1.getTranslation() - << ", T2 = " << tf2.getTranslation() << std::endl; + std::cerr << "Applied transformations on two boxes" << std::endl; + std::cerr << " T1 = " << tf1.getTranslation() << std::endl + << " R1 = " << tf1.getRotation () << std::endl + << " T2 = " << tf2.getTranslation() << std::endl + << " R2 = " << tf2.getRotation () << std::endl; std::cerr << "Closest points: p1 = " << distanceResult.nearest_points [0] << ", p2 = " << distanceResult.nearest_points [1] << ", distance = " << distanceResult.min_distance << std::endl; @@ -91,8 +100,8 @@ BOOST_AUTO_TEST_CASE(distance_box_box_1) BOOST_AUTO_TEST_CASE(distance_box_box_2) { - CollisionGeometryPtr_t s1 (new Box (6, 10, 2)); - CollisionGeometryPtr_t s2 (new Box (2, 2, 2)); + CollisionGeometryPtr_t s1 (new fcl::Box (6, 10, 2)); + CollisionGeometryPtr_t s2 (new fcl::Box (2, 2, 2)); static double pi = M_PI; Transform3f tf1; Transform3f tf2 (Quaternion3f (cos (pi/8), sin(pi/8)/sqrt(3), @@ -106,11 +115,13 @@ BOOST_AUTO_TEST_CASE(distance_box_box_2) DistanceRequest distanceRequest (true, 0, 0, GST_INDEP); DistanceResult distanceResult; - distance (&o1, &o2, distanceRequest, distanceResult); + fcl::distance (&o1, &o2, distanceRequest, distanceResult); - std::cerr << "Applied translation on two boxes"; - std::cerr << " T1 = " << tf1.getTranslation() - << ", T2 = " << tf2.getTranslation() << std::endl; + std::cerr << "Applied transformations on two boxes" << std::endl; + std::cerr << " T1 = " << tf1.getTranslation() << std::endl + << " R1 = " << tf1.getRotation () << std::endl + << " T2 = " << tf2.getTranslation() << std::endl + << " R2 = " << tf2.getRotation () << std::endl; std::cerr << "Closest points: p1 = " << distanceResult.nearest_points [0] << ", p2 = " << distanceResult.nearest_points [1] << ", distance = " << distanceResult.min_distance << std::endl; @@ -130,8 +141,8 @@ BOOST_AUTO_TEST_CASE(distance_box_box_2) BOOST_AUTO_TEST_CASE(distance_box_box_3) { - CollisionGeometryPtr_t s1 (new Box (1, 1, 1)); - CollisionGeometryPtr_t s2 (new Box (1, 1, 1)); + CollisionGeometryPtr_t s1 (new fcl::Box (1, 1, 1)); + CollisionGeometryPtr_t s2 (new fcl::Box (1, 1, 1)); static double pi = M_PI; Transform3f tf1 (Quaternion3f (cos (pi/8), 0, 0, sin (pi/8)), Vec3f (-2, 1, .5)); @@ -145,11 +156,13 @@ BOOST_AUTO_TEST_CASE(distance_box_box_3) DistanceRequest distanceRequest (true, 0, 0, GST_INDEP); DistanceResult distanceResult; - distance (&o1, &o2, distanceRequest, distanceResult); + fcl::distance (&o1, &o2, distanceRequest, distanceResult); - std::cerr << "Applied translation on two boxes"; - std::cerr << " T1 = " << tf1.getTranslation() - << ", T2 = " << tf2.getTranslation() << std::endl; + std::cerr << "Applied transformations on two boxes" << std::endl; + std::cerr << " T1 = " << tf1.getTranslation() << std::endl + << " R1 = " << tf1.getRotation () << std::endl + << " T2 = " << tf2.getTranslation() << std::endl + << " R2 = " << tf2.getRotation () << std::endl; std::cerr << "Closest points: p1 = " << distanceResult.nearest_points [0] << ", p2 = " << distanceResult.nearest_points [1] << ", distance = " << distanceResult.min_distance << std::endl; @@ -159,10 +172,45 @@ BOOST_AUTO_TEST_CASE(distance_box_box_3) double distance = 4 - sqrt (2); BOOST_CHECK_CLOSE(distanceResult.min_distance, distance, 1e-4); - BOOST_CHECK_CLOSE (p1 [0], sqrt (2)/2 - 2, 1e-4); - BOOST_CHECK_CLOSE (p1 [1], 1, 1e-4); - BOOST_CHECK_CLOSE (p1 [2], .5, 1e-6); - BOOST_CHECK_CLOSE (p2 [0], 2 - sqrt (2)/2, 1e-4); - BOOST_CHECK_CLOSE (p2 [1], 1, 1e-4); - BOOST_CHECK_CLOSE (p2 [2], .5, 1e-4); + const Vec3f p1Ref (sqrt(2)/2 - 2, 1, .5); + const Vec3f p2Ref (2 - sqrt(2)/2, 1, .5); + BOOST_CHECK_CLOSE (p1 [0], p1Ref [0], 1e-4); + BOOST_CHECK_CLOSE (p1 [1], p1Ref [1], 1e-4); + BOOST_CHECK_CLOSE (p1 [2], p1Ref [2], 1e-4); + BOOST_CHECK_CLOSE (p2 [0], p2Ref [0], 1e-4); + BOOST_CHECK_CLOSE (p2 [1], p2Ref [1], 1e-4); + BOOST_CHECK_CLOSE (p2 [2], p2Ref [2], 1e-4); + + // Apply the same global transform to both objects and recompute + Transform3f tf3 (Quaternion3f (0.435952844074,-0.718287018243, + 0.310622451066, 0.444435113443), + Vec3f (4, 5, 6)); + tf1 = tf3*tf1; + tf2 = tf3*tf2; + o1 = CollisionObject (s1, tf1); + o2 = CollisionObject (s2, tf2); + + distanceResult.clear (); + fcl::distance (&o1, &o2, distanceRequest, distanceResult); + + std::cerr << "Applied transformations on two boxes" << std::endl; + std::cerr << " T1 = " << tf1.getTranslation() << std::endl + << " R1 = " << tf1.getRotation () << std::endl + << " T2 = " << tf2.getTranslation() << std::endl + << " R2 = " << tf2.getRotation () << std::endl; + std::cerr << "Closest points: p1 = " << distanceResult.nearest_points [0] + << ", p2 = " << distanceResult.nearest_points [1] + << ", distance = " << distanceResult.min_distance << std::endl; + + BOOST_CHECK_CLOSE(distanceResult.min_distance, distance, 1e-4); + + const Vec3f p1Moved = tf3.transform (p1Ref); + const Vec3f p2Moved = tf3.transform (p2Ref); + BOOST_CHECK_CLOSE (p1 [0], p1Moved [0], 1e-4); + BOOST_CHECK_CLOSE (p1 [1], p1Moved [1], 1e-4); + BOOST_CHECK_CLOSE (p1 [2], p1Moved [2], 1e-4); + BOOST_CHECK_CLOSE (p2 [0], p2Moved [0], 1e-4); + BOOST_CHECK_CLOSE (p2 [1], p2Moved [1], 1e-4); + BOOST_CHECK_CLOSE (p2 [2], p2Moved [2], 1e-4); + }