5 #define BOOST_TEST_MODULE matrix_homogeneous 7 #include <boost/math/constants/constants.hpp> 8 #include <boost/test/floating_point_comparison.hpp> 9 #include <boost/test/output_test_stream.hpp> 10 #include <boost/test/unit_test.hpp> 13 using boost::math::constants::pi;
14 using boost::test_tools::output_test_stream;
18 #define MATRIX_BOOST_REQUIRE_CLOSE(N, M, LEFT, RIGHT, TOLERANCE) \ 19 for (unsigned i = 0; i < N; ++i) \ 20 for (unsigned j = 0; j < M; ++j) \ 21 BOOST_REQUIRE_CLOSE(LEFT(i, j), RIGHT(i, j), TOLERANCE) 23 #define MATRIX_4x4_BOOST_REQUIRE_CLOSE(LEFT, RIGHT, TOLERANCE) \ 24 MATRIX_BOOST_REQUIRE_CLOSE(4, 4, LEFT, RIGHT, TOLERANCE) 26 #define MATRIX_IDENTITY_4x4_REQUIRE_CLOSE(M, TOLERANCE) \ 27 for (unsigned i = 0; i < 4; ++i) \ 28 for (unsigned j = 0; j < 4; ++j) \ 30 BOOST_REQUIRE_CLOSE(M(i, j), 1., TOLERANCE); \ 32 BOOST_CHECK_SMALL(M(i, j), .01 * TOLERANCE) 34 #define MATRIX_HOMO_INIT(M, tx, ty, tz, roll, pitch, yaw) \ 35 M(0, 0) = cos(pitch) * cos(yaw); \ 36 M(0, 1) = sin(roll) * sin(pitch) * cos(yaw) - cos(roll) * sin(yaw); \ 37 M(0, 2) = cos(roll) * sin(pitch) * cos(yaw) + sin(roll) * sin(yaw); \ 39 M(1, 0) = cos(pitch) * sin(yaw); \ 40 M(1, 1) = sin(roll) * sin(pitch) * sin(yaw) + cos(roll) * cos(yaw); \ 41 M(1, 2) = cos(roll) * sin(pitch) * sin(yaw) - sin(roll) * cos(yaw); \ 43 M(2, 0) = -sin(pitch); \ 44 M(2, 1) = sin(roll) * cos(pitch); \ 45 M(2, 2) = cos(roll) * cos(pitch); \ 53 for (
unsigned int i = 0;
i < 1000;
i++) {
55 double roll, pitch, yaw;
57 tx = (10. *
rand()) / RAND_MAX - 5.;
58 ty = (10. *
rand()) / RAND_MAX - 5.;
59 tz = (10. *
rand()) / RAND_MAX - 5.;
60 roll = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
61 pitch = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
62 yaw = (2 * pi<double>() *
rand()) / RAND_MAX - pi<double>();
66 tx = (10. *
rand()) / RAND_MAX;
67 ty = (10. *
rand()) / RAND_MAX - 5.;
68 tz = (10. *
rand()) / RAND_MAX - 5.;
69 roll = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
70 pitch = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
71 yaw = (2 * pi<double>() *
rand()) / RAND_MAX - pi<double>();
83 for (
unsigned int i = 0;
i < 1000;
i++) {
85 double roll, pitch, yaw;
87 tx = (10. *
rand()) / RAND_MAX - 5.;
88 ty = (10. *
rand()) / RAND_MAX - 5.;
89 tz = (10. *
rand()) / RAND_MAX - 5.;
90 roll = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
91 pitch = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
92 yaw = (2 * pi<double>() *
rand()) / RAND_MAX - pi<double>();
95 tx = (10. *
rand()) / RAND_MAX;
96 ty = (10. *
rand()) / RAND_MAX - 5.;
97 tz = (10. *
rand()) / RAND_MAX - 5.;
98 roll = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
99 pitch = (pi<double>() *
rand()) / RAND_MAX - .5 * pi<double>();
100 yaw = (2 * pi<double>() *
rand()) / RAND_MAX - pi<double>();
104 invH1 = H1.inverse();
105 invH2 = H2.inverse();
106 invH3 = H3.inverse();
Eigen::Transform< double, 3, Eigen::Affine > SOT_CORE_EXPORT MatrixHomogeneous
#define MATRIX_IDENTITY_4x4_REQUIRE_CLOSE(M, TOLERANCE)
BOOST_AUTO_TEST_CASE(product)
#define MATRIX_4x4_BOOST_REQUIRE_CLOSE(LEFT, RIGHT, TOLERANCE)
#define MATRIX_HOMO_INIT(M, tx, ty, tz, roll, pitch, yaw)