Directory: | ./ |
---|---|
File: | test/contact_patch.cpp |
Date: | 2025-04-01 09:23:31 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 649 | 675 | 96.1% |
Branches: | 1902 | 3794 | 50.1% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Software License Agreement (BSD License) | ||
3 | * | ||
4 | * Copyright (c) 2024, INRIA | ||
5 | * All rights reserved. | ||
6 | * | ||
7 | * Redistribution and use in source and binary forms, with or without | ||
8 | * modification, are permitted provided that the following conditions | ||
9 | * are met: | ||
10 | * | ||
11 | * * Redistributions of source code must retain the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer. | ||
13 | * * Redistributions in binary form must reproduce the above | ||
14 | * copyright notice, this list of conditions and the following | ||
15 | * disclaimer in the documentation and/or other materials provided | ||
16 | * with the distribution. | ||
17 | * * Neither the name of INRIA nor the names of its | ||
18 | * contributors may be used to endorse or promote products derived | ||
19 | * from this software without specific prior written permission. | ||
20 | * | ||
21 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
22 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
23 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
24 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
25 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
26 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
27 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
28 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
29 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
31 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
32 | * POSSIBILITY OF SUCH DAMAGE. | ||
33 | */ | ||
34 | |||
35 | /** \author Louis Montaut */ | ||
36 | |||
37 | #define BOOST_TEST_MODULE COAL_CONTACT_PATCH | ||
38 | #include <boost/test/included/unit_test.hpp> | ||
39 | |||
40 | #include "coal/contact_patch.h" | ||
41 | |||
42 | #include "utility.h" | ||
43 | |||
44 | using namespace coal; | ||
45 | |||
46 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(box_box_no_collision) { |
47 | 2 | const Scalar halfside = Scalar(0.5); | |
48 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box1(2 * halfside, 2 * halfside, 2 * halfside); |
49 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box2(2 * halfside, 2 * halfside, 2 * halfside); |
50 | |||
51 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
52 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
53 | // set translation to separate the shapes | ||
54 | 2 | const Scalar offset = Scalar(0.001); | |
55 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, 2 * halfside + offset)); |
56 | |||
57 | 2 | const size_t num_max_contact = 1; | |
58 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
59 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
60 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
61 | |||
62 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&box1, tf1, &box2, tf2, col_req, col_res); |
63 | |||
64 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!col_res.isCollision()); |
65 | |||
66 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
67 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
68 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box1, tf1, &box2, tf2, col_res, patch_req, |
69 | patch_res); | ||
70 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 0); |
71 | 2 | } | |
72 | |||
73 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(box_sphere) { |
74 | 2 | const Scalar halfside = Scalar(0.5); | |
75 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box(2 * halfside, 2 * halfside, 2 * halfside); |
76 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Sphere sphere(halfside); |
77 | |||
78 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
79 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
80 | // set translation to have a collision | ||
81 | 2 | const Scalar offset = Scalar(0.001); | |
82 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, 2 * halfside - offset)); |
83 | |||
84 | 2 | const size_t num_max_contact = 1; | |
85 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
86 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
87 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
88 | |||
89 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&box, tf1, &sphere, tf2, col_req, col_res); |
90 | |||
91 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
92 | |||
93 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
95 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box, tf1, &sphere, tf2, col_res, patch_req, |
96 | patch_res); | ||
97 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
98 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
99 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
100 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
101 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(contact_patch.size() == 1); |
102 | 2 | const Scalar tol = Scalar(1e-8); | |
103 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getPoint(0), contact.pos, tol); |
104 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.tf.translation(), contact.pos, tol); |
105 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getNormal(), contact.normal, tol); |
106 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(std::abs(contact_patch.penetration_depth - |
107 | contact.penetration_depth) < tol); | ||
108 | } | ||
109 | 2 | } | |
110 | |||
111 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(box_box) { |
112 | 2 | const Scalar halfside = 0.5; | |
113 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box1(2 * halfside, 2 * halfside, 2 * halfside); |
114 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box2(2 * halfside, 2 * halfside, 2 * halfside); |
115 | |||
116 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
117 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
118 | // set translation to have a collision | ||
119 | 2 | const Scalar offset = Scalar(0.001); | |
120 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, 2 * halfside - offset)); |
121 | |||
122 | 2 | const size_t num_max_contact = 1; | |
123 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
124 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
125 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
126 | |||
127 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&box1, tf1, &box2, tf2, col_req, col_res); |
128 | |||
129 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
130 | |||
131 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
132 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res1(patch_req); |
133 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res2(patch_req); |
134 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box1, tf1, &box2, tf2, col_res, patch_req, |
135 | patch_res1); | ||
136 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box1, tf1, &box2, tf2, col_res, patch_req, |
137 | patch_res2); | ||
138 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.numContactPatches() == 1); |
139 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.numContactPatches() == 1); |
140 | |||
141 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | if (patch_res1.numContactPatches() > 0 && |
142 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | patch_res2.numContactPatches() > 0 && col_res.isCollision()) { |
143 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
144 | 2 | const Scalar tol = Scalar(1e-6); | |
145 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, Vec3s(0, 0, 1), tol); |
146 | |||
147 | 2 | const size_t expected_size = 4; | |
148 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
149 | 2 | expected.tf.rotation() = | |
150 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
151 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
152 | 2 | expected.penetration_depth = contact.penetration_depth; | |
153 | const std::array<Vec3s, 4> corners = { | ||
154 | Vec3s(halfside, halfside, halfside), | ||
155 | ✗ | Vec3s(halfside, -halfside, halfside), | |
156 | ✗ | Vec3s(-halfside, -halfside, halfside), | |
157 | ✗ | Vec3s(-halfside, halfside, halfside), | |
158 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | }; |
159 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
10 | for (size_t i = 0; i < expected_size; ++i) { |
160 |
3/6✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
|
8 | expected.addPoint(corners[i] + |
161 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
16 | (contact.penetration_depth * contact.normal) / 2); |
162 | } | ||
163 | |||
164 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.getContactPatch(0).isSame(expected, tol)); |
165 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.getContactPatch(0).isSame(expected, tol)); |
166 | 2 | } | |
167 | 2 | } | |
168 | |||
169 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(halfspace_box) { |
170 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Halfspace hspace(0, 0, 1, 0); |
171 | 2 | const Scalar halfside = Scalar(0.5); | |
172 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Box box(2 * halfside, 2 * halfside, 2 * halfside); |
173 | |||
174 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
175 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
176 | // set translation to have a collision | ||
177 | 2 | const Scalar offset = Scalar(0.001); | |
178 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, halfside - offset)); |
179 | |||
180 | 2 | const size_t num_max_contact = 1; | |
181 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
182 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
183 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
184 | |||
185 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &box, tf2, col_req, col_res); |
186 | |||
187 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
188 | |||
189 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
190 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res1(patch_req); |
191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res2(patch_req); |
192 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &box, tf2, col_res, patch_req, |
193 | patch_res1); | ||
194 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &box, tf2, col_res, patch_req, |
195 | patch_res2); | ||
196 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.numContactPatches() == 1); |
197 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.numContactPatches() == 1); |
198 | |||
199 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | if (patch_res1.numContactPatches() > 0 && |
200 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | patch_res2.numContactPatches() > 0 && col_res.isCollision()) { |
201 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
202 | 2 | const Scalar tol = Scalar(1e-6); | |
203 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
204 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(hspace.n, Vec3s(0, 0, 1), tol); |
205 | |||
206 | 2 | const size_t expected_size = 4; | |
207 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
208 | 2 | expected.tf.rotation() = | |
209 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
210 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
211 | 2 | expected.penetration_depth = contact.penetration_depth; | |
212 | const std::array<Vec3s, 4> corners = { | ||
213 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.transform(Vec3s(halfside, halfside, -halfside)), |
214 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.transform(Vec3s(halfside, -halfside, -halfside)), |
215 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.transform(Vec3s(-halfside, -halfside, -halfside)), |
216 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | tf2.transform(Vec3s(-halfside, halfside, -halfside)), |
217 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
8 | }; |
218 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
10 | for (size_t i = 0; i < expected_size; ++i) { |
219 |
3/6✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
|
8 | expected.addPoint(corners[i] - |
220 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
16 | (contact.penetration_depth * contact.normal) / 2); |
221 | } | ||
222 | |||
223 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.getContactPatch(0).isSame(expected, tol)); |
224 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.getContactPatch(0).isSame(expected, tol)); |
225 | 2 | } | |
226 | 2 | } | |
227 | |||
228 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(halfspace_capsule) { |
229 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Halfspace hspace(0, 0, 1, 0); |
230 | 2 | const Scalar radius = Scalar(0.25); | |
231 | 2 | const Scalar height = 1.; | |
232 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Capsule capsule(radius, height); |
233 | |||
234 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
235 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
236 | // set translation to have a collision | ||
237 | 2 | const Scalar offset = Scalar(0.001); | |
238 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, height / 2 - offset)); |
239 | |||
240 | 2 | const size_t num_max_contact = 1; | |
241 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
242 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
243 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
244 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &capsule, tf2, col_req, col_res); |
245 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
246 | |||
247 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
248 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_req.getNumSamplesCurvedShapes() == |
249 | ContactPatch::default_preallocated_size); | ||
250 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
251 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &capsule, tf2, col_res, patch_req, |
252 | patch_res); | ||
253 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
254 | |||
255 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
256 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
257 | 2 | const Scalar tol = Scalar(1e-6); | |
258 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
259 | |||
260 | 2 | const size_t expected_size = 1; | |
261 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
262 | 2 | expected.tf.rotation() = | |
263 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
264 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
265 | 2 | expected.penetration_depth = contact.penetration_depth; | |
266 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s capsule_end(0, 0, -capsule.halfLength); |
267 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(capsule_end)); |
268 | |||
269 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
270 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
271 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
272 | 2 | } | |
273 | |||
274 | // Rotate capsule 180 degrees around y-axis | ||
275 | // Should only have one contact. | ||
276 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << -1, 0, 0; |
277 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
278 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << 0, 0, -1; |
279 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
280 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &capsule, tf2, col_req, col_res); |
281 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
282 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
283 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &capsule, tf2, col_res, patch_req, |
284 | patch_res); | ||
285 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
286 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
287 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
288 | 2 | const Scalar tol = Scalar(1e-6); | |
289 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
290 | |||
291 | 2 | const size_t expected_size = 1; | |
292 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
293 | 2 | expected.tf.rotation() = | |
294 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
295 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
296 | 2 | expected.penetration_depth = contact.penetration_depth; | |
297 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s capsule_end(0, 0, capsule.halfLength); |
298 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(capsule_end)); |
299 | |||
300 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
301 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
302 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
303 | 2 | } | |
304 | |||
305 | // Rotate cone 90 degrees around y-axis | ||
306 | // Should only have two contacts. | ||
307 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << 0, 0, 1; |
308 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
309 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << -1, 0, 0; |
310 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | tf2.translation() << 0, 0, capsule.radius - offset; |
311 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
312 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &capsule, tf2, col_req, col_res); |
313 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
314 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
315 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &capsule, tf2, col_res, patch_req, |
316 | patch_res); | ||
317 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
318 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
319 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
320 | 2 | const Scalar tol = Scalar(1e-6); | |
321 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
322 | |||
323 | 2 | const size_t expected_size = 2; | |
324 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
325 | 2 | expected.tf.rotation() = | |
326 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
327 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
328 | 2 | expected.penetration_depth = contact.penetration_depth; | |
329 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s p1(-capsule.radius, 0, capsule.halfLength); |
330 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s p2(-capsule.radius, 0, -capsule.halfLength); |
331 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(p1)); |
332 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(p2)); |
333 | |||
334 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
335 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
336 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
337 | 2 | } | |
338 | 2 | } | |
339 | |||
340 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(halfspace_cone) { |
341 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Halfspace hspace(0, 0, 1, 0); |
342 | 2 | const Scalar radius = 0.25; | |
343 | 2 | const Scalar height = 1.; | |
344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Cone cone(radius, height); |
345 | |||
346 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
348 | // set translation to have a collision | ||
349 | 2 | const Scalar offset = Scalar(0.001); | |
350 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, height / 2 - offset)); |
351 | |||
352 | 2 | const size_t num_max_contact = 1; | |
353 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
354 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
355 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
356 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cone, tf2, col_req, col_res); |
357 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
358 | |||
359 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
360 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_req.getNumSamplesCurvedShapes() == |
361 | ContactPatch::default_preallocated_size); | ||
362 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
363 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cone, tf2, col_res, patch_req, |
364 | patch_res); | ||
365 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
366 | |||
367 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
368 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
369 | 2 | const Scalar tol = Scalar(1e-6); | |
370 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
371 | |||
372 | 2 | const size_t expected_size = ContactPatch::default_preallocated_size; | |
373 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
374 | 2 | expected.tf.rotation() = | |
375 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
376 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
377 | 2 | expected.penetration_depth = contact.penetration_depth; | |
378 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::array<Vec3s, ContactPatch::default_preallocated_size> points; |
379 | 2 | const Scalar angle_increment = 2.0 * (Scalar)(EIGEN_PI) / ((Scalar)(6)); | |
380 |
2/2✓ Branch 0 taken 12 times.
✓ Branch 1 taken 1 times.
|
26 | for (size_t i = 0; i < ContactPatch::default_preallocated_size; ++i) { |
381 | 24 | const Scalar theta = (Scalar)(i)*angle_increment; | |
382 | ✗ | Vec3s point_on_cone_base(std::cos(theta) * cone.radius, | |
383 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | std::sin(theta) * cone.radius, -cone.halfLength); |
384 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
24 | expected.addPoint(tf2.transform(point_on_cone_base)); |
385 | } | ||
386 | |||
387 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
388 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
389 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
390 | 2 | } | |
391 | |||
392 | // Rotate cone 180 degrees around y-axis | ||
393 | // Should only have one contact, due to cone-tip/halfspace collision. | ||
394 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << -1, 0, 0; |
395 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
396 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << 0, 0, -1; |
397 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
398 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cone, tf2, col_req, col_res); |
399 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
400 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
401 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cone, tf2, col_res, patch_req, |
402 | patch_res); | ||
403 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
404 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
405 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
406 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
407 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(contact_patch.size() == 1); |
408 | 2 | const Scalar tol = Scalar(1e-8); | |
409 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getPoint(0), contact.pos, tol); |
410 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.tf.translation(), contact.pos, tol); |
411 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getNormal(), contact.normal, tol); |
412 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(std::abs(contact_patch.penetration_depth - |
413 | contact.penetration_depth) < tol); | ||
414 | |||
415 | 2 | const size_t expected_size = 1; | |
416 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
417 | 2 | expected.tf.rotation() = | |
418 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
419 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
420 | 2 | expected.penetration_depth = contact.penetration_depth; | |
421 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s cone_tip(0, 0, cone.halfLength); |
422 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(cone_tip)); |
423 | |||
424 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(contact_patch.isSame(expected, tol)); |
425 | 2 | } | |
426 | |||
427 | // Rotate cone 90 degrees around y-axis | ||
428 | // Should only have one contact, on cone circle basis. | ||
429 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << 0, 0, 1; |
430 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
431 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << -1, 0, 0; |
432 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | tf2.translation() << 0, 0, cone.radius - offset; |
433 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
434 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cone, tf2, col_req, col_res); |
435 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
436 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
437 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cone, tf2, col_res, patch_req, |
438 | patch_res); | ||
439 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
440 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
441 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
442 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
443 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(contact_patch.size() == 1); |
444 | 2 | const Scalar tol = Scalar(1e-8); | |
445 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getPoint(0), contact.pos, tol); |
446 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.tf.translation(), contact.pos, tol); |
447 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact_patch.getNormal(), contact.normal, tol); |
448 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(std::abs(contact_patch.penetration_depth - |
449 | contact.penetration_depth) < tol); | ||
450 | |||
451 | 2 | const size_t expected_size = 1; | |
452 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
453 | 2 | expected.tf.rotation() = | |
454 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
455 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
456 | 2 | expected.penetration_depth = contact.penetration_depth; | |
457 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s point_on_circle_basis(-cone.radius, 0, -cone.halfLength); |
458 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | expected.addPoint(tf2.transform(point_on_circle_basis)); |
459 | |||
460 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(contact_patch.isSame(expected, tol)); |
461 | 2 | } | |
462 | 2 | } | |
463 | |||
464 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(halfspace_cylinder) { |
465 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Halfspace hspace(0, 0, 1, 0); |
466 | 2 | const Scalar radius = Scalar(0.25); | |
467 | 2 | const Scalar height = 1; | |
468 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Cylinder cylinder(radius, height); |
469 | |||
470 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
471 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
472 | // set translation to have a collision | ||
473 | 2 | const Scalar offset = Scalar(0.001); | |
474 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, height / 2 - offset)); |
475 | |||
476 | 2 | const size_t num_max_contact = 1; | |
477 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
478 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
479 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
480 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cylinder, tf2, col_req, col_res); |
481 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
482 | |||
483 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (col_res.isCollision()) { |
484 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
485 | 2 | const size_t expected_size = ContactPatch::default_preallocated_size; | |
486 | 2 | const Scalar tol = Scalar(1e-6); | |
487 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
488 | 2 | expected.tf.rotation() = | |
489 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
490 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
491 | 2 | expected.penetration_depth = contact.penetration_depth; | |
492 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::array<Vec3s, ContactPatch::default_preallocated_size> points; |
493 | 2 | const Scalar angle_increment = 2.0 * (Scalar)(EIGEN_PI) / ((Scalar)(6)); | |
494 |
2/2✓ Branch 0 taken 12 times.
✓ Branch 1 taken 1 times.
|
26 | for (size_t i = 0; i < ContactPatch::default_preallocated_size; ++i) { |
495 | 24 | const Scalar theta = (Scalar)(i)*angle_increment; | |
496 | ✗ | Vec3s point_on_cone_base(std::cos(theta) * cylinder.radius, | |
497 | ✗ | std::sin(theta) * cylinder.radius, | |
498 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | -cylinder.halfLength); |
499 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
24 | expected.addPoint(tf2.transform(point_on_cone_base)); |
500 | } | ||
501 | |||
502 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
503 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_req.getNumSamplesCurvedShapes() == |
504 | ContactPatch::default_preallocated_size); | ||
505 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
506 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cylinder, tf2, col_res, patch_req, |
507 | patch_res); | ||
508 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
509 | |||
510 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
511 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
512 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
513 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
514 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
515 | } | ||
516 | |||
517 | // Rotate cylinder 180 degrees around y-axis. | ||
518 | // Should only have the same contact-patch, due to cylinder symmetry. | ||
519 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << -1, 0, 0; |
520 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
521 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << 0, 0, -1; |
522 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
523 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cylinder, tf2, col_req, col_res); |
524 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
525 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
526 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cylinder, tf2, col_res, patch_req, |
527 | patch_res); | ||
528 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
529 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (patch_res.numContactPatches() > 0 && col_res.isCollision()) { |
530 |
16/32✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, hspace.n, tol); |
531 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
532 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.tf == contact_patch.tf); |
533 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
534 | } | ||
535 | 2 | } | |
536 | |||
537 | // Rotate cylinder 90 degrees around y-axis. | ||
538 | // Should have 2 contact points. | ||
539 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(0) << 0, 0, 1; |
540 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(1) << 0, 1, 0; |
541 |
4/8✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
2 | tf2.rotation().col(2) << -1, 0, 0; |
542 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | tf2.translation() << 0, 0, cylinder.radius - offset; |
543 | |||
544 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
545 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&hspace, tf1, &cylinder, tf2, col_req, col_res); |
546 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
547 | |||
548 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
549 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
550 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&hspace, tf1, &cylinder, tf2, col_res, patch_req, |
551 | patch_res); | ||
552 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
553 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
2 | if (col_res.isCollision() && patch_res.numContactPatches() > 0) { |
554 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
555 | 2 | const Scalar tol = Scalar(1e-6); | |
556 | |||
557 | 2 | const size_t expected_size = 2; | |
558 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
559 | 2 | expected.tf.rotation() = | |
560 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
561 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
562 | 2 | expected.penetration_depth = contact.penetration_depth; | |
563 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint( |
564 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.transform(Vec3s(cylinder.radius, 0, cylinder.halfLength))); |
565 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint( |
566 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.transform(Vec3s(cylinder.radius, 0, -cylinder.halfLength))); |
567 | |||
568 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
569 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
570 | 2 | } | |
571 | 2 | } | |
572 | |||
573 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(convex_convex) { |
574 | 2 | const Scalar halfside = 0.5; | |
575 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Convex<Quadrilateral> box1(buildBox(halfside, halfside, halfside)); |
576 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Convex<Quadrilateral> box2(buildBox(halfside, halfside, halfside)); |
577 | |||
578 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; |
579 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s tf2; |
580 | // set translation to have a collision | ||
581 | 2 | const Scalar offset = Scalar(0.001); | |
582 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | tf2.setTranslation(Vec3s(0, 0, 2 * halfside - offset)); |
583 | |||
584 | 2 | const size_t num_max_contact = 1; | |
585 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
586 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
587 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
588 | |||
589 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&box1, tf1, &box2, tf2, col_req, col_res); |
590 | |||
591 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
592 | |||
593 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
594 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res1(patch_req); |
595 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res2(patch_req); |
596 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box1, tf1, &box2, tf2, col_res, patch_req, |
597 | patch_res1); | ||
598 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&box1, tf1, &box2, tf2, col_res, patch_req, |
599 | patch_res2); | ||
600 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.numContactPatches() == 1); |
601 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.numContactPatches() == 1); |
602 | |||
603 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | if (patch_res1.numContactPatches() > 0 && |
604 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | patch_res2.numContactPatches() > 0 && col_res.isCollision()) { |
605 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
606 | 2 | const Scalar tol = Scalar(1e-6); | |
607 |
18/36✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1 times.
|
2 | EIGEN_VECTOR_IS_APPROX(contact.normal, Vec3s(0, 0, 1), tol); |
608 | |||
609 | 2 | const size_t expected_size = 4; | |
610 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
611 | 2 | expected.tf.rotation() = | |
612 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
613 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
614 | 2 | expected.penetration_depth = contact.penetration_depth; | |
615 | const std::array<Vec3s, 4> corners = { | ||
616 | Vec3s(halfside, halfside, halfside), | ||
617 | ✗ | Vec3s(halfside, -halfside, halfside), | |
618 | ✗ | Vec3s(-halfside, -halfside, halfside), | |
619 | ✗ | Vec3s(-halfside, halfside, halfside), | |
620 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
2 | }; |
621 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 1 times.
|
10 | for (size_t i = 0; i < expected_size; ++i) { |
622 |
3/6✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
|
8 | expected.addPoint(corners[i] + |
623 |
2/4✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
|
16 | (contact.penetration_depth * contact.normal) / 2); |
624 | } | ||
625 | |||
626 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res1.getContactPatch(0).isSame(expected, tol)); |
627 |
8/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(patch_res2.getContactPatch(0).isSame(expected, tol)); |
628 | 2 | } | |
629 | 2 | } | |
630 | |||
631 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(edge_case_segment_segment) { |
632 | // This case covers the segment-segment edge case of contact patches. | ||
633 | // Two tetrahedrons make contact on one of their edge. | ||
634 | |||
635 | 2 | const size_t expected_size = 2; | |
636 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s expected_cp1(0, 0.5, 0); |
637 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s expected_cp2(0, 1, 0); |
638 | |||
639 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; // identity |
640 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf2; // identity |
641 | |||
642 | 2 | const size_t num_max_contact = 1; | |
643 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
644 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
645 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
646 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
647 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
648 | |||
649 | { | ||
650 | // Case 1 - Face-Face contact | ||
651 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
652 | Vec3s(-1, 0, 0), | ||
653 | Vec3s(0, 0, 0), | ||
654 | Vec3s(0, 1, 0), | ||
655 | Vec3s(-1, -1, -1), | ||
656 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
657 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
658 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
659 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
660 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
661 | |||
662 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
663 | ✗ | Vec3s(0, 0.5, 0), | |
664 | ✗ | Vec3s(0, 1.5, 0), | |
665 | ✗ | Vec3s(1, 0.5, 0), | |
666 | Vec3s(1, 1, 1), | ||
667 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
668 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
669 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
670 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
671 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
672 | |||
673 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
674 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
675 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
676 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
677 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
678 | patch_res); | ||
679 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
680 | |||
681 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
682 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
683 | 2 | const Scalar tol = Scalar(1e-6); | |
684 | |||
685 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
686 | // GJK/EPA can return any normal which is in the dual cone | ||
687 | // of the cone {(-1, 0, 0)}. | ||
688 | 2 | expected.tf.rotation() = | |
689 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
690 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
691 | 2 | expected.penetration_depth = contact.penetration_depth; | |
692 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp1); |
693 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp2); |
694 | |||
695 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
696 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
697 | 2 | } | |
698 | 2 | } | |
699 | |||
700 | { | ||
701 | // Case 2 - Face-Segment contact | ||
702 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
703 | ✗ | Vec3s(-1, 0, Scalar(-0.2)), | |
704 | Vec3s(0, 0, 0), | ||
705 | Vec3s(0, 1, 0), | ||
706 | Vec3s(-1, -1, -1), | ||
707 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
708 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
709 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
710 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
711 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
712 | |||
713 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
714 | ✗ | Vec3s(0, 0.5, 0), | |
715 | ✗ | Vec3s(0, 1.5, 0), | |
716 | ✗ | Vec3s(1, 0.5, 0), | |
717 | Vec3s(1, 1, 1), | ||
718 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
719 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
720 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
721 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
722 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
723 | |||
724 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
725 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
726 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
727 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
728 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
729 | patch_res); | ||
730 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
731 | |||
732 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
733 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
734 | 2 | const Scalar tol = Scalar(1e-6); | |
735 | |||
736 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
737 | 2 | expected.tf.rotation() = | |
738 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
739 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
740 | 2 | expected.penetration_depth = contact.penetration_depth; | |
741 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp1); |
742 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp2); |
743 | |||
744 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
745 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
746 | 2 | } | |
747 | 2 | } | |
748 | |||
749 | { | ||
750 | // Case 3 - Segment-Segment contact | ||
751 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
752 | ✗ | Vec3s(-1, 0, Scalar(-0.2)), | |
753 | Vec3s(0, 0, 0), | ||
754 | Vec3s(0, 1, 0), | ||
755 | Vec3s(-1, -1, -1), | ||
756 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
757 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
758 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
759 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
760 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
761 | |||
762 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
763 | ✗ | Vec3s(0, 0.5, 0), | |
764 | ✗ | Vec3s(0, 1.5, 0), | |
765 | ✗ | Vec3s(1, 0.5, 0.5), | |
766 | Vec3s(1, 1, 1), | ||
767 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
768 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
769 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
770 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
771 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
772 | |||
773 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
774 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
775 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
776 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
777 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
778 | patch_res); | ||
779 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
780 | |||
781 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
782 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
783 | 2 | const Scalar tol = Scalar(1e-6); | |
784 | |||
785 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
786 | 2 | expected.tf.rotation() = | |
787 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
788 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
789 | 2 | expected.penetration_depth = contact.penetration_depth; | |
790 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp1); |
791 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp2); |
792 | |||
793 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
794 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
795 | 2 | } | |
796 | 2 | } | |
797 | 2 | } | |
798 | |||
799 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(edge_case_vertex_vertex) { |
800 | // This case covers the vertex-vertex edge case of contact patches. | ||
801 | // Two tetrahedrons make contact on one of their vertex. | ||
802 | 2 | const size_t expected_size = 1; | |
803 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s expected_cp(0, 0, 0); |
804 | |||
805 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; // identity |
806 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf2; // identity |
807 | |||
808 | 2 | const size_t num_max_contact = 1; | |
809 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
810 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
811 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
812 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
813 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
814 | |||
815 | { | ||
816 | // Case 1 - Face-Face contact | ||
817 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
818 | Vec3s(-1, 0, 0), | ||
819 | Vec3s(0, 0, 0), | ||
820 | Vec3s(0, 1, 0), | ||
821 | Vec3s(-1, -1, -1), | ||
822 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
823 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
824 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
825 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
826 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
827 | |||
828 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
829 | Vec3s(1, 0, 0), | ||
830 | Vec3s(0, 0, 0), | ||
831 | Vec3s(0, -1, 0), | ||
832 | Vec3s(1, 1, 1), | ||
833 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
834 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
835 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
836 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
837 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
838 | |||
839 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
840 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
841 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
842 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
843 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
844 | patch_res); | ||
845 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
846 | |||
847 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
848 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
849 | 2 | const Scalar tol = Scalar(1e-6); | |
850 | |||
851 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
852 | 2 | expected.tf.rotation() = | |
853 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
854 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
855 | 2 | expected.penetration_depth = contact.penetration_depth; | |
856 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp); |
857 | |||
858 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
859 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
860 | 2 | } | |
861 | 2 | } | |
862 | |||
863 | { | ||
864 | // Case 2 - Segment-Face contact | ||
865 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
866 | ✗ | Vec3s(-1, 0, -0.5), | |
867 | Vec3s(0, 0, 0), | ||
868 | Vec3s(0, 1, 0), | ||
869 | Vec3s(-1, -1, -1), | ||
870 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
871 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
872 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
873 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
874 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
875 | |||
876 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
877 | Vec3s(1, 0, 0), | ||
878 | Vec3s(0, 0, 0), | ||
879 | Vec3s(0, -1, 0), | ||
880 | Vec3s(1, 1, 1), | ||
881 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
882 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
883 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
884 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
885 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
886 | |||
887 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
888 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
889 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
890 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
891 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
892 | patch_res); | ||
893 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
894 | |||
895 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
896 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
897 | 2 | const Scalar tol = Scalar(1e-6); | |
898 | |||
899 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
900 | 2 | expected.tf.rotation() = | |
901 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
902 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
903 | 2 | expected.penetration_depth = contact.penetration_depth; | |
904 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp); |
905 | |||
906 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
907 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
908 | 2 | } | |
909 | 2 | } | |
910 | |||
911 | { | ||
912 | // Case 2 - Segment-Segment contact | ||
913 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
914 | ✗ | Vec3s(-1, 0, Scalar(-0.2)), | |
915 | Vec3s(0, 0, 0), | ||
916 | Vec3s(0, 1, 0), | ||
917 | Vec3s(-1, -1, -1), | ||
918 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
919 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
920 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
921 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
922 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
923 | |||
924 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
925 | Vec3s(1, 0, 0), | ||
926 | Vec3s(0, 0, 0), | ||
927 | ✗ | Vec3s(0, -1, 0.5), | |
928 | Vec3s(1, 1, 1), | ||
929 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
930 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
931 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
932 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
933 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
934 | |||
935 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
936 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
937 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
938 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
939 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
940 | patch_res); | ||
941 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
942 | |||
943 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
944 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
945 | 2 | const Scalar tol = Scalar(1e-6); | |
946 | |||
947 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
948 | 2 | expected.tf.rotation() = | |
949 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
950 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
951 | 2 | expected.penetration_depth = contact.penetration_depth; | |
952 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp); |
953 | |||
954 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
955 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
956 | 2 | } | |
957 | 2 | } | |
958 | 2 | } | |
959 | |||
960 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(edge_case_segment_face) { |
961 | // This case covers the segment-face edge case of contact patches. | ||
962 | // Two tetrahedrons make contact on one of their segment/face respectively. | ||
963 | 2 | const size_t expected_size = 2; | |
964 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s expected_cp1(0, 0, 0); |
965 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Vec3s expected_cp2(-0.5, 0.5, 0); |
966 | |||
967 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf1; // identity |
968 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s tf2; // identity |
969 | |||
970 | 2 | const size_t num_max_contact = 1; | |
971 | const CollisionRequest col_req(CollisionRequestFlag::CONTACT, | ||
972 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | num_max_contact); |
973 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult col_res; |
974 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatchRequest patch_req; |
975 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatchResult patch_res(patch_req); |
976 | |||
977 | { | ||
978 | std::shared_ptr<std::vector<Vec3s>> pts1(new std::vector<Vec3s>({ | ||
979 | Vec3s(-1, 0, -0), | ||
980 | Vec3s(0, 0, 0), | ||
981 | Vec3s(0, 1, 0), | ||
982 | Vec3s(-1, -1, -1), | ||
983 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
984 | std::shared_ptr<std::vector<Triangle>> tris1( | ||
985 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
986 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
987 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra1(pts1, 4, tris1, 4); |
988 | |||
989 | std::shared_ptr<std::vector<Vec3s>> pts2(new std::vector<Vec3s>({ | ||
990 | ✗ | Vec3s(-0.5, 0.5, 0), | |
991 | ✗ | Vec3s(0.5, -0.5, 0), | |
992 | ✗ | Vec3s(1, 0.5, 0.5), | |
993 | Vec3s(1, 1, 1), | ||
994 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | })); |
995 | std::shared_ptr<std::vector<Triangle>> tris2( | ||
996 | new std::vector<Triangle>({Triangle(0, 1, 2), Triangle(0, 2, 3), | ||
997 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
|
2 | Triangle(0, 3, 1), Triangle(2, 1, 3)})); |
998 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | Convex<Triangle> tetra2(pts2, 4, tris2, 4); |
999 | |||
1000 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | col_res.clear(); |
1001 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::collide(&tetra1, tf1, &tetra2, tf2, col_req, col_res); |
1002 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(col_res.isCollision()); |
1003 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | patch_res.clear(); |
1004 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | coal::computeContactPatch(&tetra1, tf1, &tetra2, tf2, col_res, patch_req, |
1005 | patch_res); | ||
1006 |
6/12✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(patch_res.numContactPatches() == 1); |
1007 | |||
1008 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (patch_res.numContactPatches() > 0) { |
1009 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact &contact = col_res.getContact(0); |
1010 | 2 | const Scalar tol = Scalar(1e-6); | |
1011 | |||
1012 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ContactPatch expected(expected_size); |
1013 | 2 | expected.tf.rotation() = | |
1014 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | constructOrthonormalBasisFromVector(contact.normal); |
1015 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | expected.tf.translation() = contact.pos; |
1016 | 2 | expected.penetration_depth = contact.penetration_depth; | |
1017 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp1); |
1018 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | expected.addPoint(expected_cp2); |
1019 | |||
1020 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const ContactPatch &contact_patch = patch_res.getContactPatch(0); |
1021 |
7/14✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
|
2 | BOOST_CHECK(expected.isSame(contact_patch, tol)); |
1022 | 2 | } | |
1023 | 2 | } | |
1024 | 2 | } | |
1025 |