Skip to content

Commit

Permalink
utils: fix rotation_params function and add test.
Browse files Browse the repository at this point in the history
maintainer: fix shape test and vec_rotate test.
  • Loading branch information
KaiSzuttor committed Mar 3, 2020
1 parent 6c353db commit 17fdd2b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 16 deletions.
3 changes: 2 additions & 1 deletion samples/visualization_constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
system,
background_color=[1, 1, 1],
drag_enabled=True,
quality_constraints=200,
rasterize_resolution=50.0,
rasterize_pointsize=5,
camera_position=[150, 25, 25],
Expand Down Expand Up @@ -104,7 +105,7 @@
elif args.shape == "HollowConicalFrustum":
system.constraints.add(shape=espressomd.shapes.HollowConicalFrustum(
r1=12, r2=8, length=15.0, thickness=3,
axis=[0.0, 0.0, 1.0], center=[25, 25, 25], direction=1),
axis=[0.0, 1.0, 1.0], center=[25, 25, 25], direction=1),
particle_type=0, penetrable=True)

else:
Expand Down
28 changes: 15 additions & 13 deletions src/shapes/unit_tests/HollowConicalFrustum_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ BOOST_AUTO_TEST_CASE(dist_function) {
constexpr double R1 = 2.0;
constexpr double R2 = 3.0;

constexpr double eps = 100 * std::numeric_limits<double>::epsilon();

{
Shapes::HollowConicalFrustum c;
c.set_r1(R1);
Expand All @@ -45,24 +47,24 @@ BOOST_AUTO_TEST_CASE(dist_function) {
double dist;

c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 2.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_CLOSE(dist, 2.0, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);

pos = {{R1, 0.0, L / 2.0}};
c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 0.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_SMALL(dist, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);

pos = {{3.0, 0.0, -L / 2.0}};
c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 0.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_SMALL(dist, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);

c.set_thickness(1.0);
c.set_r2(R1);
pos = {{R1 + 1.0, 0.0, L / 2.0}};
c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == .5, boost::test_tools::tolerance(1e-7));
BOOST_CHECK_CLOSE(dist, .5, eps);
}
{
Shapes::HollowConicalFrustum c;
Expand All @@ -76,17 +78,17 @@ BOOST_AUTO_TEST_CASE(dist_function) {
double dist;

c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 2.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_CLOSE(dist, 2.0, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);

pos = {{L / 2.0, R1, 0.0}};
c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 0.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_SMALL(dist, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);

pos = {{-L / 2.0, R2, 0.0}};
c.calculate_dist(pos, dist, vec);
BOOST_TEST(dist == 0.0, boost::test_tools::tolerance(1e-7));
BOOST_TEST(dist == vec.norm(), boost::test_tools::tolerance(1e-7));
BOOST_CHECK_SMALL(dist, eps);
BOOST_CHECK_CLOSE(dist, vec.norm(), eps);
}
}
2 changes: 1 addition & 1 deletion src/utils/include/utils/math/vec_rotate.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ inline Vector3d vec_rotate(const Vector3d &axis, double alpha,
inline std::tuple<double, Vector3d>
rotation_params(Vector3d const &vec, Vector3d const &target_vec) {
auto const theta =
std::acos(vec * target_vec) / (vec.norm() * target_vec.norm());
std::acos(vec * target_vec / (vec.norm() * target_vec.norm()));
auto const rotation_axis = Utils::vector_product(vec, target_vec).normalize();
return std::make_tuple(theta, rotation_axis);
}
Expand Down
15 changes: 14 additions & 1 deletion src/utils/tests/vec_rotate_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

#include "utils/math/vec_rotate.hpp"
#include <utils/constants.hpp>
#include <utils/math/vec_rotate.hpp>
using Utils::vec_rotate;

#include <cmath>
Expand All @@ -45,3 +46,15 @@ BOOST_AUTO_TEST_CASE(rotation) {

BOOST_CHECK(rel_diff < std::numeric_limits<double>::epsilon());
}

BOOST_AUTO_TEST_CASE(rotation_params) {
Utils::Vector3d v1 = {1.0, 0.0, 0.0};
Utils::Vector3d v2 = {1.0, 1.0, 0.0};

double angle;
Utils::Vector3d rotation_axis;
std::tie(angle, rotation_axis) = Utils::rotation_params(v1, v2);
BOOST_CHECK_CLOSE(angle, Utils::pi() / 4.0, 1e-7);
BOOST_CHECK_SMALL((rotation_axis * v1), 1e-7);
BOOST_CHECK_SMALL((rotation_axis * v2), 1e-7);
}

0 comments on commit 17fdd2b

Please sign in to comment.