GCC Code Coverage Report


Directory: ./
File: src/BV/RSS.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 448 595 75.3%
Branches: 958 2044 46.9%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011-2014, Willow Garage, Inc.
5 * Copyright (c) 2014-2015, Open Source Robotics Foundation
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of Open Source Robotics Foundation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
36 /** \author Jia Pan */
37
38 #include "coal/BV/RSS.h"
39 #include "coal/BVH/BVH_utility.h"
40 #include "coal/internal/tools.h"
41 #include "coal/collision_data.h"
42
43 #include <iostream>
44
45 namespace coal {
46
47 /// @brief Clip value between a and b
48 3725914 void clipToRange(Scalar& val, Scalar a, Scalar b) {
49
2/2
✓ Branch 0 taken 1366094 times.
✓ Branch 1 taken 2359820 times.
3725914 if (val < a)
50 1366094 val = a;
51
2/2
✓ Branch 0 taken 1410418 times.
✓ Branch 1 taken 949402 times.
2359820 else if (val > b)
52 1410418 val = b;
53 3725914 }
54
55 /// @brief Finds the parameters t & u corresponding to the two closest points on
56 /// a pair of line segments. The first segment is defined as Pa + A*t, 0 <= t <=
57 /// a, where "Pa" is one endpoint of the segment, "A" is a unit vector pointing
58 /// to the other endpoint, and t is a scalar that produces all the points
59 /// between the two endpoints. Since "A" is a unit vector, "a" is the segment's
60 /// length. The second segment is defined as Pb + B*u, 0 <= u <= b. Many of the
61 /// terms needed by the algorithm are already computed for other purposes,so we
62 /// just pass these terms into the function instead of complete specifications
63 /// of each segment. "T" in the dot products is the vector betweeen Pa and Pb.
64 /// Reference: "On fast computation of distance between line segments." Vladimir
65 /// J. Lumelsky, in Information Processing Letters, no. 21, pages 55-61, 1985.
66 1559992 void segCoords(Scalar& t, Scalar& u, Scalar a, Scalar b, Scalar A_dot_B,
67 Scalar A_dot_T, Scalar B_dot_T) {
68 1559992 Scalar denom = 1 - A_dot_B * A_dot_B;
69
70
2/2
✓ Branch 0 taken 91908 times.
✓ Branch 1 taken 1468084 times.
1559992 if (denom == 0)
71 91908 t = 0;
72 else {
73 1468084 t = (A_dot_T - B_dot_T * A_dot_B) / denom;
74 1468084 clipToRange(t, 0, a);
75 }
76
77 1559992 u = t * A_dot_B - B_dot_T;
78
2/2
✓ Branch 0 taken 652096 times.
✓ Branch 1 taken 907896 times.
1559992 if (u < 0) {
79 652096 u = 0;
80 652096 t = A_dot_T;
81 652096 clipToRange(t, 0, a);
82
2/2
✓ Branch 0 taken 686480 times.
✓ Branch 1 taken 221416 times.
907896 } else if (u > b) {
83 686480 u = b;
84 686480 t = u * A_dot_B + A_dot_T;
85 686480 clipToRange(t, 0, a);
86 }
87 1559992 }
88
89 /// @brief Returns whether the nearest point on rectangle edge
90 /// Pb + B*u, 0 <= u <= b, to the rectangle edge,
91 /// Pa + A*t, 0 <= t <= a, is within the half space
92 /// determined by the point Pa and the direction Anorm.
93 /// A,B, and Anorm are unit vectors. T is the vector between Pa and Pb.
94 459657 bool inVoronoi(Scalar a, Scalar b, Scalar Anorm_dot_B, Scalar Anorm_dot_T,
95 Scalar A_dot_B, Scalar A_dot_T, Scalar B_dot_T) {
96
2/2
✓ Branch 0 taken 30 times.
✓ Branch 1 taken 459627 times.
459657 if (fabs(Anorm_dot_B) < 1e-7) return false;
97
98 Scalar t, u, v;
99
100 459627 u = -Anorm_dot_T / Anorm_dot_B;
101
1/2
✓ Branch 1 taken 459627 times.
✗ Branch 2 not taken.
459627 clipToRange(u, 0, b);
102
103 459627 t = u * A_dot_B + A_dot_T;
104
1/2
✓ Branch 1 taken 459627 times.
✗ Branch 2 not taken.
459627 clipToRange(t, 0, a);
105
106 459627 v = t * A_dot_B - B_dot_T;
107
108
2/2
✓ Branch 0 taken 228351 times.
✓ Branch 1 taken 231276 times.
459627 if (Anorm_dot_B > 0) {
109
2/2
✓ Branch 0 taken 99020 times.
✓ Branch 1 taken 129331 times.
228351 if (v > (u + 1e-7)) return true;
110 } else {
111
2/2
✓ Branch 0 taken 86463 times.
✓ Branch 1 taken 144813 times.
231276 if (v < (u - 1e-7)) return true;
112 }
113 274144 return false;
114 }
115
116 /// @brief Distance between two oriented rectangles; P and Q (optional return
117 /// values) are the closest points in the rectangles, both are in the local
118 /// frame of the first rectangle.
119 1624301 Scalar rectDistance(const Matrix3s& Rab, Vec3s const& Tab, const Scalar a[2],
120 const Scalar b[2], Vec3s* P = NULL, Vec3s* Q = NULL) {
121 Scalar A0_dot_B0, A0_dot_B1, A1_dot_B0, A1_dot_B1;
122
123
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 A0_dot_B0 = Rab(0, 0);
124
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 A0_dot_B1 = Rab(0, 1);
125
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 A1_dot_B0 = Rab(1, 0);
126
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 A1_dot_B1 = Rab(1, 1);
127
128 Scalar aA0_dot_B0, aA0_dot_B1, aA1_dot_B0, aA1_dot_B1;
129 Scalar bA0_dot_B0, bA0_dot_B1, bA1_dot_B0, bA1_dot_B1;
130
131 1624301 aA0_dot_B0 = a[0] * A0_dot_B0;
132 1624301 aA0_dot_B1 = a[0] * A0_dot_B1;
133 1624301 aA1_dot_B0 = a[1] * A1_dot_B0;
134 1624301 aA1_dot_B1 = a[1] * A1_dot_B1;
135 1624301 bA0_dot_B0 = b[0] * A0_dot_B0;
136 1624301 bA1_dot_B0 = b[0] * A1_dot_B0;
137 1624301 bA0_dot_B1 = b[1] * A0_dot_B1;
138 1624301 bA1_dot_B1 = b[1] * A1_dot_B1;
139
140
3/6
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1624301 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1624301 times.
✗ Branch 8 not taken.
1624301 Vec3s Tba(Rab.transpose() * Tab);
141
142
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 Vec3s S;
143 Scalar t, u;
144
145 // determine if any edge pair contains the closest points
146
147 Scalar ALL_x, ALU_x, AUL_x, AUU_x;
148 Scalar BLL_x, BLU_x, BUL_x, BUU_x;
149 Scalar LA1_lx, LA1_ux, UA1_lx, UA1_ux, LB1_lx, LB1_ux, UB1_lx, UB1_ux;
150
151
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 ALL_x = -Tba[0];
152 1624301 ALU_x = ALL_x + aA1_dot_B0;
153 1624301 AUL_x = ALL_x + aA0_dot_B0;
154 1624301 AUU_x = ALU_x + aA0_dot_B0;
155
156
2/2
✓ Branch 0 taken 859425 times.
✓ Branch 1 taken 764876 times.
1624301 if (ALL_x < ALU_x) {
157 859425 LA1_lx = ALL_x;
158 859425 LA1_ux = ALU_x;
159 859425 UA1_lx = AUL_x;
160 859425 UA1_ux = AUU_x;
161 } else {
162 764876 LA1_lx = ALU_x;
163 764876 LA1_ux = ALL_x;
164 764876 UA1_lx = AUU_x;
165 764876 UA1_ux = AUL_x;
166 }
167
168
1/2
✓ Branch 1 taken 1624301 times.
✗ Branch 2 not taken.
1624301 BLL_x = Tab[0];
169 1624301 BLU_x = BLL_x + bA0_dot_B1;
170 1624301 BUL_x = BLL_x + bA0_dot_B0;
171 1624301 BUU_x = BLU_x + bA0_dot_B0;
172
173
2/2
✓ Branch 0 taken 867273 times.
✓ Branch 1 taken 757028 times.
1624301 if (BLL_x < BLU_x) {
174 867273 LB1_lx = BLL_x;
175 867273 LB1_ux = BLU_x;
176 867273 UB1_lx = BUL_x;
177 867273 UB1_ux = BUU_x;
178 } else {
179 757028 LB1_lx = BLU_x;
180 757028 LB1_ux = BLL_x;
181 757028 UB1_lx = BUU_x;
182 757028 UB1_ux = BUL_x;
183 }
184
185 // UA1, UB1
186
187
4/4
✓ Branch 0 taken 825553 times.
✓ Branch 1 taken 798748 times.
✓ Branch 2 taken 395908 times.
✓ Branch 3 taken 429645 times.
1624301 if ((UA1_ux > b[0]) && (UB1_ux > a[0])) {
188 812303 if (((UA1_lx > b[0]) ||
189
3/4
✓ Branch 1 taken 20487 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9622 times.
✓ Branch 4 taken 10865 times.
20487 inVoronoi(b[1], a[1], A1_dot_B0, aA0_dot_B0 - b[0] - Tba[0], A1_dot_B1,
190
7/10
✓ Branch 0 taken 20487 times.
✓ Branch 1 taken 375421 times.
✓ Branch 3 taken 20487 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 20487 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 20487 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 369174 times.
✓ Branch 12 taken 26734 times.
791816 aA0_dot_B1 - Tba[1], -Tab[1] - bA1_dot_B0)) &&
191
2/2
✓ Branch 0 taken 26610 times.
✓ Branch 1 taken 358433 times.
385043 ((UB1_lx > a[0]) ||
192
3/4
✓ Branch 1 taken 26610 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10741 times.
✓ Branch 4 taken 15869 times.
26610 inVoronoi(a[1], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0 - a[0], A1_dot_B1,
193
3/6
✓ Branch 1 taken 26610 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 26610 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 26610 times.
✗ Branch 8 not taken.
26610 Tab[1] + bA1_dot_B0, Tba[1] - aA0_dot_B1))) {
194
1/2
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
369174 segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1] + bA1_dot_B0,
195
2/4
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 369174 times.
✗ Branch 5 not taken.
369174 Tba[1] - aA0_dot_B1);
196
197
4/8
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 369174 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 369174 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 369174 times.
✗ Branch 11 not taken.
369174 S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - a[0];
198
4/8
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 369174 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 369174 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 369174 times.
✗ Branch 11 not taken.
369174 S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - t;
199
4/8
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 369174 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 369174 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 369174 times.
✗ Branch 11 not taken.
369174 S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u;
200
201
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
369174 if (P && Q) {
202 *P << a[0], t, 0;
203 *Q = S + (*P);
204 }
205
206
1/2
✓ Branch 1 taken 369174 times.
✗ Branch 2 not taken.
369174 return S.norm();
207 }
208 }
209
210 // UA1, LB1
211
212
4/4
✓ Branch 0 taken 694038 times.
✓ Branch 1 taken 561089 times.
✓ Branch 2 taken 319667 times.
✓ Branch 3 taken 374371 times.
1255127 if ((UA1_lx < 0) && (LB1_ux > a[0])) {
213
3/4
✓ Branch 1 taken 20106 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7801 times.
✓ Branch 4 taken 12305 times.
20106 if (((UA1_ux < 0) || inVoronoi(b[1], a[1], -A1_dot_B0, Tba[0] - aA0_dot_B0,
214
7/10
✓ Branch 0 taken 20106 times.
✓ Branch 1 taken 299561 times.
✓ Branch 3 taken 20106 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 20106 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 20106 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 297177 times.
✓ Branch 12 taken 22490 times.
639334 A1_dot_B1, aA0_dot_B1 - Tba[1], -Tab[1])) &&
215
2/2
✓ Branch 0 taken 23198 times.
✓ Branch 1 taken 284164 times.
307362 ((LB1_lx > a[0]) ||
216
4/6
✓ Branch 1 taken 23198 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23198 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 13013 times.
✓ Branch 7 taken 10185 times.
23198 inVoronoi(a[1], b[1], A0_dot_B1, Tab[0] - a[0], A1_dot_B1, Tab[1],
217
2/4
✓ Branch 1 taken 23198 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23198 times.
✗ Branch 5 not taken.
23198 Tba[1] - aA0_dot_B1))) {
218
3/6
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 297177 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 297177 times.
✗ Branch 8 not taken.
297177 segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1], Tba[1] - aA0_dot_B1);
219
220
3/6
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 297177 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 297177 times.
✗ Branch 8 not taken.
297177 S[0] = Tab[0] + Rab(0, 1) * u - a[0];
221
3/6
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 297177 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 297177 times.
✗ Branch 8 not taken.
297177 S[1] = Tab[1] + Rab(1, 1) * u - t;
222
3/6
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 297177 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 297177 times.
✗ Branch 8 not taken.
297177 S[2] = Tab[2] + Rab(2, 1) * u;
223
224
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
297177 if (P && Q) {
225 *P << a[0], t, 0;
226 *Q = S + (*P);
227 }
228
229
1/2
✓ Branch 1 taken 297177 times.
✗ Branch 2 not taken.
297177 return S.norm();
230 }
231 }
232
233 // LA1, UB1
234
235
4/4
✓ Branch 0 taken 443382 times.
✓ Branch 1 taken 514568 times.
✓ Branch 2 taken 328925 times.
✓ Branch 3 taken 114457 times.
957950 if ((LA1_ux > b[0]) && (UB1_lx < 0)) {
236 676874 if (((LA1_lx > b[0]) ||
237
4/6
✓ Branch 1 taken 19024 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19024 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9742 times.
✓ Branch 7 taken 9282 times.
19024 inVoronoi(b[1], a[1], A1_dot_B0, -Tba[0] - b[0], A1_dot_B1, -Tba[1],
238
8/10
✓ Branch 0 taken 19024 times.
✓ Branch 1 taken 309901 times.
✓ Branch 3 taken 19024 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 19024 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 26244 times.
✓ Branch 9 taken 293399 times.
✓ Branch 10 taken 307418 times.
✓ Branch 11 taken 21507 times.
374193 -Tab[1] - bA1_dot_B0)) &&
239
3/4
✓ Branch 1 taken 26244 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 14019 times.
✓ Branch 4 taken 12225 times.
26244 ((UB1_ux < 0) || inVoronoi(a[1], b[1], -A0_dot_B1, -Tab[0] - bA0_dot_B0,
240
3/6
✓ Branch 1 taken 26244 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 26244 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 26244 times.
✗ Branch 8 not taken.
26244 A1_dot_B1, Tab[1] + bA1_dot_B0, Tba[1]))) {
241
3/6
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 307418 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 307418 times.
✗ Branch 8 not taken.
307418 segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1] + bA1_dot_B0, Tba[1]);
242
243
4/8
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 307418 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 307418 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 307418 times.
✗ Branch 11 not taken.
307418 S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u;
244
4/8
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 307418 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 307418 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 307418 times.
✗ Branch 11 not taken.
307418 S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - t;
245
4/8
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 307418 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 307418 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 307418 times.
✗ Branch 11 not taken.
307418 S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u;
246
247
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
307418 if (P && Q) {
248 *P << 0, t, 0;
249 *Q = S + (*P);
250 }
251
252
1/2
✓ Branch 1 taken 307418 times.
✗ Branch 2 not taken.
307418 return S.norm();
253 }
254 }
255
256 // LA1, LB1
257
258
4/4
✓ Branch 0 taken 415561 times.
✓ Branch 1 taken 234971 times.
✓ Branch 2 taken 305971 times.
✓ Branch 3 taken 109590 times.
650532 if ((LA1_lx < 0) && (LB1_lx < 0)) {
259
3/4
✓ Branch 1 taken 19135 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6185 times.
✓ Branch 4 taken 12950 times.
19135 if (((LA1_ux < 0) || inVoronoi(b[1], a[1], -A1_dot_B0, Tba[0], A1_dot_B1,
260
9/12
✓ Branch 0 taken 19135 times.
✓ Branch 1 taken 286836 times.
✓ Branch 3 taken 19135 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 19135 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 19135 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 17431 times.
✓ Branch 12 taken 275590 times.
✓ Branch 13 taken 282847 times.
✓ Branch 14 taken 23124 times.
342537 -Tba[1], -Tab[1])) &&
261
3/4
✓ Branch 1 taken 17431 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7257 times.
✓ Branch 4 taken 10174 times.
17431 ((LB1_ux < 0) || inVoronoi(a[1], b[1], -A0_dot_B1, -Tab[0], A1_dot_B1,
262
3/6
✓ Branch 1 taken 17431 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17431 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 17431 times.
✗ Branch 8 not taken.
17431 Tab[1], Tba[1]))) {
263
3/6
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 282847 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 282847 times.
✗ Branch 8 not taken.
282847 segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1], Tba[1]);
264
265
3/6
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 282847 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 282847 times.
✗ Branch 8 not taken.
282847 S[0] = Tab[0] + Rab(0, 1) * u;
266
3/6
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 282847 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 282847 times.
✗ Branch 8 not taken.
282847 S[1] = Tab[1] + Rab(1, 1) * u - t;
267
3/6
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 282847 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 282847 times.
✗ Branch 8 not taken.
282847 S[2] = Tab[2] + Rab(2, 1) * u;
268
269
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
282847 if (P && Q) {
270 *P << 0, t, 0;
271 *Q = S + (*P);
272 }
273
274
1/2
✓ Branch 1 taken 282847 times.
✗ Branch 2 not taken.
282847 return S.norm();
275 }
276 }
277
278 Scalar ALL_y, ALU_y, AUL_y, AUU_y;
279
280
1/2
✓ Branch 1 taken 367685 times.
✗ Branch 2 not taken.
367685 ALL_y = -Tba[1];
281 367685 ALU_y = ALL_y + aA1_dot_B1;
282 367685 AUL_y = ALL_y + aA0_dot_B1;
283 367685 AUU_y = ALU_y + aA0_dot_B1;
284
285 Scalar LA1_ly, LA1_uy, UA1_ly, UA1_uy, LB0_lx, LB0_ux, UB0_lx, UB0_ux;
286
287
2/2
✓ Branch 0 taken 196502 times.
✓ Branch 1 taken 171183 times.
367685 if (ALL_y < ALU_y) {
288 196502 LA1_ly = ALL_y;
289 196502 LA1_uy = ALU_y;
290 196502 UA1_ly = AUL_y;
291 196502 UA1_uy = AUU_y;
292 } else {
293 171183 LA1_ly = ALU_y;
294 171183 LA1_uy = ALL_y;
295 171183 UA1_ly = AUU_y;
296 171183 UA1_uy = AUL_y;
297 }
298
299
2/2
✓ Branch 0 taken 190294 times.
✓ Branch 1 taken 177391 times.
367685 if (BLL_x < BUL_x) {
300 190294 LB0_lx = BLL_x;
301 190294 LB0_ux = BUL_x;
302 190294 UB0_lx = BLU_x;
303 190294 UB0_ux = BUU_x;
304 } else {
305 177391 LB0_lx = BUL_x;
306 177391 LB0_ux = BLL_x;
307 177391 UB0_lx = BUU_x;
308 177391 UB0_ux = BLU_x;
309 }
310
311 // UA1, UB0
312
313
4/4
✓ Branch 0 taken 163332 times.
✓ Branch 1 taken 204353 times.
✓ Branch 2 taken 47165 times.
✓ Branch 3 taken 116167 times.
367685 if ((UA1_uy > b[1]) && (UB0_ux > a[0])) {
314 101328 if (((UA1_ly > b[1]) ||
315
3/4
✓ Branch 1 taken 6998 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3502 times.
✓ Branch 4 taken 3496 times.
6998 inVoronoi(b[0], a[1], A1_dot_B1, aA0_dot_B1 - Tba[1] - b[1], A1_dot_B0,
316
7/10
✓ Branch 0 taken 6998 times.
✓ Branch 1 taken 40167 times.
✓ Branch 3 taken 6998 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6998 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 6998 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 18945 times.
✓ Branch 12 taken 28220 times.
94330 aA0_dot_B0 - Tba[0], -Tab[1] - bA1_dot_B1)) &&
317
2/2
✓ Branch 0 taken 28745 times.
✓ Branch 1 taken 14924 times.
43669 ((UB0_lx > a[0]) ||
318
3/4
✓ Branch 1 taken 28745 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4021 times.
✓ Branch 4 taken 24724 times.
28745 inVoronoi(a[1], b[0], A0_dot_B0, Tab[0] - a[0] + bA0_dot_B1, A1_dot_B0,
319
3/6
✓ Branch 1 taken 28745 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 28745 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 28745 times.
✗ Branch 8 not taken.
28745 Tab[1] + bA1_dot_B1, Tba[0] - aA0_dot_B0))) {
320
1/2
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
18945 segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1] + bA1_dot_B1,
321
2/4
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18945 times.
✗ Branch 5 not taken.
18945 Tba[0] - aA0_dot_B0);
322
323
4/8
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18945 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18945 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18945 times.
✗ Branch 11 not taken.
18945 S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - a[0];
324
4/8
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18945 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18945 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18945 times.
✗ Branch 11 not taken.
18945 S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - t;
325
4/8
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18945 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18945 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18945 times.
✗ Branch 11 not taken.
18945 S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u;
326
327
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
18945 if (P && Q) {
328 *P << a[0], t, 0;
329 *Q = S + (*P);
330 }
331
332
1/2
✓ Branch 1 taken 18945 times.
✗ Branch 2 not taken.
18945 return S.norm();
333 }
334 }
335
336 // UA1, LB0
337
338
4/4
✓ Branch 0 taken 197079 times.
✓ Branch 1 taken 151661 times.
✓ Branch 2 taken 58762 times.
✓ Branch 3 taken 138317 times.
348740 if ((UA1_ly < 0) && (LB0_ux > a[0])) {
339
3/4
✓ Branch 1 taken 7921 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4663 times.
✓ Branch 4 taken 3258 times.
7921 if (((UA1_uy < 0) || inVoronoi(b[0], a[1], -A1_dot_B1, Tba[1] - aA0_dot_B1,
340
7/10
✓ Branch 0 taken 7921 times.
✓ Branch 1 taken 50841 times.
✓ Branch 3 taken 7921 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7921 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 7921 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 37193 times.
✓ Branch 12 taken 21569 times.
117524 A1_dot_B0, aA0_dot_B0 - Tba[0], -Tab[1])) &&
341
2/2
✓ Branch 0 taken 24020 times.
✓ Branch 1 taken 31484 times.
55504 ((LB0_lx > a[0]) ||
342
4/6
✓ Branch 1 taken 24020 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24020 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5709 times.
✓ Branch 7 taken 18311 times.
24020 inVoronoi(a[1], b[0], A0_dot_B0, Tab[0] - a[0], A1_dot_B0, Tab[1],
343
2/4
✓ Branch 1 taken 24020 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 24020 times.
✗ Branch 5 not taken.
24020 Tba[0] - aA0_dot_B0))) {
344
3/6
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 37193 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 37193 times.
✗ Branch 8 not taken.
37193 segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1], Tba[0] - aA0_dot_B0);
345
346
3/6
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 37193 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 37193 times.
✗ Branch 8 not taken.
37193 S[0] = Tab[0] + Rab(0, 0) * u - a[0];
347
3/6
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 37193 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 37193 times.
✗ Branch 8 not taken.
37193 S[1] = Tab[1] + Rab(1, 0) * u - t;
348
3/6
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 37193 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 37193 times.
✗ Branch 8 not taken.
37193 S[2] = Tab[2] + Rab(2, 0) * u;
349
350
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
37193 if (P && Q) {
351 *P << a[0], t, 0;
352 *Q = S + (*P);
353 }
354
355
1/2
✓ Branch 1 taken 37193 times.
✗ Branch 2 not taken.
37193 return S.norm();
356 }
357 }
358
359 // LA1, UB0
360
361
4/4
✓ Branch 0 taken 133972 times.
✓ Branch 1 taken 177575 times.
✓ Branch 2 taken 40062 times.
✓ Branch 3 taken 93910 times.
311547 if ((LA1_uy > b[1]) && (UB0_lx < 0)) {
362 87660 if (((LA1_ly > b[1]) ||
363
4/6
✓ Branch 1 taken 7536 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7536 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4145 times.
✓ Branch 7 taken 3391 times.
7536 inVoronoi(b[0], a[1], A1_dot_B1, -Tba[1] - b[1], A1_dot_B0, -Tba[0],
364
8/10
✓ Branch 0 taken 7536 times.
✓ Branch 1 taken 32526 times.
✓ Branch 3 taken 7536 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7536 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 22680 times.
✓ Branch 9 taken 13991 times.
✓ Branch 10 taken 19913 times.
✓ Branch 11 taken 20149 times.
70278 -Tab[1] - bA1_dot_B1)) &&
365
366
3/4
✓ Branch 1 taken 22680 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5922 times.
✓ Branch 4 taken 16758 times.
22680 ((UB0_ux < 0) || inVoronoi(a[1], b[0], -A0_dot_B0, -Tab[0] - bA0_dot_B1,
367
3/6
✓ Branch 1 taken 22680 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22680 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22680 times.
✗ Branch 8 not taken.
22680 A1_dot_B0, Tab[1] + bA1_dot_B1, Tba[0]))) {
368
3/6
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19913 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19913 times.
✗ Branch 8 not taken.
19913 segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1] + bA1_dot_B1, Tba[0]);
369
370
4/8
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19913 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19913 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19913 times.
✗ Branch 11 not taken.
19913 S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u;
371
4/8
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19913 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19913 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19913 times.
✗ Branch 11 not taken.
19913 S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - t;
372
4/8
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19913 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19913 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19913 times.
✗ Branch 11 not taken.
19913 S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u;
373
374
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
19913 if (P && Q) {
375 *P << 0, t, 0;
376 *Q = S + (*P);
377 }
378
379
1/2
✓ Branch 1 taken 19913 times.
✗ Branch 2 not taken.
19913 return S.norm();
380 }
381 }
382
383 // LA1, LB0
384
385
4/4
✓ Branch 0 taken 170675 times.
✓ Branch 1 taken 120959 times.
✓ Branch 2 taken 76882 times.
✓ Branch 3 taken 93793 times.
291634 if ((LA1_ly < 0) && (LB0_lx < 0)) {
386
3/4
✓ Branch 1 taken 7348 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3098 times.
✓ Branch 4 taken 4250 times.
7348 if (((LA1_uy < 0) || inVoronoi(b[0], a[1], -A1_dot_B1, Tba[1], A1_dot_B0,
387
9/12
✓ Branch 0 taken 7348 times.
✓ Branch 1 taken 69534 times.
✓ Branch 3 taken 7348 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7348 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 7348 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 28623 times.
✓ Branch 12 taken 44009 times.
✓ Branch 13 taken 50655 times.
✓ Branch 14 taken 26227 times.
112853 -Tba[0], -Tab[1])) &&
388
3/4
✓ Branch 1 taken 28623 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6646 times.
✓ Branch 4 taken 21977 times.
28623 ((LB0_ux < 0) || inVoronoi(a[1], b[0], -A0_dot_B0, -Tab[0], A1_dot_B0,
389
3/6
✓ Branch 1 taken 28623 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 28623 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 28623 times.
✗ Branch 8 not taken.
28623 Tab[1], Tba[0]))) {
390
3/6
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50655 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50655 times.
✗ Branch 8 not taken.
50655 segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1], Tba[0]);
391
392
3/6
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50655 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50655 times.
✗ Branch 8 not taken.
50655 S[0] = Tab[0] + Rab(0, 0) * u;
393
3/6
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50655 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50655 times.
✗ Branch 8 not taken.
50655 S[1] = Tab[1] + Rab(1, 0) * u - t;
394
3/6
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50655 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50655 times.
✗ Branch 8 not taken.
50655 S[2] = Tab[2] + Rab(2, 0) * u;
395
396
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
50655 if (P && Q) {
397 *P << 0, t, 0;
398 *Q = S + (*P);
399 }
400
401
1/2
✓ Branch 1 taken 50655 times.
✗ Branch 2 not taken.
50655 return S.norm();
402 }
403 }
404
405 Scalar BLL_y, BLU_y, BUL_y, BUU_y;
406
407
1/2
✓ Branch 1 taken 240979 times.
✗ Branch 2 not taken.
240979 BLL_y = Tab[1];
408 240979 BLU_y = BLL_y + bA1_dot_B1;
409 240979 BUL_y = BLL_y + bA1_dot_B0;
410 240979 BUU_y = BLU_y + bA1_dot_B0;
411
412 Scalar LA0_lx, LA0_ux, UA0_lx, UA0_ux, LB1_ly, LB1_uy, UB1_ly, UB1_uy;
413
414
2/2
✓ Branch 0 taken 124178 times.
✓ Branch 1 taken 116801 times.
240979 if (ALL_x < AUL_x) {
415 124178 LA0_lx = ALL_x;
416 124178 LA0_ux = AUL_x;
417 124178 UA0_lx = ALU_x;
418 124178 UA0_ux = AUU_x;
419 } else {
420 116801 LA0_lx = AUL_x;
421 116801 LA0_ux = ALL_x;
422 116801 UA0_lx = AUU_x;
423 116801 UA0_ux = ALU_x;
424 }
425
426
2/2
✓ Branch 0 taken 130867 times.
✓ Branch 1 taken 110112 times.
240979 if (BLL_y < BLU_y) {
427 130867 LB1_ly = BLL_y;
428 130867 LB1_uy = BLU_y;
429 130867 UB1_ly = BUL_y;
430 130867 UB1_uy = BUU_y;
431 } else {
432 110112 LB1_ly = BLU_y;
433 110112 LB1_uy = BLL_y;
434 110112 UB1_ly = BUU_y;
435 110112 UB1_uy = BUL_y;
436 }
437
438 // UA0, UB1
439
440
4/4
✓ Branch 0 taken 132124 times.
✓ Branch 1 taken 108855 times.
✓ Branch 2 taken 47416 times.
✓ Branch 3 taken 84708 times.
240979 if ((UA0_ux > b[0]) && (UB1_uy > a[1])) {
441 111371 if (((UA0_lx > b[0]) ||
442
3/4
✓ Branch 1 taken 16539 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7108 times.
✓ Branch 4 taken 9431 times.
16539 inVoronoi(b[1], a[0], A0_dot_B0, aA1_dot_B0 - Tba[0] - b[0], A0_dot_B1,
443
7/10
✓ Branch 0 taken 16539 times.
✓ Branch 1 taken 30877 times.
✓ Branch 3 taken 16539 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16539 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 16539 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 35712 times.
✓ Branch 12 taken 11704 times.
94832 aA1_dot_B1 - Tba[1], -Tab[0] - bA0_dot_B0)) &&
444
2/2
✓ Branch 0 taken 4488 times.
✓ Branch 1 taken 33497 times.
37985 ((UB1_ly > a[1]) ||
445
3/4
✓ Branch 1 taken 4488 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2215 times.
✓ Branch 4 taken 2273 times.
4488 inVoronoi(a[0], b[1], A1_dot_B1, Tab[1] - a[1] + bA1_dot_B0, A0_dot_B1,
446
3/6
✓ Branch 1 taken 4488 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4488 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4488 times.
✗ Branch 8 not taken.
4488 Tab[0] + bA0_dot_B0, Tba[1] - aA1_dot_B1))) {
447
1/2
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
35712 segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0,
448
2/4
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35712 times.
✗ Branch 5 not taken.
35712 Tba[1] - aA1_dot_B1);
449
450
4/8
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35712 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35712 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35712 times.
✗ Branch 11 not taken.
35712 S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - t;
451
4/8
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35712 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35712 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35712 times.
✗ Branch 11 not taken.
35712 S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - a[1];
452
4/8
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35712 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35712 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35712 times.
✗ Branch 11 not taken.
35712 S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u;
453
454
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
35712 if (P && Q) {
455 *P << t, a[1], 0;
456 *Q = S + (*P);
457 }
458
459
1/2
✓ Branch 1 taken 35712 times.
✗ Branch 2 not taken.
35712 return S.norm();
460 }
461 }
462
463 // UA0, LB1
464
465
4/4
✓ Branch 0 taken 110765 times.
✓ Branch 1 taken 94502 times.
✓ Branch 2 taken 45252 times.
✓ Branch 3 taken 65513 times.
205267 if ((UA0_lx < 0) && (LB1_uy > a[1])) {
466
3/4
✓ Branch 1 taken 16277 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6959 times.
✓ Branch 4 taken 9318 times.
16277 if (((UA0_ux < 0) || inVoronoi(b[1], a[0], -A0_dot_B0, Tba[0] - aA1_dot_B0,
467
7/10
✓ Branch 0 taken 16277 times.
✓ Branch 1 taken 28975 times.
✓ Branch 3 taken 16277 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16277 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 16277 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 34359 times.
✓ Branch 12 taken 10893 times.
90504 A0_dot_B1, aA1_dot_B1 - Tba[1], -Tab[0])) &&
468
2/2
✓ Branch 0 taken 5178 times.
✓ Branch 1 taken 30756 times.
35934 ((LB1_ly > a[1]) ||
469
4/6
✓ Branch 1 taken 5178 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5178 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3603 times.
✓ Branch 7 taken 1575 times.
5178 inVoronoi(a[0], b[1], A1_dot_B1, Tab[1] - a[1], A0_dot_B1, Tab[0],
470
2/4
✓ Branch 1 taken 5178 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5178 times.
✗ Branch 5 not taken.
5178 Tba[1] - aA1_dot_B1))) {
471
3/6
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34359 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34359 times.
✗ Branch 8 not taken.
34359 segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0], Tba[1] - aA1_dot_B1);
472
473
3/6
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34359 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34359 times.
✗ Branch 8 not taken.
34359 S[0] = Tab[0] + Rab(0, 1) * u - t;
474
3/6
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34359 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34359 times.
✗ Branch 8 not taken.
34359 S[1] = Tab[1] + Rab(1, 1) * u - a[1];
475
3/6
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34359 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34359 times.
✗ Branch 8 not taken.
34359 S[2] = Tab[2] + Rab(2, 1) * u;
476
477
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
34359 if (P && Q) {
478 *P << t, a[1], 0;
479 *Q = S + (*P);
480 }
481
482
1/2
✓ Branch 1 taken 34359 times.
✗ Branch 2 not taken.
34359 return S.norm();
483 }
484 }
485
486 // LA0, UB1
487
488
4/4
✓ Branch 0 taken 94233 times.
✓ Branch 1 taken 76675 times.
✓ Branch 2 taken 63688 times.
✓ Branch 3 taken 30545 times.
170908 if ((LA0_ux > b[0]) && (UB1_ly < 0)) {
489 145462 if (((LA0_lx > b[0]) ||
490
4/6
✓ Branch 1 taken 18086 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18086 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8780 times.
✓ Branch 7 taken 9306 times.
18086 inVoronoi(b[1], a[0], A0_dot_B0, -b[0] - Tba[0], A0_dot_B1, -Tba[1],
491
8/10
✓ Branch 0 taken 18086 times.
✓ Branch 1 taken 45602 times.
✓ Branch 3 taken 18086 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18086 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 5635 times.
✓ Branch 9 taken 48747 times.
✓ Branch 10 taken 52411 times.
✓ Branch 11 taken 11277 times.
87409 -bA0_dot_B0 - Tab[0])) &&
492
3/4
✓ Branch 1 taken 5635 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3664 times.
✓ Branch 4 taken 1971 times.
5635 ((UB1_uy < 0) || inVoronoi(a[0], b[1], -A1_dot_B1, -Tab[1] - bA1_dot_B0,
493
3/6
✓ Branch 1 taken 5635 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5635 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5635 times.
✗ Branch 8 not taken.
5635 A0_dot_B1, Tab[0] + bA0_dot_B0, Tba[1]))) {
494
3/6
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52411 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52411 times.
✗ Branch 8 not taken.
52411 segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0, Tba[1]);
495
496
4/8
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52411 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52411 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52411 times.
✗ Branch 11 not taken.
52411 S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - t;
497
4/8
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52411 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52411 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52411 times.
✗ Branch 11 not taken.
52411 S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u;
498
4/8
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52411 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52411 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52411 times.
✗ Branch 11 not taken.
52411 S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u;
499
500
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
52411 if (P && Q) {
501 *P << t, 0, 0;
502 *Q = S + (*P);
503 }
504
505
1/2
✓ Branch 1 taken 52411 times.
✗ Branch 2 not taken.
52411 return S.norm();
506 }
507 }
508
509 // LA0, LB1
510
511
4/4
✓ Branch 0 taken 78410 times.
✓ Branch 1 taken 40087 times.
✓ Branch 2 taken 42805 times.
✓ Branch 3 taken 35605 times.
118497 if ((LA0_lx < 0) && (LB1_ly < 0)) {
512
3/4
✓ Branch 1 taken 15444 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8466 times.
✓ Branch 4 taken 6978 times.
15444 if (((LA0_ux < 0) || inVoronoi(b[1], a[0], -A0_dot_B0, Tba[0], A0_dot_B1,
513
9/12
✓ Branch 0 taken 15444 times.
✓ Branch 1 taken 27361 times.
✓ Branch 3 taken 15444 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15444 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 15444 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 3729 times.
✓ Branch 12 taken 32098 times.
✓ Branch 13 taken 33703 times.
✓ Branch 14 taken 9102 times.
61978 -Tba[1], -Tab[0])) &&
514
3/4
✓ Branch 1 taken 3729 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1605 times.
✓ Branch 4 taken 2124 times.
3729 ((LB1_uy < 0) || inVoronoi(a[0], b[1], -A1_dot_B1, -Tab[1], A0_dot_B1,
515
3/6
✓ Branch 1 taken 3729 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3729 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3729 times.
✗ Branch 8 not taken.
3729 Tab[0], Tba[1]))) {
516
3/6
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33703 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33703 times.
✗ Branch 8 not taken.
33703 segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0], Tba[1]);
517
518
3/6
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33703 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33703 times.
✗ Branch 8 not taken.
33703 S[0] = Tab[0] + Rab(0, 1) * u - t;
519
3/6
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33703 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33703 times.
✗ Branch 8 not taken.
33703 S[1] = Tab[1] + Rab(1, 1) * u;
520
3/6
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33703 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33703 times.
✗ Branch 8 not taken.
33703 S[2] = Tab[2] + Rab(2, 1) * u;
521
522
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
33703 if (P && Q) {
523 *P << t, 0, 0;
524 *Q = S + (*P);
525 }
526
527
1/2
✓ Branch 1 taken 33703 times.
✗ Branch 2 not taken.
33703 return S.norm();
528 }
529 }
530
531 Scalar LA0_ly, LA0_uy, UA0_ly, UA0_uy, LB0_ly, LB0_uy, UB0_ly, UB0_uy;
532
533
2/2
✓ Branch 0 taken 42846 times.
✓ Branch 1 taken 41948 times.
84794 if (ALL_y < AUL_y) {
534 42846 LA0_ly = ALL_y;
535 42846 LA0_uy = AUL_y;
536 42846 UA0_ly = ALU_y;
537 42846 UA0_uy = AUU_y;
538 } else {
539 41948 LA0_ly = AUL_y;
540 41948 LA0_uy = ALL_y;
541 41948 UA0_ly = AUU_y;
542 41948 UA0_uy = ALU_y;
543 }
544
545
2/2
✓ Branch 0 taken 43447 times.
✓ Branch 1 taken 41347 times.
84794 if (BLL_y < BUL_y) {
546 43447 LB0_ly = BLL_y;
547 43447 LB0_uy = BUL_y;
548 43447 UB0_ly = BLU_y;
549 43447 UB0_uy = BUU_y;
550 } else {
551 41347 LB0_ly = BUL_y;
552 41347 LB0_uy = BLL_y;
553 41347 UB0_ly = BUU_y;
554 41347 UB0_uy = BLU_y;
555 }
556
557 // UA0, UB0
558
559
4/4
✓ Branch 0 taken 51091 times.
✓ Branch 1 taken 33703 times.
✓ Branch 2 taken 18323 times.
✓ Branch 3 taken 32768 times.
84794 if ((UA0_uy > b[1]) && (UB0_uy > a[1])) {
560 50105 if (((UA0_ly > b[1]) ||
561
3/4
✓ Branch 1 taken 13459 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5692 times.
✓ Branch 4 taken 7767 times.
13459 inVoronoi(b[0], a[0], A0_dot_B1, aA1_dot_B1 - Tba[1] - b[1], A0_dot_B0,
562
7/10
✓ Branch 0 taken 13459 times.
✓ Branch 1 taken 4864 times.
✓ Branch 3 taken 13459 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 13459 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13459 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 4410 times.
✓ Branch 12 taken 13913 times.
36646 aA1_dot_B0 - Tba[0], -Tab[0] - bA0_dot_B1)) &&
563
2/2
✓ Branch 0 taken 8357 times.
✓ Branch 1 taken 2199 times.
10556 ((UB0_ly > a[1]) ||
564
3/4
✓ Branch 1 taken 8357 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2211 times.
✓ Branch 4 taken 6146 times.
8357 inVoronoi(a[0], b[0], A1_dot_B0, Tab[1] - a[1] + bA1_dot_B1, A0_dot_B0,
565
3/6
✓ Branch 1 taken 8357 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8357 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8357 times.
✗ Branch 8 not taken.
8357 Tab[0] + bA0_dot_B1, Tba[0] - aA1_dot_B0))) {
566
1/2
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
4410 segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0] + bA0_dot_B1,
567
2/4
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4410 times.
✗ Branch 5 not taken.
4410 Tba[0] - aA1_dot_B0);
568
569
4/8
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4410 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4410 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4410 times.
✗ Branch 11 not taken.
4410 S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - t;
570
4/8
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4410 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4410 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4410 times.
✗ Branch 11 not taken.
4410 S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - a[1];
571
4/8
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4410 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4410 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4410 times.
✗ Branch 11 not taken.
4410 S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u;
572
573
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4410 if (P && Q) {
574 *P << t, a[1], 0;
575 *Q = S + (*P);
576 }
577
578
1/2
✓ Branch 1 taken 4410 times.
✗ Branch 2 not taken.
4410 return S.norm();
579 }
580 }
581
582 // UA0, LB0
583
584
4/4
✓ Branch 0 taken 46407 times.
✓ Branch 1 taken 33977 times.
✓ Branch 2 taken 17082 times.
✓ Branch 3 taken 29325 times.
80384 if ((UA0_ly < 0) && (LB0_uy > a[1])) {
585
3/4
✓ Branch 1 taken 9784 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4211 times.
✓ Branch 4 taken 5573 times.
9784 if (((UA0_uy < 0) || inVoronoi(b[0], a[0], -A0_dot_B1, Tba[1] - aA1_dot_B1,
586
7/10
✓ Branch 0 taken 9784 times.
✓ Branch 1 taken 7298 times.
✓ Branch 3 taken 9784 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9784 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 9784 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 7838 times.
✓ Branch 12 taken 9244 times.
34164 A0_dot_B0, aA1_dot_B0 - Tba[0], -Tab[0])) &&
587
2/2
✓ Branch 0 taken 5955 times.
✓ Branch 1 taken 5554 times.
11509 ((LB0_ly > a[1]) ||
588
4/6
✓ Branch 1 taken 5955 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5955 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2284 times.
✓ Branch 7 taken 3671 times.
5955 inVoronoi(a[0], b[0], A1_dot_B0, Tab[1] - a[1], A0_dot_B0, Tab[0],
589
2/4
✓ Branch 1 taken 5955 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5955 times.
✗ Branch 5 not taken.
5955 Tba[0] - aA1_dot_B0))) {
590
3/6
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7838 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7838 times.
✗ Branch 8 not taken.
7838 segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0], Tba[0] - aA1_dot_B0);
591
592
3/6
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7838 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7838 times.
✗ Branch 8 not taken.
7838 S[0] = Tab[0] + Rab(0, 0) * u - t;
593
3/6
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7838 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7838 times.
✗ Branch 8 not taken.
7838 S[1] = Tab[1] + Rab(1, 0) * u - a[1];
594
3/6
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7838 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7838 times.
✗ Branch 8 not taken.
7838 S[2] = Tab[2] + Rab(2, 0) * u;
595
596
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
7838 if (P && Q) {
597 *P << t, a[1], 0;
598 *Q = S + (*P);
599 }
600
601
1/2
✓ Branch 1 taken 7838 times.
✗ Branch 2 not taken.
7838 return S.norm();
602 }
603 }
604
605 // LA0, UB0
606
607
4/4
✓ Branch 0 taken 43747 times.
✓ Branch 1 taken 28799 times.
✓ Branch 2 taken 14685 times.
✓ Branch 3 taken 29062 times.
72546 if ((LA0_uy > b[1]) && (UB0_ly < 0)) {
608 40166 if (((LA0_ly > b[1]) ||
609
4/6
✓ Branch 1 taken 10796 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10796 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4687 times.
✓ Branch 7 taken 6109 times.
10796 inVoronoi(b[0], a[0], A0_dot_B1, -Tba[1] - b[1], A0_dot_B0, -Tba[0],
610
8/10
✓ Branch 0 taken 10796 times.
✓ Branch 1 taken 3889 times.
✓ Branch 3 taken 10796 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10796 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 6315 times.
✓ Branch 9 taken 2261 times.
✓ Branch 10 taken 4894 times.
✓ Branch 11 taken 9791 times.
31796 -Tab[0] - bA0_dot_B1)) &&
611
612
3/4
✓ Branch 1 taken 6315 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2633 times.
✓ Branch 4 taken 3682 times.
6315 ((UB0_uy < 0) || inVoronoi(a[0], b[0], -A1_dot_B0, -Tab[1] - bA1_dot_B1,
613
3/6
✓ Branch 1 taken 6315 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6315 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6315 times.
✗ Branch 8 not taken.
6315 A0_dot_B0, Tab[0] + bA0_dot_B1, Tba[0]))) {
614
3/6
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4894 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4894 times.
✗ Branch 8 not taken.
4894 segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0] + bA0_dot_B1, Tba[0]);
615
616
4/8
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4894 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4894 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4894 times.
✗ Branch 11 not taken.
4894 S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - t;
617
4/8
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4894 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4894 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4894 times.
✗ Branch 11 not taken.
4894 S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u;
618
4/8
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4894 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4894 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4894 times.
✗ Branch 11 not taken.
4894 S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u;
619
620
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
4894 if (P && Q) {
621 *P << t, 0, 0;
622 *Q = S + (*P);
623 }
624
625
1/2
✓ Branch 1 taken 4894 times.
✗ Branch 2 not taken.
4894 return S.norm();
626 }
627 }
628
629 // LA0, LB0
630
631
4/4
✓ Branch 0 taken 39468 times.
✓ Branch 1 taken 28184 times.
✓ Branch 2 taken 11573 times.
✓ Branch 3 taken 27895 times.
67652 if ((LA0_ly < 0) && (LB0_ly < 0)) {
632
3/4
✓ Branch 1 taken 8570 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3767 times.
✓ Branch 4 taken 4803 times.
8570 if (((LA0_uy < 0) || inVoronoi(b[0], a[0], -A0_dot_B1, Tba[1], A0_dot_B0,
633
9/12
✓ Branch 0 taken 8570 times.
✓ Branch 1 taken 3003 times.
✓ Branch 3 taken 8570 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8570 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 8570 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 4939 times.
✓ Branch 12 taken 1831 times.
✓ Branch 13 taken 3343 times.
✓ Branch 14 taken 8230 times.
25082 -Tba[0], -Tab[0])) &&
634
3/4
✓ Branch 1 taken 4939 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1512 times.
✓ Branch 4 taken 3427 times.
4939 ((LB0_uy < 0) || inVoronoi(a[0], b[0], -A1_dot_B0, -Tab[1], A0_dot_B0,
635
3/6
✓ Branch 1 taken 4939 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4939 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4939 times.
✗ Branch 8 not taken.
4939 Tab[0], Tba[0]))) {
636
3/6
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3343 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3343 times.
✗ Branch 8 not taken.
3343 segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0], Tba[0]);
637
638
3/6
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3343 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3343 times.
✗ Branch 8 not taken.
3343 S[0] = Tab[0] + Rab(0, 0) * u - t;
639
3/6
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3343 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3343 times.
✗ Branch 8 not taken.
3343 S[1] = Tab[1] + Rab(1, 0) * u;
640
3/6
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3343 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3343 times.
✗ Branch 8 not taken.
3343 S[2] = Tab[2] + Rab(2, 0) * u;
641
642
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
3343 if (P && Q) {
643 *P << t, 0, 0;
644 *Q = S + (*P);
645 }
646
647
1/2
✓ Branch 1 taken 3343 times.
✗ Branch 2 not taken.
3343 return S.norm();
648 }
649 }
650
651 // no edges passed, take max separation along face normals
652
653 Scalar sep1, sep2;
654
655
3/4
✓ Branch 1 taken 64309 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 33718 times.
✓ Branch 4 taken 30591 times.
64309 if (Tab[2] > 0.0) {
656
1/2
✓ Branch 1 taken 33718 times.
✗ Branch 2 not taken.
33718 sep1 = Tab[2];
657
4/6
✓ Branch 1 taken 33718 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 20088 times.
✓ Branch 4 taken 13630 times.
✓ Branch 6 taken 20088 times.
✗ Branch 7 not taken.
33718 if (Rab(2, 0) < 0.0) sep1 += b[0] * Rab(2, 0);
658
4/6
✓ Branch 1 taken 33718 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18531 times.
✓ Branch 4 taken 15187 times.
✓ Branch 6 taken 18531 times.
✗ Branch 7 not taken.
33718 if (Rab(2, 1) < 0.0) sep1 += b[1] * Rab(2, 1);
659 } else {
660
1/2
✓ Branch 1 taken 30591 times.
✗ Branch 2 not taken.
30591 sep1 = -Tab[2];
661
4/6
✓ Branch 1 taken 30591 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18262 times.
✓ Branch 4 taken 12329 times.
✓ Branch 6 taken 18262 times.
✗ Branch 7 not taken.
30591 if (Rab(2, 0) > 0.0) sep1 -= b[0] * Rab(2, 0);
662
4/6
✓ Branch 1 taken 30591 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17230 times.
✓ Branch 4 taken 13361 times.
✓ Branch 6 taken 17230 times.
✗ Branch 7 not taken.
30591 if (Rab(2, 1) > 0.0) sep1 -= b[1] * Rab(2, 1);
663 }
664
665
3/4
✓ Branch 1 taken 64309 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 33451 times.
✓ Branch 4 taken 30858 times.
64309 if (Tba[2] < 0) {
666
1/2
✓ Branch 1 taken 33451 times.
✗ Branch 2 not taken.
33451 sep2 = -Tba[2];
667
4/6
✓ Branch 1 taken 33451 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23276 times.
✓ Branch 4 taken 10175 times.
✓ Branch 6 taken 23276 times.
✗ Branch 7 not taken.
33451 if (Rab(0, 2) < 0.0) sep2 += a[0] * Rab(0, 2);
668
4/6
✓ Branch 1 taken 33451 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 19971 times.
✓ Branch 4 taken 13480 times.
✓ Branch 6 taken 19971 times.
✗ Branch 7 not taken.
33451 if (Rab(1, 2) < 0.0) sep2 += a[1] * Rab(1, 2);
669 } else {
670
1/2
✓ Branch 1 taken 30858 times.
✗ Branch 2 not taken.
30858 sep2 = Tba[2];
671
4/6
✓ Branch 1 taken 30858 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23189 times.
✓ Branch 4 taken 7669 times.
✓ Branch 6 taken 23189 times.
✗ Branch 7 not taken.
30858 if (Rab(0, 2) > 0.0) sep2 -= a[0] * Rab(0, 2);
672
4/6
✓ Branch 1 taken 30858 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18719 times.
✓ Branch 4 taken 12139 times.
✓ Branch 6 taken 18719 times.
✗ Branch 7 not taken.
30858 if (Rab(1, 2) > 0.0) sep2 -= a[1] * Rab(1, 2);
673 }
674
675
4/4
✓ Branch 0 taken 44159 times.
✓ Branch 1 taken 20150 times.
✓ Branch 2 taken 34073 times.
✓ Branch 3 taken 10086 times.
64309 if (sep1 >= sep2 && sep1 >= 0) {
676
3/4
✓ Branch 1 taken 34073 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17424 times.
✓ Branch 4 taken 16649 times.
34073 if (Tab[2] > 0)
677
3/6
✓ Branch 1 taken 17424 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17424 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 17424 times.
✗ Branch 8 not taken.
17424 S << 0, 0, sep1;
678 else
679
3/6
✓ Branch 1 taken 16649 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 16649 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 16649 times.
✗ Branch 8 not taken.
16649 S << 0, 0, -sep1;
680
681
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 34073 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
34073 if (P && Q) {
682 *Q = S;
683 P->setZero();
684 }
685 }
686
687
4/4
✓ Branch 0 taken 20315 times.
✓ Branch 1 taken 43994 times.
✓ Branch 2 taken 15229 times.
✓ Branch 3 taken 5086 times.
64309 if (sep2 >= sep1 && sep2 >= 0) {
688
4/8
✓ Branch 1 taken 15229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15229 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15229 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 15229 times.
✗ Branch 11 not taken.
15229 Vec3s Q_(Tab[0], Tab[1], Tab[2]);
689
1/2
✓ Branch 1 taken 15229 times.
✗ Branch 2 not taken.
15229 Vec3s P_;
690
3/4
✓ Branch 1 taken 15229 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8618 times.
✓ Branch 4 taken 6611 times.
15229 if (Tba[2] < 0) {
691
3/6
✓ Branch 1 taken 8618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8618 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8618 times.
✗ Branch 8 not taken.
8618 P_[0] = Rab(0, 2) * sep2 + Tab[0];
692
3/6
✓ Branch 1 taken 8618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8618 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8618 times.
✗ Branch 8 not taken.
8618 P_[1] = Rab(1, 2) * sep2 + Tab[1];
693
3/6
✓ Branch 1 taken 8618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8618 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8618 times.
✗ Branch 8 not taken.
8618 P_[2] = Rab(2, 2) * sep2 + Tab[2];
694 } else {
695
3/6
✓ Branch 1 taken 6611 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6611 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6611 times.
✗ Branch 8 not taken.
6611 P_[0] = -Rab(0, 2) * sep2 + Tab[0];
696
3/6
✓ Branch 1 taken 6611 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6611 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6611 times.
✗ Branch 8 not taken.
6611 P_[1] = -Rab(1, 2) * sep2 + Tab[1];
697
3/6
✓ Branch 1 taken 6611 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6611 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6611 times.
✗ Branch 8 not taken.
6611 P_[2] = -Rab(2, 2) * sep2 + Tab[2];
698 }
699
700
2/4
✓ Branch 1 taken 15229 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15229 times.
✗ Branch 5 not taken.
15229 S = Q_ - P_;
701
702
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 15229 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
15229 if (P && Q) {
703 *P = P_;
704 *Q = Q_;
705 }
706 }
707
708
2/2
✓ Branch 0 taken 43994 times.
✓ Branch 1 taken 20315 times.
64309 Scalar sep = (sep1 > sep2 ? sep1 : sep2);
709
2/2
✓ Branch 0 taken 49135 times.
✓ Branch 1 taken 15174 times.
64309 return (sep > 0 ? sep : 0);
710 }
711
712 15645 bool RSS::overlap(const RSS& other) const {
713 /// compute what transform [R,T] that takes us from cs1 to cs2.
714 /// [R,T] = [R1,T1]'[R2,T2] = [R1',-R1'T][R2,T2] = [R1'R2, R1'(T2-T1)]
715 /// First compute the rotation part, then translation part
716
717 /// Then compute R1'(T2 - T1)
718
4/8
✓ Branch 1 taken 15645 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15645 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15645 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 15645 times.
✗ Branch 11 not taken.
15645 Vec3s T(axes.transpose() * (other.Tr - Tr));
719
720 /// Now compute R1'R2
721
3/6
✓ Branch 1 taken 15645 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15645 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15645 times.
✗ Branch 8 not taken.
15645 Matrix3s R(axes.transpose() * other.axes);
722
723
1/2
✓ Branch 1 taken 15645 times.
✗ Branch 2 not taken.
15645 Scalar dist = rectDistance(R, T, length, other.length);
724 15645 return (dist <= (radius + other.radius));
725 }
726
727 bool overlap(const Matrix3s& R0, const Vec3s& T0, const RSS& b1,
728 const RSS& b2) {
729 // ROb2 = R0 . b2
730 // where b2 = [ b2.axis [0] | b2.axis [1] | b2.axis [2] ]
731
732 // (1 0 0)^T R0b2^T axis [0] = (1 0 0)^T b2^T R0^T axis [0]
733 // R = b2^T RO^T b1
734 Vec3s Ttemp(R0.transpose() * (b2.Tr - T0) - b1.Tr);
735 Vec3s T(b1.axes.transpose() * Ttemp);
736 Matrix3s R(b1.axes.transpose() * R0.transpose() * b2.axes);
737
738 Scalar dist = rectDistance(R, T, b1.length, b2.length);
739 return (dist <= (b1.radius + b2.radius));
740 }
741
742 9048 bool overlap(const Matrix3s& R0, const Vec3s& T0, const RSS& b1, const RSS& b2,
743 const CollisionRequest& request, Scalar& sqrDistLowerBound) {
744 // ROb2 = R0 . b2
745 // where b2 = [ b2.axis [0] | b2.axis [1] | b2.axis [2] ]
746
747 // (1 0 0)^T R0b2^T axis [0] = (1 0 0)^T b2^T R0^T axis [0]
748 // R = b2^T RO^T b1
749
5/10
✓ Branch 1 taken 9048 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9048 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9048 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9048 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 9048 times.
✗ Branch 14 not taken.
9048 Vec3s Ttemp(R0.transpose() * (b2.Tr - T0) - b1.Tr);
750
3/6
✓ Branch 1 taken 9048 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9048 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9048 times.
✗ Branch 8 not taken.
9048 Vec3s T(b1.axes.transpose() * Ttemp);
751
5/10
✓ Branch 1 taken 9048 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9048 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9048 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9048 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 9048 times.
✗ Branch 14 not taken.
9048 Matrix3s R(b1.axes.transpose() * R0.transpose() * b2.axes);
752
753
1/2
✓ Branch 1 taken 9048 times.
✗ Branch 2 not taken.
9048 Scalar dist = rectDistance(R, T, b1.length, b2.length) - b1.radius -
754 9048 b2.radius - request.security_margin;
755
2/2
✓ Branch 0 taken 5096 times.
✓ Branch 1 taken 3952 times.
9048 if (dist <= 0) return true;
756 3952 sqrDistLowerBound = dist * dist;
757 3952 return false;
758 }
759
760 bool RSS::contain(const Vec3s& p) const {
761 Vec3s local_p = p - Tr;
762 // FIXME: Vec3s proj (axes.transpose() * local_p);
763 Scalar proj0 = local_p.dot(axes.col(0));
764 Scalar proj1 = local_p.dot(axes.col(1));
765 Scalar proj2 = local_p.dot(axes.col(2));
766 Scalar abs_proj2 = fabs(proj2);
767 Vec3s proj(proj0, proj1, proj2);
768
769 /// projection is within the rectangle
770 if ((proj0 < length[0]) && (proj0 > 0) && (proj1 < length[1]) &&
771 (proj1 > 0)) {
772 return (abs_proj2 < radius);
773 } else if ((proj0 < length[0]) && (proj0 > 0) &&
774 ((proj1 < 0) || (proj1 > length[1]))) {
775 Scalar y = (proj1 > 0) ? length[1] : 0;
776 Vec3s v(proj0, y, 0);
777 return ((proj - v).squaredNorm() < radius * radius);
778 } else if ((proj1 < length[1]) && (proj1 > 0) &&
779 ((proj0 < 0) || (proj0 > length[0]))) {
780 Scalar x = (proj0 > 0) ? length[0] : 0;
781 Vec3s v(x, proj1, 0);
782 return ((proj - v).squaredNorm() < radius * radius);
783 } else {
784 Scalar x = (proj0 > 0) ? length[0] : 0;
785 Scalar y = (proj1 > 0) ? length[1] : 0;
786 Vec3s v(x, y, 0);
787 return ((proj - v).squaredNorm() < radius * radius);
788 }
789 }
790
791 RSS& RSS::operator+=(const Vec3s& p) {
792 Vec3s local_p = p - Tr;
793 Scalar proj0 = local_p.dot(axes.col(0));
794 Scalar proj1 = local_p.dot(axes.col(1));
795 Scalar proj2 = local_p.dot(axes.col(2));
796 Scalar abs_proj2 = fabs(proj2);
797 Vec3s proj(proj0, proj1, proj2);
798
799 // projection is within the rectangle
800 if ((proj0 < length[0]) && (proj0 > 0) && (proj1 < length[1]) &&
801 (proj1 > 0)) {
802 if (abs_proj2 < radius)
803 ; // do nothing
804 else {
805 const Scalar half = Scalar(0.5);
806 radius = half * (radius + abs_proj2); // enlarge the r
807 // change RSS origin position
808 if (proj2 > 0)
809 Tr[2] += half * (abs_proj2 - radius);
810 else
811 Tr[2] -= half * (abs_proj2 - radius);
812 }
813 } else if ((proj0 < length[0]) && (proj0 > 0) &&
814 ((proj1 < 0) || (proj1 > length[1]))) {
815 Scalar y = (proj1 > 0) ? length[1] : 0;
816 Vec3s v(proj0, y, 0);
817 Scalar new_r_sqr = (proj - v).squaredNorm();
818 if (new_r_sqr < radius * radius)
819 ; // do nothing
820 else {
821 if (abs_proj2 < radius) {
822 Scalar delta_y =
823 -std::sqrt(radius * radius - proj2 * proj2) + fabs(proj1 - y);
824 length[1] += delta_y;
825 if (proj1 < 0) Tr[1] -= delta_y;
826 } else {
827 Scalar delta_y = fabs(proj1 - y);
828 length[1] += delta_y;
829 if (proj1 < 0) Tr[1] -= delta_y;
830
831 const Scalar half = Scalar(0.5);
832 if (proj2 > 0)
833 Tr[2] += half * (abs_proj2 - radius);
834 else
835 Tr[2] -= half * (abs_proj2 - radius);
836 }
837 }
838 } else if ((proj1 < length[1]) && (proj1 > 0) &&
839 ((proj0 < 0) || (proj0 > length[0]))) {
840 Scalar x = (proj0 > 0) ? length[0] : 0;
841 Vec3s v(x, proj1, 0);
842 Scalar new_r_sqr = (proj - v).squaredNorm();
843 if (new_r_sqr < radius * radius)
844 ; // do nothing
845 else {
846 if (abs_proj2 < radius) {
847 Scalar delta_x =
848 -std::sqrt(radius * radius - proj2 * proj2) + fabs(proj0 - x);
849 length[0] += delta_x;
850 if (proj0 < 0) Tr[0] -= delta_x;
851 } else {
852 Scalar delta_x = fabs(proj0 - x);
853 length[0] += delta_x;
854 if (proj0 < 0) Tr[0] -= delta_x;
855
856 const Scalar half = Scalar(0.5);
857 if (proj2 > 0)
858 Tr[2] += half * (abs_proj2 - radius);
859 else
860 Tr[2] -= half * (abs_proj2 - radius);
861 }
862 }
863 } else {
864 Scalar x = (proj0 > 0) ? length[0] : 0;
865 Scalar y = (proj1 > 0) ? length[1] : 0;
866 Vec3s v(x, y, 0);
867 Scalar new_r_sqr = (proj - v).squaredNorm();
868 if (new_r_sqr < radius * radius)
869 ; // do nothing
870 else {
871 if (abs_proj2 < radius) {
872 Scalar diag = std::sqrt(new_r_sqr - proj2 * proj2);
873 Scalar delta_diag = -std::sqrt(radius * radius - proj2 * proj2) + diag;
874
875 Scalar delta_x = delta_diag / diag * fabs(proj0 - x);
876 Scalar delta_y = delta_diag / diag * fabs(proj1 - y);
877 length[0] += delta_x;
878 length[1] += delta_y;
879
880 if (proj0 < 0 && proj1 < 0) {
881 Tr[0] -= delta_x;
882 Tr[1] -= delta_y;
883 }
884 } else {
885 Scalar delta_x = fabs(proj0 - x);
886 Scalar delta_y = fabs(proj1 - y);
887
888 length[0] += delta_x;
889 length[1] += delta_y;
890
891 if (proj0 < 0 && proj1 < 0) {
892 Tr[0] -= delta_x;
893 Tr[1] -= delta_y;
894 }
895
896 const Scalar half = Scalar(0.5);
897 if (proj2 > 0)
898 Tr[2] += half * (abs_proj2 - radius);
899 else
900 Tr[2] -= half * (abs_proj2 - radius);
901 }
902 }
903 }
904
905 return *this;
906 }
907
908 13074 RSS RSS::operator+(const RSS& other) const {
909
1/2
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
13074 RSS bv;
910
911
3/4
✓ Branch 1 taken 209184 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 209184 times.
✓ Branch 4 taken 13074 times.
222258 Vec3s v[16];
912
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d0_pos(other.axes.col(0) * (other.length[0] + other.radius));
913
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d1_pos(other.axes.col(1) * (other.length[1] + other.radius));
914
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d0_neg(other.axes.col(0) * (-other.radius));
915
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d1_neg(other.axes.col(1) * (-other.radius));
916
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d2_pos(other.axes.col(2) * other.radius);
917
3/6
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
13074 Vec3s d2_neg(other.axes.col(2) * (-other.radius));
918
919
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[0].noalias() = other.Tr + d0_pos + d1_pos + d2_pos;
920
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[1].noalias() = other.Tr + d0_pos + d1_pos + d2_neg;
921
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[2].noalias() = other.Tr + d0_pos + d1_neg + d2_pos;
922
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[3].noalias() = other.Tr + d0_pos + d1_neg + d2_neg;
923
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[4].noalias() = other.Tr + d0_neg + d1_pos + d2_pos;
924
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[5].noalias() = other.Tr + d0_neg + d1_pos + d2_neg;
925
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[6].noalias() = other.Tr + d0_neg + d1_neg + d2_pos;
926
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[7].noalias() = other.Tr + d0_neg + d1_neg + d2_neg;
927
928
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d0_pos.noalias() = axes.col(0) * (length[0] + radius);
929
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d1_pos.noalias() = axes.col(1) * (length[1] + radius);
930
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d0_neg.noalias() = axes.col(0) * (-radius);
931
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d1_neg.noalias() = axes.col(1) * (-radius);
932
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d2_pos.noalias() = axes.col(2) * radius;
933
4/8
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
13074 d2_neg.noalias() = axes.col(2) * (-radius);
934
935
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[8].noalias() = Tr + d0_pos + d1_pos + d2_pos;
936
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[9].noalias() = Tr + d0_pos + d1_pos + d2_neg;
937
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[10].noalias() = Tr + d0_pos + d1_neg + d2_pos;
938
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[11].noalias() = Tr + d0_pos + d1_neg + d2_neg;
939
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[12].noalias() = Tr + d0_neg + d1_pos + d2_pos;
940
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[13].noalias() = Tr + d0_neg + d1_pos + d2_neg;
941
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[14].noalias() = Tr + d0_neg + d1_neg + d2_pos;
942
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 v[15].noalias() = Tr + d0_neg + d1_neg + d2_neg;
943
944
1/2
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
13074 Matrix3s M; // row first matrix
945
3/4
✓ Branch 1 taken 39222 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 39222 times.
✓ Branch 4 taken 13074 times.
52296 Vec3s E[3]; // row first eigen-vectors
946 13074 Scalar s[3] = {0, 0, 0};
947
948
1/2
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
13074 getCovariance(v, NULL, NULL, NULL, 16, M);
949
1/2
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
13074 eigen(M, s, E);
950
951 int min, mid, max;
952
2/2
✓ Branch 0 taken 1269 times.
✓ Branch 1 taken 11805 times.
13074 if (s[0] > s[1]) {
953 1269 max = 0;
954 1269 min = 1;
955 } else {
956 11805 min = 0;
957 11805 max = 1;
958 }
959
2/2
✓ Branch 0 taken 5051 times.
✓ Branch 1 taken 8023 times.
13074 if (s[2] < s[min]) {
960 5051 mid = min;
961 5051 min = 2;
962
2/2
✓ Branch 0 taken 916 times.
✓ Branch 1 taken 7107 times.
8023 } else if (s[2] > s[max]) {
963 916 mid = max;
964 916 max = 2;
965 } else {
966 7107 mid = 2;
967 }
968
969 // column first matrix, as the axis in RSS
970
7/14
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 13074 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 13074 times.
✗ Branch 20 not taken.
13074 bv.axes.col(0) << E[0][max], E[1][max], E[2][max];
971
7/14
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 13074 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 13074 times.
✗ Branch 20 not taken.
13074 bv.axes.col(1) << E[0][mid], E[1][mid], E[2][mid];
972
6/12
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 13074 times.
✗ Branch 17 not taken.
13074 bv.axes.col(2) << E[1][max] * E[2][mid] - E[1][mid] * E[2][max],
973
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 E[0][mid] * E[2][max] - E[0][max] * E[2][mid],
974
5/10
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 13074 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 13074 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 13074 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 13074 times.
✗ Branch 14 not taken.
13074 E[0][max] * E[1][mid] - E[0][mid] * E[1][max];
975
976 // set rss origin, rectangle size and radius
977 13074 getRadiusAndOriginAndRectangleSize(v, NULL, NULL, NULL, 16, bv.axes, bv.Tr,
978
1/2
✓ Branch 1 taken 13074 times.
✗ Branch 2 not taken.
13074 bv.length, bv.radius);
979
980 26148 return bv;
981 }
982
983 964 Scalar RSS::distance(const RSS& other, Vec3s* P, Vec3s* Q) const {
984 // compute what transform [R,T] that takes us from cs1 to cs2.
985 // [R,T] = [R1,T1]'[R2,T2] = [R1',-R1'T][R2,T2] = [R1'R2, R1'(T2-T1)]
986 // First compute the rotation part, then translation part
987
3/6
✓ Branch 1 taken 964 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 964 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 964 times.
✗ Branch 8 not taken.
964 Matrix3s R(axes.transpose() * other.axes);
988
4/8
✓ Branch 1 taken 964 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 964 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 964 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 964 times.
✗ Branch 11 not taken.
964 Vec3s T(axes.transpose() * (other.Tr - Tr));
989
990
1/2
✓ Branch 1 taken 964 times.
✗ Branch 2 not taken.
964 Scalar dist = rectDistance(R, T, length, other.length, P, Q);
991 964 dist -= (radius + other.radius);
992
2/2
✓ Branch 0 taken 686 times.
✓ Branch 1 taken 278 times.
964 return (dist < (Scalar)0.0) ? (Scalar)0.0 : dist;
993 }
994
995 1598644 Scalar distance(const Matrix3s& R0, const Vec3s& T0, const RSS& b1,
996 const RSS& b2, Vec3s* P, Vec3s* Q) {
997
4/8
✓ Branch 1 taken 1598644 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1598644 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1598644 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1598644 times.
✗ Branch 11 not taken.
1598644 Matrix3s R(b1.axes.transpose() * R0 * b2.axes);
998
4/8
✓ Branch 1 taken 1598644 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1598644 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1598644 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1598644 times.
✗ Branch 11 not taken.
1598644 Vec3s Ttemp(R0 * b2.Tr + T0 - b1.Tr);
999
1000
3/6
✓ Branch 1 taken 1598644 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1598644 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1598644 times.
✗ Branch 8 not taken.
1598644 Vec3s T(b1.axes.transpose() * Ttemp);
1001
1002
1/2
✓ Branch 1 taken 1598644 times.
✗ Branch 2 not taken.
1598644 Scalar dist = rectDistance(R, T, b1.length, b2.length, P, Q);
1003 1598644 dist -= (b1.radius + b2.radius);
1004
2/2
✓ Branch 0 taken 17786 times.
✓ Branch 1 taken 1580858 times.
1598644 return (dist < (Scalar)0.0) ? (Scalar)0.0 : dist;
1005 }
1006
1007 RSS translate(const RSS& bv, const Vec3s& t) {
1008 RSS res(bv);
1009 res.Tr += t;
1010 return res;
1011 }
1012
1013 } // namespace coal
1014