| 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 | 3707184 | void clipToRange(Scalar& val, Scalar a, Scalar b) { | |
| 49 |
2/2✓ Branch 0 taken 1358723 times.
✓ Branch 1 taken 2348461 times.
|
3707184 | if (val < a) |
| 50 | 1358723 | val = a; | |
| 51 |
2/2✓ Branch 0 taken 1401656 times.
✓ Branch 1 taken 946805 times.
|
2348461 | else if (val > b) |
| 52 | 1401656 | val = b; | |
| 53 | 3707184 | } | |
| 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 | 1551440 | void segCoords(Scalar& t, Scalar& u, Scalar a, Scalar b, Scalar A_dot_B, | |
| 67 | Scalar A_dot_T, Scalar B_dot_T) { | ||
| 68 | 1551440 | Scalar denom = 1 - A_dot_B * A_dot_B; | |
| 69 | |||
| 70 |
2/2✓ Branch 0 taken 91931 times.
✓ Branch 1 taken 1459509 times.
|
1551440 | if (denom == 0) |
| 71 | 91931 | t = 0; | |
| 72 | else { | ||
| 73 | 1459509 | t = (A_dot_T - B_dot_T * A_dot_B) / denom; | |
| 74 | 1459509 | clipToRange(t, 0, a); | |
| 75 | } | ||
| 76 | |||
| 77 | 1551440 | u = t * A_dot_B - B_dot_T; | |
| 78 |
2/2✓ Branch 0 taken 648047 times.
✓ Branch 1 taken 903393 times.
|
1551440 | if (u < 0) { |
| 79 | 648047 | u = 0; | |
| 80 | 648047 | t = A_dot_T; | |
| 81 | 648047 | clipToRange(t, 0, a); | |
| 82 |
2/2✓ Branch 0 taken 683200 times.
✓ Branch 1 taken 220193 times.
|
903393 | } else if (u > b) { |
| 83 | 683200 | u = b; | |
| 84 | 683200 | t = u * A_dot_B + A_dot_T; | |
| 85 | 683200 | clipToRange(t, 0, a); | |
| 86 | } | ||
| 87 | 1551440 | } | |
| 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 | 458244 | 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 458214 times.
|
458244 | if (fabs(Anorm_dot_B) < 1e-7) return false; |
| 97 | |||
| 98 | Scalar t, u, v; | ||
| 99 | |||
| 100 | 458214 | u = -Anorm_dot_T / Anorm_dot_B; | |
| 101 |
1/2✓ Branch 1 taken 458214 times.
✗ Branch 2 not taken.
|
458214 | clipToRange(u, 0, b); |
| 102 | |||
| 103 | 458214 | t = u * A_dot_B + A_dot_T; | |
| 104 |
1/2✓ Branch 1 taken 458214 times.
✗ Branch 2 not taken.
|
458214 | clipToRange(t, 0, a); |
| 105 | |||
| 106 | 458214 | v = t * A_dot_B - B_dot_T; | |
| 107 | |||
| 108 |
2/2✓ Branch 0 taken 227610 times.
✓ Branch 1 taken 230604 times.
|
458214 | if (Anorm_dot_B > 0) { |
| 109 |
2/2✓ Branch 0 taken 98701 times.
✓ Branch 1 taken 128909 times.
|
227610 | if (v > (u + 1e-7)) return true; |
| 110 | } else { | ||
| 111 |
2/2✓ Branch 0 taken 85962 times.
✓ Branch 1 taken 144642 times.
|
230604 | if (v < (u - 1e-7)) return true; |
| 112 | } | ||
| 113 | 273551 | 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 | 1615643 | 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 1615643 times.
✗ Branch 2 not taken.
|
1615643 | A0_dot_B0 = Rab(0, 0); |
| 124 |
1/2✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
|
1615643 | A0_dot_B1 = Rab(0, 1); |
| 125 |
1/2✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
|
1615643 | A1_dot_B0 = Rab(1, 0); |
| 126 |
1/2✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
|
1615643 | 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 | 1615643 | aA0_dot_B0 = a[0] * A0_dot_B0; | |
| 132 | 1615643 | aA0_dot_B1 = a[0] * A0_dot_B1; | |
| 133 | 1615643 | aA1_dot_B0 = a[1] * A1_dot_B0; | |
| 134 | 1615643 | aA1_dot_B1 = a[1] * A1_dot_B1; | |
| 135 | 1615643 | bA0_dot_B0 = b[0] * A0_dot_B0; | |
| 136 | 1615643 | bA1_dot_B0 = b[0] * A1_dot_B0; | |
| 137 | 1615643 | bA0_dot_B1 = b[1] * A0_dot_B1; | |
| 138 | 1615643 | bA1_dot_B1 = b[1] * A1_dot_B1; | |
| 139 | |||
| 140 |
3/6✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1615643 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1615643 times.
✗ Branch 8 not taken.
|
1615643 | Vec3s Tba(Rab.transpose() * Tab); |
| 141 | |||
| 142 |
1/2✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
|
1615643 | 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 1615643 times.
✗ Branch 2 not taken.
|
1615643 | ALL_x = -Tba[0]; |
| 152 | 1615643 | ALU_x = ALL_x + aA1_dot_B0; | |
| 153 | 1615643 | AUL_x = ALL_x + aA0_dot_B0; | |
| 154 | 1615643 | AUU_x = ALU_x + aA0_dot_B0; | |
| 155 | |||
| 156 |
2/2✓ Branch 0 taken 855394 times.
✓ Branch 1 taken 760249 times.
|
1615643 | if (ALL_x < ALU_x) { |
| 157 | 855394 | LA1_lx = ALL_x; | |
| 158 | 855394 | LA1_ux = ALU_x; | |
| 159 | 855394 | UA1_lx = AUL_x; | |
| 160 | 855394 | UA1_ux = AUU_x; | |
| 161 | } else { | ||
| 162 | 760249 | LA1_lx = ALU_x; | |
| 163 | 760249 | LA1_ux = ALL_x; | |
| 164 | 760249 | UA1_lx = AUU_x; | |
| 165 | 760249 | UA1_ux = AUL_x; | |
| 166 | } | ||
| 167 | |||
| 168 |
1/2✓ Branch 1 taken 1615643 times.
✗ Branch 2 not taken.
|
1615643 | BLL_x = Tab[0]; |
| 169 | 1615643 | BLU_x = BLL_x + bA0_dot_B1; | |
| 170 | 1615643 | BUL_x = BLL_x + bA0_dot_B0; | |
| 171 | 1615643 | BUU_x = BLU_x + bA0_dot_B0; | |
| 172 | |||
| 173 |
2/2✓ Branch 0 taken 862565 times.
✓ Branch 1 taken 753078 times.
|
1615643 | if (BLL_x < BLU_x) { |
| 174 | 862565 | LB1_lx = BLL_x; | |
| 175 | 862565 | LB1_ux = BLU_x; | |
| 176 | 862565 | UB1_lx = BUL_x; | |
| 177 | 862565 | UB1_ux = BUU_x; | |
| 178 | } else { | ||
| 179 | 753078 | LB1_lx = BLU_x; | |
| 180 | 753078 | LB1_ux = BLL_x; | |
| 181 | 753078 | UB1_lx = BUU_x; | |
| 182 | 753078 | UB1_ux = BUL_x; | |
| 183 | } | ||
| 184 | |||
| 185 | // UA1, UB1 | ||
| 186 | |||
| 187 |
4/4✓ Branch 0 taken 821379 times.
✓ Branch 1 taken 794264 times.
✓ Branch 2 taken 393773 times.
✓ Branch 3 taken 427606 times.
|
1615643 | if ((UA1_ux > b[0]) && (UB1_ux > a[0])) { |
| 188 | 807914 | if (((UA1_lx > b[0]) || | |
| 189 |
3/4✓ Branch 1 taken 20368 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9558 times.
✓ Branch 4 taken 10810 times.
|
20368 | inVoronoi(b[1], a[1], A1_dot_B0, aA0_dot_B0 - b[0] - Tba[0], A1_dot_B1, |
| 190 |
7/10✓ Branch 0 taken 20368 times.
✓ Branch 1 taken 373405 times.
✓ Branch 3 taken 20368 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 20368 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 20368 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 367088 times.
✓ Branch 12 taken 26685 times.
|
787546 | aA0_dot_B1 - Tba[1], -Tab[1] - bA1_dot_B0)) && |
| 191 |
2/2✓ Branch 0 taken 26605 times.
✓ Branch 1 taken 356358 times.
|
382963 | ((UB1_lx > a[0]) || |
| 192 |
3/4✓ Branch 1 taken 26605 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10730 times.
✓ Branch 4 taken 15875 times.
|
26605 | inVoronoi(a[1], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0 - a[0], A1_dot_B1, |
| 193 |
3/6✓ Branch 1 taken 26605 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 26605 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 26605 times.
✗ Branch 8 not taken.
|
26605 | Tab[1] + bA1_dot_B0, Tba[1] - aA0_dot_B1))) { |
| 194 |
1/2✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
|
367088 | segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1] + bA1_dot_B0, |
| 195 |
2/4✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 367088 times.
✗ Branch 5 not taken.
|
367088 | Tba[1] - aA0_dot_B1); |
| 196 | |||
| 197 |
4/8✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 367088 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 367088 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 367088 times.
✗ Branch 11 not taken.
|
367088 | S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - a[0]; |
| 198 |
4/8✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 367088 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 367088 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 367088 times.
✗ Branch 11 not taken.
|
367088 | S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - t; |
| 199 |
4/8✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 367088 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 367088 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 367088 times.
✗ Branch 11 not taken.
|
367088 | S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u; |
| 200 | |||
| 201 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
367088 | if (P && Q) { |
| 202 | ✗ | *P << a[0], t, 0; | |
| 203 | ✗ | *Q = S + (*P); | |
| 204 | } | ||
| 205 | |||
| 206 |
1/2✓ Branch 1 taken 367088 times.
✗ Branch 2 not taken.
|
367088 | return S.norm(); |
| 207 | } | ||
| 208 | } | ||
| 209 | |||
| 210 | // UA1, LB1 | ||
| 211 | |||
| 212 |
4/4✓ Branch 0 taken 690075 times.
✓ Branch 1 taken 558480 times.
✓ Branch 2 taken 317841 times.
✓ Branch 3 taken 372234 times.
|
1248555 | if ((UA1_lx < 0) && (LB1_ux > a[0])) { |
| 213 |
3/4✓ Branch 1 taken 19936 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7713 times.
✓ Branch 4 taken 12223 times.
|
19936 | if (((UA1_ux < 0) || inVoronoi(b[1], a[1], -A1_dot_B0, Tba[0] - aA0_dot_B0, |
| 214 |
7/10✓ Branch 0 taken 19936 times.
✓ Branch 1 taken 297905 times.
✓ Branch 3 taken 19936 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 19936 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 19936 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 295455 times.
✓ Branch 12 taken 22386 times.
|
635682 | A1_dot_B1, aA0_dot_B1 - Tba[1], -Tab[1])) && |
| 215 |
2/2✓ Branch 0 taken 23086 times.
✓ Branch 1 taken 282532 times.
|
305618 | ((LB1_lx > a[0]) || |
| 216 |
4/6✓ Branch 1 taken 23086 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23086 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 12923 times.
✓ Branch 7 taken 10163 times.
|
23086 | inVoronoi(a[1], b[1], A0_dot_B1, Tab[0] - a[0], A1_dot_B1, Tab[1], |
| 217 |
2/4✓ Branch 1 taken 23086 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23086 times.
✗ Branch 5 not taken.
|
23086 | Tba[1] - aA0_dot_B1))) { |
| 218 |
3/6✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 295455 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 295455 times.
✗ Branch 8 not taken.
|
295455 | segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1], Tba[1] - aA0_dot_B1); |
| 219 | |||
| 220 |
3/6✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 295455 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 295455 times.
✗ Branch 8 not taken.
|
295455 | S[0] = Tab[0] + Rab(0, 1) * u - a[0]; |
| 221 |
3/6✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 295455 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 295455 times.
✗ Branch 8 not taken.
|
295455 | S[1] = Tab[1] + Rab(1, 1) * u - t; |
| 222 |
3/6✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 295455 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 295455 times.
✗ Branch 8 not taken.
|
295455 | S[2] = Tab[2] + Rab(2, 1) * u; |
| 223 | |||
| 224 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295455 | if (P && Q) { |
| 225 | ✗ | *P << a[0], t, 0; | |
| 226 | ✗ | *Q = S + (*P); | |
| 227 | } | ||
| 228 | |||
| 229 |
1/2✓ Branch 1 taken 295455 times.
✗ Branch 2 not taken.
|
295455 | return S.norm(); |
| 230 | } | ||
| 231 | } | ||
| 232 | |||
| 233 | // LA1, UB1 | ||
| 234 | |||
| 235 |
4/4✓ Branch 0 taken 441110 times.
✓ Branch 1 taken 511990 times.
✓ Branch 2 taken 326792 times.
✓ Branch 3 taken 114318 times.
|
953100 | if ((LA1_ux > b[0]) && (UB1_lx < 0)) { |
| 236 | 672533 | if (((LA1_lx > b[0]) || | |
| 237 |
4/6✓ Branch 1 taken 18949 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18949 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9725 times.
✓ Branch 7 taken 9224 times.
|
18949 | inVoronoi(b[1], a[1], A1_dot_B0, -Tba[0] - b[0], A1_dot_B1, -Tba[1], |
| 238 |
8/10✓ Branch 0 taken 18949 times.
✓ Branch 1 taken 307843 times.
✓ Branch 3 taken 18949 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18949 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 26217 times.
✓ Branch 9 taken 291351 times.
✓ Branch 10 taken 305325 times.
✓ Branch 11 taken 21467 times.
|
371958 | -Tab[1] - bA1_dot_B0)) && |
| 239 |
3/4✓ Branch 1 taken 26217 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 13974 times.
✓ Branch 4 taken 12243 times.
|
26217 | ((UB1_ux < 0) || inVoronoi(a[1], b[1], -A0_dot_B1, -Tab[0] - bA0_dot_B0, |
| 240 |
3/6✓ Branch 1 taken 26217 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 26217 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 26217 times.
✗ Branch 8 not taken.
|
26217 | A1_dot_B1, Tab[1] + bA1_dot_B0, Tba[1]))) { |
| 241 |
3/6✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 305325 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 305325 times.
✗ Branch 8 not taken.
|
305325 | segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1] + bA1_dot_B0, Tba[1]); |
| 242 | |||
| 243 |
4/8✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 305325 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 305325 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 305325 times.
✗ Branch 11 not taken.
|
305325 | S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u; |
| 244 |
4/8✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 305325 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 305325 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 305325 times.
✗ Branch 11 not taken.
|
305325 | S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - t; |
| 245 |
4/8✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 305325 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 305325 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 305325 times.
✗ Branch 11 not taken.
|
305325 | S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u; |
| 246 | |||
| 247 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
305325 | if (P && Q) { |
| 248 | ✗ | *P << 0, t, 0; | |
| 249 | ✗ | *Q = S + (*P); | |
| 250 | } | ||
| 251 | |||
| 252 |
1/2✓ Branch 1 taken 305325 times.
✗ Branch 2 not taken.
|
305325 | return S.norm(); |
| 253 | } | ||
| 254 | } | ||
| 255 | |||
| 256 | // LA1, LB1 | ||
| 257 | |||
| 258 |
4/4✓ Branch 0 taken 413383 times.
✓ Branch 1 taken 234392 times.
✓ Branch 2 taken 303930 times.
✓ Branch 3 taken 109453 times.
|
647775 | if ((LA1_lx < 0) && (LB1_lx < 0)) { |
| 259 |
3/4✓ Branch 1 taken 19014 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6127 times.
✓ Branch 4 taken 12887 times.
|
19014 | if (((LA1_ux < 0) || inVoronoi(b[1], a[1], -A1_dot_B0, Tba[0], A1_dot_B1, |
| 260 |
9/12✓ Branch 0 taken 19014 times.
✓ Branch 1 taken 284916 times.
✓ Branch 3 taken 19014 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 19014 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 19014 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 17412 times.
✓ Branch 12 taken 273631 times.
✓ Branch 13 taken 280859 times.
✓ Branch 14 taken 23071 times.
|
340356 | -Tba[1], -Tab[1])) && |
| 261 |
3/4✓ Branch 1 taken 17412 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7228 times.
✓ Branch 4 taken 10184 times.
|
17412 | ((LB1_ux < 0) || inVoronoi(a[1], b[1], -A0_dot_B1, -Tab[0], A1_dot_B1, |
| 262 |
3/6✓ Branch 1 taken 17412 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17412 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 17412 times.
✗ Branch 8 not taken.
|
17412 | Tab[1], Tba[1]))) { |
| 263 |
3/6✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 280859 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 280859 times.
✗ Branch 8 not taken.
|
280859 | segCoords(t, u, a[1], b[1], A1_dot_B1, Tab[1], Tba[1]); |
| 264 | |||
| 265 |
3/6✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 280859 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 280859 times.
✗ Branch 8 not taken.
|
280859 | S[0] = Tab[0] + Rab(0, 1) * u; |
| 266 |
3/6✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 280859 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 280859 times.
✗ Branch 8 not taken.
|
280859 | S[1] = Tab[1] + Rab(1, 1) * u - t; |
| 267 |
3/6✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 280859 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 280859 times.
✗ Branch 8 not taken.
|
280859 | S[2] = Tab[2] + Rab(2, 1) * u; |
| 268 | |||
| 269 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
280859 | if (P && Q) { |
| 270 | ✗ | *P << 0, t, 0; | |
| 271 | ✗ | *Q = S + (*P); | |
| 272 | } | ||
| 273 | |||
| 274 |
1/2✓ Branch 1 taken 280859 times.
✗ Branch 2 not taken.
|
280859 | return S.norm(); |
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | Scalar ALL_y, ALU_y, AUL_y, AUU_y; | ||
| 279 | |||
| 280 |
1/2✓ Branch 1 taken 366916 times.
✗ Branch 2 not taken.
|
366916 | ALL_y = -Tba[1]; |
| 281 | 366916 | ALU_y = ALL_y + aA1_dot_B1; | |
| 282 | 366916 | AUL_y = ALL_y + aA0_dot_B1; | |
| 283 | 366916 | 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 196274 times.
✓ Branch 1 taken 170642 times.
|
366916 | if (ALL_y < ALU_y) { |
| 288 | 196274 | LA1_ly = ALL_y; | |
| 289 | 196274 | LA1_uy = ALU_y; | |
| 290 | 196274 | UA1_ly = AUL_y; | |
| 291 | 196274 | UA1_uy = AUU_y; | |
| 292 | } else { | ||
| 293 | 170642 | LA1_ly = ALU_y; | |
| 294 | 170642 | LA1_uy = ALL_y; | |
| 295 | 170642 | UA1_ly = AUU_y; | |
| 296 | 170642 | UA1_uy = AUL_y; | |
| 297 | } | ||
| 298 | |||
| 299 |
2/2✓ Branch 0 taken 190265 times.
✓ Branch 1 taken 176651 times.
|
366916 | if (BLL_x < BUL_x) { |
| 300 | 190265 | LB0_lx = BLL_x; | |
| 301 | 190265 | LB0_ux = BUL_x; | |
| 302 | 190265 | UB0_lx = BLU_x; | |
| 303 | 190265 | UB0_ux = BUU_x; | |
| 304 | } else { | ||
| 305 | 176651 | LB0_lx = BUL_x; | |
| 306 | 176651 | LB0_ux = BLL_x; | |
| 307 | 176651 | UB0_lx = BUU_x; | |
| 308 | 176651 | UB0_ux = BLU_x; | |
| 309 | } | ||
| 310 | |||
| 311 | // UA1, UB0 | ||
| 312 | |||
| 313 |
4/4✓ Branch 0 taken 162908 times.
✓ Branch 1 taken 204008 times.
✓ Branch 2 taken 47013 times.
✓ Branch 3 taken 115895 times.
|
366916 | if ((UA1_uy > b[1]) && (UB0_ux > a[0])) { |
| 314 | 100985 | if (((UA1_ly > b[1]) || | |
| 315 |
3/4✓ Branch 1 taken 6959 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3490 times.
✓ Branch 4 taken 3469 times.
|
6959 | inVoronoi(b[0], a[1], A1_dot_B1, aA0_dot_B1 - Tba[1] - b[1], A1_dot_B0, |
| 316 |
7/10✓ Branch 0 taken 6959 times.
✓ Branch 1 taken 40054 times.
✓ Branch 3 taken 6959 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 6959 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 6959 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 18821 times.
✓ Branch 12 taken 28192 times.
|
94026 | aA0_dot_B0 - Tba[0], -Tab[1] - bA1_dot_B1)) && |
| 317 |
2/2✓ Branch 0 taken 28736 times.
✓ Branch 1 taken 14808 times.
|
43544 | ((UB0_lx > a[0]) || |
| 318 |
3/4✓ Branch 1 taken 28736 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4013 times.
✓ Branch 4 taken 24723 times.
|
28736 | inVoronoi(a[1], b[0], A0_dot_B0, Tab[0] - a[0] + bA0_dot_B1, A1_dot_B0, |
| 319 |
3/6✓ Branch 1 taken 28736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 28736 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 28736 times.
✗ Branch 8 not taken.
|
28736 | Tab[1] + bA1_dot_B1, Tba[0] - aA0_dot_B0))) { |
| 320 |
1/2✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
|
18821 | segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1] + bA1_dot_B1, |
| 321 |
2/4✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18821 times.
✗ Branch 5 not taken.
|
18821 | Tba[0] - aA0_dot_B0); |
| 322 | |||
| 323 |
4/8✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18821 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18821 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18821 times.
✗ Branch 11 not taken.
|
18821 | S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - a[0]; |
| 324 |
4/8✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18821 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18821 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18821 times.
✗ Branch 11 not taken.
|
18821 | S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - t; |
| 325 |
4/8✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18821 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 18821 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 18821 times.
✗ Branch 11 not taken.
|
18821 | S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u; |
| 326 | |||
| 327 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
18821 | if (P && Q) { |
| 328 | ✗ | *P << a[0], t, 0; | |
| 329 | ✗ | *Q = S + (*P); | |
| 330 | } | ||
| 331 | |||
| 332 |
1/2✓ Branch 1 taken 18821 times.
✗ Branch 2 not taken.
|
18821 | return S.norm(); |
| 333 | } | ||
| 334 | } | ||
| 335 | |||
| 336 | // UA1, LB0 | ||
| 337 | |||
| 338 |
4/4✓ Branch 0 taken 196778 times.
✓ Branch 1 taken 151317 times.
✓ Branch 2 taken 58541 times.
✓ Branch 3 taken 138237 times.
|
348095 | if ((UA1_ly < 0) && (LB0_ux > a[0])) { |
| 339 |
3/4✓ Branch 1 taken 7891 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4638 times.
✓ Branch 4 taken 3253 times.
|
7891 | if (((UA1_uy < 0) || inVoronoi(b[0], a[1], -A1_dot_B1, Tba[1] - aA0_dot_B1, |
| 340 |
7/10✓ Branch 0 taken 7891 times.
✓ Branch 1 taken 50650 times.
✓ Branch 3 taken 7891 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7891 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 7891 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 36991 times.
✓ Branch 12 taken 21550 times.
|
117082 | A1_dot_B0, aA0_dot_B0 - Tba[0], -Tab[1])) && |
| 341 |
2/2✓ Branch 0 taken 23974 times.
✓ Branch 1 taken 31314 times.
|
55288 | ((LB0_lx > a[0]) || |
| 342 |
4/6✓ Branch 1 taken 23974 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23974 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5677 times.
✓ Branch 7 taken 18297 times.
|
23974 | inVoronoi(a[1], b[0], A0_dot_B0, Tab[0] - a[0], A1_dot_B0, Tab[1], |
| 343 |
2/4✓ Branch 1 taken 23974 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23974 times.
✗ Branch 5 not taken.
|
23974 | Tba[0] - aA0_dot_B0))) { |
| 344 |
3/6✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 36991 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 36991 times.
✗ Branch 8 not taken.
|
36991 | segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1], Tba[0] - aA0_dot_B0); |
| 345 | |||
| 346 |
3/6✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 36991 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 36991 times.
✗ Branch 8 not taken.
|
36991 | S[0] = Tab[0] + Rab(0, 0) * u - a[0]; |
| 347 |
3/6✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 36991 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 36991 times.
✗ Branch 8 not taken.
|
36991 | S[1] = Tab[1] + Rab(1, 0) * u - t; |
| 348 |
3/6✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 36991 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 36991 times.
✗ Branch 8 not taken.
|
36991 | S[2] = Tab[2] + Rab(2, 0) * u; |
| 349 | |||
| 350 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
36991 | if (P && Q) { |
| 351 | ✗ | *P << a[0], t, 0; | |
| 352 | ✗ | *Q = S + (*P); | |
| 353 | } | ||
| 354 | |||
| 355 |
1/2✓ Branch 1 taken 36991 times.
✗ Branch 2 not taken.
|
36991 | return S.norm(); |
| 356 | } | ||
| 357 | } | ||
| 358 | |||
| 359 | // LA1, UB0 | ||
| 360 | |||
| 361 |
4/4✓ Branch 0 taken 133816 times.
✓ Branch 1 taken 177288 times.
✓ Branch 2 taken 39834 times.
✓ Branch 3 taken 93982 times.
|
311104 | if ((LA1_uy > b[1]) && (UB0_lx < 0)) { |
| 362 | 87153 | if (((LA1_ly > b[1]) || | |
| 363 |
4/6✓ Branch 1 taken 7485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7485 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4115 times.
✓ Branch 7 taken 3370 times.
|
7485 | inVoronoi(b[0], a[1], A1_dot_B1, -Tba[1] - b[1], A1_dot_B0, -Tba[0], |
| 364 |
8/10✓ Branch 0 taken 7485 times.
✓ Branch 1 taken 32349 times.
✓ Branch 3 taken 7485 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7485 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 22579 times.
✓ Branch 9 taken 13885 times.
✓ Branch 10 taken 19736 times.
✓ Branch 11 taken 20098 times.
|
69898 | -Tab[1] - bA1_dot_B1)) && |
| 365 | |||
| 366 |
3/4✓ Branch 1 taken 22579 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5851 times.
✓ Branch 4 taken 16728 times.
|
22579 | ((UB0_ux < 0) || inVoronoi(a[1], b[0], -A0_dot_B0, -Tab[0] - bA0_dot_B1, |
| 367 |
3/6✓ Branch 1 taken 22579 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22579 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22579 times.
✗ Branch 8 not taken.
|
22579 | A1_dot_B0, Tab[1] + bA1_dot_B1, Tba[0]))) { |
| 368 |
3/6✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19736 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19736 times.
✗ Branch 8 not taken.
|
19736 | segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1] + bA1_dot_B1, Tba[0]); |
| 369 | |||
| 370 |
4/8✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19736 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19736 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19736 times.
✗ Branch 11 not taken.
|
19736 | S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u; |
| 371 |
4/8✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19736 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19736 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19736 times.
✗ Branch 11 not taken.
|
19736 | S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - t; |
| 372 |
4/8✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 19736 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 19736 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 19736 times.
✗ Branch 11 not taken.
|
19736 | S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u; |
| 373 | |||
| 374 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
19736 | if (P && Q) { |
| 375 | ✗ | *P << 0, t, 0; | |
| 376 | ✗ | *Q = S + (*P); | |
| 377 | } | ||
| 378 | |||
| 379 |
1/2✓ Branch 1 taken 19736 times.
✗ Branch 2 not taken.
|
19736 | return S.norm(); |
| 380 | } | ||
| 381 | } | ||
| 382 | |||
| 383 | // LA1, LB0 | ||
| 384 | |||
| 385 |
4/4✓ Branch 0 taken 170354 times.
✓ Branch 1 taken 121014 times.
✓ Branch 2 taken 76597 times.
✓ Branch 3 taken 93757 times.
|
291368 | if ((LA1_ly < 0) && (LB0_lx < 0)) { |
| 386 |
3/4✓ Branch 1 taken 7272 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3047 times.
✓ Branch 4 taken 4225 times.
|
7272 | if (((LA1_uy < 0) || inVoronoi(b[0], a[1], -A1_dot_B1, Tba[1], A1_dot_B0, |
| 387 |
9/12✓ Branch 0 taken 7272 times.
✓ Branch 1 taken 69325 times.
✓ Branch 3 taken 7272 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 7272 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 7272 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 28523 times.
✓ Branch 12 taken 43849 times.
✓ Branch 13 taken 50424 times.
✓ Branch 14 taken 26173 times.
|
112392 | -Tba[0], -Tab[1])) && |
| 388 |
3/4✓ Branch 1 taken 28523 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6575 times.
✓ Branch 4 taken 21948 times.
|
28523 | ((LB0_ux < 0) || inVoronoi(a[1], b[0], -A0_dot_B0, -Tab[0], A1_dot_B0, |
| 389 |
3/6✓ Branch 1 taken 28523 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 28523 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 28523 times.
✗ Branch 8 not taken.
|
28523 | Tab[1], Tba[0]))) { |
| 390 |
3/6✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50424 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50424 times.
✗ Branch 8 not taken.
|
50424 | segCoords(t, u, a[1], b[0], A1_dot_B0, Tab[1], Tba[0]); |
| 391 | |||
| 392 |
3/6✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50424 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50424 times.
✗ Branch 8 not taken.
|
50424 | S[0] = Tab[0] + Rab(0, 0) * u; |
| 393 |
3/6✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50424 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50424 times.
✗ Branch 8 not taken.
|
50424 | S[1] = Tab[1] + Rab(1, 0) * u - t; |
| 394 |
3/6✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50424 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 50424 times.
✗ Branch 8 not taken.
|
50424 | S[2] = Tab[2] + Rab(2, 0) * u; |
| 395 | |||
| 396 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50424 | if (P && Q) { |
| 397 | ✗ | *P << 0, t, 0; | |
| 398 | ✗ | *Q = S + (*P); | |
| 399 | } | ||
| 400 | |||
| 401 |
1/2✓ Branch 1 taken 50424 times.
✗ Branch 2 not taken.
|
50424 | return S.norm(); |
| 402 | } | ||
| 403 | } | ||
| 404 | |||
| 405 | Scalar BLL_y, BLU_y, BUL_y, BUU_y; | ||
| 406 | |||
| 407 |
1/2✓ Branch 1 taken 240944 times.
✗ Branch 2 not taken.
|
240944 | BLL_y = Tab[1]; |
| 408 | 240944 | BLU_y = BLL_y + bA1_dot_B1; | |
| 409 | 240944 | BUL_y = BLL_y + bA1_dot_B0; | |
| 410 | 240944 | 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 124342 times.
✓ Branch 1 taken 116602 times.
|
240944 | if (ALL_x < AUL_x) { |
| 415 | 124342 | LA0_lx = ALL_x; | |
| 416 | 124342 | LA0_ux = AUL_x; | |
| 417 | 124342 | UA0_lx = ALU_x; | |
| 418 | 124342 | UA0_ux = AUU_x; | |
| 419 | } else { | ||
| 420 | 116602 | LA0_lx = AUL_x; | |
| 421 | 116602 | LA0_ux = ALL_x; | |
| 422 | 116602 | UA0_lx = AUU_x; | |
| 423 | 116602 | UA0_ux = ALU_x; | |
| 424 | } | ||
| 425 | |||
| 426 |
2/2✓ Branch 0 taken 130984 times.
✓ Branch 1 taken 109960 times.
|
240944 | if (BLL_y < BLU_y) { |
| 427 | 130984 | LB1_ly = BLL_y; | |
| 428 | 130984 | LB1_uy = BLU_y; | |
| 429 | 130984 | UB1_ly = BUL_y; | |
| 430 | 130984 | UB1_uy = BUU_y; | |
| 431 | } else { | ||
| 432 | 109960 | LB1_ly = BLU_y; | |
| 433 | 109960 | LB1_uy = BLL_y; | |
| 434 | 109960 | UB1_ly = BUU_y; | |
| 435 | 109960 | UB1_uy = BUL_y; | |
| 436 | } | ||
| 437 | |||
| 438 | // UA0, UB1 | ||
| 439 | |||
| 440 |
4/4✓ Branch 0 taken 132180 times.
✓ Branch 1 taken 108764 times.
✓ Branch 2 taken 47560 times.
✓ Branch 3 taken 84620 times.
|
240944 | if ((UA0_ux > b[0]) && (UB1_uy > a[1])) { |
| 441 | 111654 | if (((UA0_lx > b[0]) || | |
| 442 |
3/4✓ Branch 1 taken 16534 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 7129 times.
✓ Branch 4 taken 9405 times.
|
16534 | inVoronoi(b[1], a[0], A0_dot_B0, aA1_dot_B0 - Tba[0] - b[0], A0_dot_B1, |
| 443 |
7/10✓ Branch 0 taken 16534 times.
✓ Branch 1 taken 31026 times.
✓ Branch 3 taken 16534 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16534 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 16534 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 35886 times.
✓ Branch 12 taken 11674 times.
|
95120 | aA1_dot_B1 - Tba[1], -Tab[0] - bA0_dot_B0)) && |
| 444 |
2/2✓ Branch 0 taken 4472 times.
✓ Branch 1 taken 33683 times.
|
38155 | ((UB1_ly > a[1]) || |
| 445 |
3/4✓ Branch 1 taken 4472 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2203 times.
✓ Branch 4 taken 2269 times.
|
4472 | inVoronoi(a[0], b[1], A1_dot_B1, Tab[1] - a[1] + bA1_dot_B0, A0_dot_B1, |
| 446 |
3/6✓ Branch 1 taken 4472 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4472 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4472 times.
✗ Branch 8 not taken.
|
4472 | Tab[0] + bA0_dot_B0, Tba[1] - aA1_dot_B1))) { |
| 447 |
1/2✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
|
35886 | segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0, |
| 448 |
2/4✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35886 times.
✗ Branch 5 not taken.
|
35886 | Tba[1] - aA1_dot_B1); |
| 449 | |||
| 450 |
4/8✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35886 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35886 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35886 times.
✗ Branch 11 not taken.
|
35886 | S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - t; |
| 451 |
4/8✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35886 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35886 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35886 times.
✗ Branch 11 not taken.
|
35886 | S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u - a[1]; |
| 452 |
4/8✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 35886 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 35886 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 35886 times.
✗ Branch 11 not taken.
|
35886 | S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u; |
| 453 | |||
| 454 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
35886 | if (P && Q) { |
| 455 | ✗ | *P << t, a[1], 0; | |
| 456 | ✗ | *Q = S + (*P); | |
| 457 | } | ||
| 458 | |||
| 459 |
1/2✓ Branch 1 taken 35886 times.
✗ Branch 2 not taken.
|
35886 | return S.norm(); |
| 460 | } | ||
| 461 | } | ||
| 462 | |||
| 463 | // UA0, LB1 | ||
| 464 | |||
| 465 |
4/4✓ Branch 0 taken 110660 times.
✓ Branch 1 taken 94398 times.
✓ Branch 2 taken 45381 times.
✓ Branch 3 taken 65279 times.
|
205058 | if ((UA0_lx < 0) && (LB1_uy > a[1])) { |
| 466 |
3/4✓ Branch 1 taken 16282 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 6952 times.
✓ Branch 4 taken 9330 times.
|
16282 | if (((UA0_ux < 0) || inVoronoi(b[1], a[0], -A0_dot_B0, Tba[0] - aA1_dot_B0, |
| 467 |
7/10✓ Branch 0 taken 16282 times.
✓ Branch 1 taken 29099 times.
✓ Branch 3 taken 16282 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16282 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 16282 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 34485 times.
✓ Branch 12 taken 10896 times.
|
90762 | A0_dot_B1, aA1_dot_B1 - Tba[1], -Tab[0])) && |
| 468 |
2/2✓ Branch 0 taken 5150 times.
✓ Branch 1 taken 30901 times.
|
36051 | ((LB1_ly > a[1]) || |
| 469 |
4/6✓ Branch 1 taken 5150 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5150 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 3584 times.
✓ Branch 7 taken 1566 times.
|
5150 | inVoronoi(a[0], b[1], A1_dot_B1, Tab[1] - a[1], A0_dot_B1, Tab[0], |
| 470 |
2/4✓ Branch 1 taken 5150 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5150 times.
✗ Branch 5 not taken.
|
5150 | Tba[1] - aA1_dot_B1))) { |
| 471 |
3/6✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34485 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34485 times.
✗ Branch 8 not taken.
|
34485 | segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0], Tba[1] - aA1_dot_B1); |
| 472 | |||
| 473 |
3/6✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34485 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34485 times.
✗ Branch 8 not taken.
|
34485 | S[0] = Tab[0] + Rab(0, 1) * u - t; |
| 474 |
3/6✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34485 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34485 times.
✗ Branch 8 not taken.
|
34485 | S[1] = Tab[1] + Rab(1, 1) * u - a[1]; |
| 475 |
3/6✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 34485 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 34485 times.
✗ Branch 8 not taken.
|
34485 | S[2] = Tab[2] + Rab(2, 1) * u; |
| 476 | |||
| 477 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34485 | if (P && Q) { |
| 478 | ✗ | *P << t, a[1], 0; | |
| 479 | ✗ | *Q = S + (*P); | |
| 480 | } | ||
| 481 | |||
| 482 |
1/2✓ Branch 1 taken 34485 times.
✗ Branch 2 not taken.
|
34485 | return S.norm(); |
| 483 | } | ||
| 484 | } | ||
| 485 | |||
| 486 | // LA0, UB1 | ||
| 487 | |||
| 488 |
4/4✓ Branch 0 taken 94142 times.
✓ Branch 1 taken 76431 times.
✓ Branch 2 taken 63611 times.
✓ Branch 3 taken 30531 times.
|
170573 | if ((LA0_ux > b[0]) && (UB1_ly < 0)) { |
| 489 | 145248 | if (((LA0_lx > b[0]) || | |
| 490 |
4/6✓ Branch 1 taken 18026 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18026 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 8740 times.
✓ Branch 7 taken 9286 times.
|
18026 | inVoronoi(b[1], a[0], A0_dot_B0, -b[0] - Tba[0], A0_dot_B1, -Tba[1], |
| 491 |
8/10✓ Branch 0 taken 18026 times.
✓ Branch 1 taken 45585 times.
✓ Branch 3 taken 18026 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 18026 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 5619 times.
✓ Branch 9 taken 48706 times.
✓ Branch 10 taken 52366 times.
✓ Branch 11 taken 11245 times.
|
87256 | -bA0_dot_B0 - Tab[0])) && |
| 492 |
3/4✓ Branch 1 taken 5619 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3660 times.
✓ Branch 4 taken 1959 times.
|
5619 | ((UB1_uy < 0) || inVoronoi(a[0], b[1], -A1_dot_B1, -Tab[1] - bA1_dot_B0, |
| 493 |
3/6✓ Branch 1 taken 5619 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5619 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5619 times.
✗ Branch 8 not taken.
|
5619 | A0_dot_B1, Tab[0] + bA0_dot_B0, Tba[1]))) { |
| 494 |
3/6✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52366 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52366 times.
✗ Branch 8 not taken.
|
52366 | segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0] + bA0_dot_B0, Tba[1]); |
| 495 | |||
| 496 |
4/8✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52366 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52366 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52366 times.
✗ Branch 11 not taken.
|
52366 | S[0] = Tab[0] + Rab(0, 0) * b[0] + Rab(0, 1) * u - t; |
| 497 |
4/8✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52366 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52366 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52366 times.
✗ Branch 11 not taken.
|
52366 | S[1] = Tab[1] + Rab(1, 0) * b[0] + Rab(1, 1) * u; |
| 498 |
4/8✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 52366 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 52366 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 52366 times.
✗ Branch 11 not taken.
|
52366 | S[2] = Tab[2] + Rab(2, 0) * b[0] + Rab(2, 1) * u; |
| 499 | |||
| 500 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
52366 | if (P && Q) { |
| 501 | ✗ | *P << t, 0, 0; | |
| 502 | ✗ | *Q = S + (*P); | |
| 503 | } | ||
| 504 | |||
| 505 |
1/2✓ Branch 1 taken 52366 times.
✗ Branch 2 not taken.
|
52366 | return S.norm(); |
| 506 | } | ||
| 507 | } | ||
| 508 | |||
| 509 | // LA0, LB1 | ||
| 510 | |||
| 511 |
4/4✓ Branch 0 taken 78192 times.
✓ Branch 1 taken 40015 times.
✓ Branch 2 taken 42571 times.
✓ Branch 3 taken 35621 times.
|
118207 | if ((LA0_lx < 0) && (LB1_ly < 0)) { |
| 512 |
3/4✓ Branch 1 taken 15350 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8424 times.
✓ Branch 4 taken 6926 times.
|
15350 | if (((LA0_ux < 0) || inVoronoi(b[1], a[0], -A0_dot_B0, Tba[0], A0_dot_B1, |
| 513 |
9/12✓ Branch 0 taken 15350 times.
✓ Branch 1 taken 27221 times.
✓ Branch 3 taken 15350 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 15350 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 15350 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 3715 times.
✓ Branch 12 taken 31930 times.
✓ Branch 13 taken 33529 times.
✓ Branch 14 taken 9042 times.
|
61636 | -Tba[1], -Tab[0])) && |
| 514 |
3/4✓ Branch 1 taken 3715 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1599 times.
✓ Branch 4 taken 2116 times.
|
3715 | ((LB1_uy < 0) || inVoronoi(a[0], b[1], -A1_dot_B1, -Tab[1], A0_dot_B1, |
| 515 |
3/6✓ Branch 1 taken 3715 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3715 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3715 times.
✗ Branch 8 not taken.
|
3715 | Tab[0], Tba[1]))) { |
| 516 |
3/6✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33529 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33529 times.
✗ Branch 8 not taken.
|
33529 | segCoords(t, u, a[0], b[1], A0_dot_B1, Tab[0], Tba[1]); |
| 517 | |||
| 518 |
3/6✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33529 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33529 times.
✗ Branch 8 not taken.
|
33529 | S[0] = Tab[0] + Rab(0, 1) * u - t; |
| 519 |
3/6✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33529 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33529 times.
✗ Branch 8 not taken.
|
33529 | S[1] = Tab[1] + Rab(1, 1) * u; |
| 520 |
3/6✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 33529 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33529 times.
✗ Branch 8 not taken.
|
33529 | S[2] = Tab[2] + Rab(2, 1) * u; |
| 521 | |||
| 522 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
33529 | if (P && Q) { |
| 523 | ✗ | *P << t, 0, 0; | |
| 524 | ✗ | *Q = S + (*P); | |
| 525 | } | ||
| 526 | |||
| 527 |
1/2✓ Branch 1 taken 33529 times.
✗ Branch 2 not taken.
|
33529 | 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 42747 times.
✓ Branch 1 taken 41931 times.
|
84678 | if (ALL_y < AUL_y) { |
| 534 | 42747 | LA0_ly = ALL_y; | |
| 535 | 42747 | LA0_uy = AUL_y; | |
| 536 | 42747 | UA0_ly = ALU_y; | |
| 537 | 42747 | UA0_uy = AUU_y; | |
| 538 | } else { | ||
| 539 | 41931 | LA0_ly = AUL_y; | |
| 540 | 41931 | LA0_uy = ALL_y; | |
| 541 | 41931 | UA0_ly = AUU_y; | |
| 542 | 41931 | UA0_uy = ALU_y; | |
| 543 | } | ||
| 544 | |||
| 545 |
2/2✓ Branch 0 taken 43394 times.
✓ Branch 1 taken 41284 times.
|
84678 | if (BLL_y < BUL_y) { |
| 546 | 43394 | LB0_ly = BLL_y; | |
| 547 | 43394 | LB0_uy = BUL_y; | |
| 548 | 43394 | UB0_ly = BLU_y; | |
| 549 | 43394 | UB0_uy = BUU_y; | |
| 550 | } else { | ||
| 551 | 41284 | LB0_ly = BUL_y; | |
| 552 | 41284 | LB0_uy = BLL_y; | |
| 553 | 41284 | UB0_ly = BUU_y; | |
| 554 | 41284 | UB0_uy = BLU_y; | |
| 555 | } | ||
| 556 | |||
| 557 | // UA0, UB0 | ||
| 558 | |||
| 559 |
4/4✓ Branch 0 taken 51029 times.
✓ Branch 1 taken 33649 times.
✓ Branch 2 taken 18331 times.
✓ Branch 3 taken 32698 times.
|
84678 | if ((UA0_uy > b[1]) && (UB0_uy > a[1])) { |
| 560 | 50142 | if (((UA0_ly > b[1]) || | |
| 561 |
3/4✓ Branch 1 taken 13480 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5705 times.
✓ Branch 4 taken 7775 times.
|
13480 | inVoronoi(b[0], a[0], A0_dot_B1, aA1_dot_B1 - Tba[1] - b[1], A0_dot_B0, |
| 562 |
7/10✓ Branch 0 taken 13480 times.
✓ Branch 1 taken 4851 times.
✓ Branch 3 taken 13480 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 13480 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 13480 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 4426 times.
✓ Branch 12 taken 13905 times.
|
36662 | aA1_dot_B0 - Tba[0], -Tab[0] - bA0_dot_B1)) && |
| 563 |
2/2✓ Branch 0 taken 8338 times.
✓ Branch 1 taken 2218 times.
|
10556 | ((UB0_ly > a[1]) || |
| 564 |
3/4✓ Branch 1 taken 8338 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2208 times.
✓ Branch 4 taken 6130 times.
|
8338 | inVoronoi(a[0], b[0], A1_dot_B0, Tab[1] - a[1] + bA1_dot_B1, A0_dot_B0, |
| 565 |
3/6✓ Branch 1 taken 8338 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8338 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8338 times.
✗ Branch 8 not taken.
|
8338 | Tab[0] + bA0_dot_B1, Tba[0] - aA1_dot_B0))) { |
| 566 |
1/2✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
|
4426 | segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0] + bA0_dot_B1, |
| 567 |
2/4✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4426 times.
✗ Branch 5 not taken.
|
4426 | Tba[0] - aA1_dot_B0); |
| 568 | |||
| 569 |
4/8✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4426 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4426 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4426 times.
✗ Branch 11 not taken.
|
4426 | S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - t; |
| 570 |
4/8✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4426 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4426 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4426 times.
✗ Branch 11 not taken.
|
4426 | S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u - a[1]; |
| 571 |
4/8✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4426 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4426 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4426 times.
✗ Branch 11 not taken.
|
4426 | S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u; |
| 572 | |||
| 573 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4426 | if (P && Q) { |
| 574 | ✗ | *P << t, a[1], 0; | |
| 575 | ✗ | *Q = S + (*P); | |
| 576 | } | ||
| 577 | |||
| 578 |
1/2✓ Branch 1 taken 4426 times.
✗ Branch 2 not taken.
|
4426 | return S.norm(); |
| 579 | } | ||
| 580 | } | ||
| 581 | |||
| 582 | // UA0, LB0 | ||
| 583 | |||
| 584 |
4/4✓ Branch 0 taken 46362 times.
✓ Branch 1 taken 33890 times.
✓ Branch 2 taken 17108 times.
✓ Branch 3 taken 29254 times.
|
80252 | if ((UA0_ly < 0) && (LB0_uy > a[1])) { |
| 585 |
3/4✓ Branch 1 taken 9806 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4232 times.
✓ Branch 4 taken 5574 times.
|
9806 | if (((UA0_uy < 0) || inVoronoi(b[0], a[0], -A0_dot_B1, Tba[1] - aA1_dot_B1, |
| 586 |
7/10✓ Branch 0 taken 9806 times.
✓ Branch 1 taken 7302 times.
✓ Branch 3 taken 9806 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9806 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 9806 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 7869 times.
✓ Branch 12 taken 9239 times.
|
34216 | A0_dot_B0, aA1_dot_B0 - Tba[0], -Tab[0])) && |
| 587 |
2/2✓ Branch 0 taken 5947 times.
✓ Branch 1 taken 5587 times.
|
11534 | ((LB0_ly > a[1]) || |
| 588 |
4/6✓ Branch 1 taken 5947 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5947 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2282 times.
✓ Branch 7 taken 3665 times.
|
5947 | inVoronoi(a[0], b[0], A1_dot_B0, Tab[1] - a[1], A0_dot_B0, Tab[0], |
| 589 |
2/4✓ Branch 1 taken 5947 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 5947 times.
✗ Branch 5 not taken.
|
5947 | Tba[0] - aA1_dot_B0))) { |
| 590 |
3/6✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7869 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7869 times.
✗ Branch 8 not taken.
|
7869 | segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0], Tba[0] - aA1_dot_B0); |
| 591 | |||
| 592 |
3/6✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7869 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7869 times.
✗ Branch 8 not taken.
|
7869 | S[0] = Tab[0] + Rab(0, 0) * u - t; |
| 593 |
3/6✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7869 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7869 times.
✗ Branch 8 not taken.
|
7869 | S[1] = Tab[1] + Rab(1, 0) * u - a[1]; |
| 594 |
3/6✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 7869 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7869 times.
✗ Branch 8 not taken.
|
7869 | S[2] = Tab[2] + Rab(2, 0) * u; |
| 595 | |||
| 596 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
7869 | if (P && Q) { |
| 597 | ✗ | *P << t, a[1], 0; | |
| 598 | ✗ | *Q = S + (*P); | |
| 599 | } | ||
| 600 | |||
| 601 |
1/2✓ Branch 1 taken 7869 times.
✗ Branch 2 not taken.
|
7869 | return S.norm(); |
| 602 | } | ||
| 603 | } | ||
| 604 | |||
| 605 | // LA0, UB0 | ||
| 606 | |||
| 607 |
4/4✓ Branch 0 taken 43672 times.
✓ Branch 1 taken 28711 times.
✓ Branch 2 taken 14619 times.
✓ Branch 3 taken 29053 times.
|
72383 | if ((LA0_uy > b[1]) && (UB0_ly < 0)) { |
| 608 | 39999 | if (((LA0_ly > b[1]) || | |
| 609 |
4/6✓ Branch 1 taken 10761 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10761 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 4677 times.
✓ Branch 7 taken 6084 times.
|
10761 | inVoronoi(b[0], a[0], A0_dot_B1, -Tba[1] - b[1], A0_dot_B0, -Tba[0], |
| 610 |
8/10✓ Branch 0 taken 10761 times.
✓ Branch 1 taken 3858 times.
✓ Branch 3 taken 10761 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10761 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 6296 times.
✓ Branch 9 taken 2239 times.
✓ Branch 10 taken 4863 times.
✓ Branch 11 taken 9756 times.
|
31676 | -Tab[0] - bA0_dot_B1)) && |
| 611 | |||
| 612 |
3/4✓ Branch 1 taken 6296 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2624 times.
✓ Branch 4 taken 3672 times.
|
6296 | ((UB0_uy < 0) || inVoronoi(a[0], b[0], -A1_dot_B0, -Tab[1] - bA1_dot_B1, |
| 613 |
3/6✓ Branch 1 taken 6296 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6296 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6296 times.
✗ Branch 8 not taken.
|
6296 | A0_dot_B0, Tab[0] + bA0_dot_B1, Tba[0]))) { |
| 614 |
3/6✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4863 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4863 times.
✗ Branch 8 not taken.
|
4863 | segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0] + bA0_dot_B1, Tba[0]); |
| 615 | |||
| 616 |
4/8✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4863 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4863 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4863 times.
✗ Branch 11 not taken.
|
4863 | S[0] = Tab[0] + Rab(0, 1) * b[1] + Rab(0, 0) * u - t; |
| 617 |
4/8✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4863 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4863 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4863 times.
✗ Branch 11 not taken.
|
4863 | S[1] = Tab[1] + Rab(1, 1) * b[1] + Rab(1, 0) * u; |
| 618 |
4/8✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4863 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4863 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4863 times.
✗ Branch 11 not taken.
|
4863 | S[2] = Tab[2] + Rab(2, 1) * b[1] + Rab(2, 0) * u; |
| 619 | |||
| 620 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4863 | if (P && Q) { |
| 621 | ✗ | *P << t, 0, 0; | |
| 622 | ✗ | *Q = S + (*P); | |
| 623 | } | ||
| 624 | |||
| 625 |
1/2✓ Branch 1 taken 4863 times.
✗ Branch 2 not taken.
|
4863 | return S.norm(); |
| 626 | } | ||
| 627 | } | ||
| 628 | |||
| 629 | // LA0, LB0 | ||
| 630 | |||
| 631 |
4/4✓ Branch 0 taken 39410 times.
✓ Branch 1 taken 28110 times.
✓ Branch 2 taken 11519 times.
✓ Branch 3 taken 27891 times.
|
67520 | if ((LA0_ly < 0) && (LB0_ly < 0)) { |
| 632 |
3/4✓ Branch 1 taken 8520 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3754 times.
✓ Branch 4 taken 4766 times.
|
8520 | if (((LA0_uy < 0) || inVoronoi(b[0], a[0], -A0_dot_B1, Tba[1], A0_dot_B0, |
| 633 |
9/12✓ Branch 0 taken 8520 times.
✓ Branch 1 taken 2999 times.
✓ Branch 3 taken 8520 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 8520 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 8520 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 4942 times.
✓ Branch 12 taken 1811 times.
✓ Branch 13 taken 3317 times.
✓ Branch 14 taken 8202 times.
|
24981 | -Tba[0], -Tab[0])) && |
| 634 |
3/4✓ Branch 1 taken 4942 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1506 times.
✓ Branch 4 taken 3436 times.
|
4942 | ((LB0_uy < 0) || inVoronoi(a[0], b[0], -A1_dot_B0, -Tab[1], A0_dot_B0, |
| 635 |
3/6✓ Branch 1 taken 4942 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4942 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4942 times.
✗ Branch 8 not taken.
|
4942 | Tab[0], Tba[0]))) { |
| 636 |
3/6✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3317 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3317 times.
✗ Branch 8 not taken.
|
3317 | segCoords(t, u, a[0], b[0], A0_dot_B0, Tab[0], Tba[0]); |
| 637 | |||
| 638 |
3/6✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3317 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3317 times.
✗ Branch 8 not taken.
|
3317 | S[0] = Tab[0] + Rab(0, 0) * u - t; |
| 639 |
3/6✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3317 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3317 times.
✗ Branch 8 not taken.
|
3317 | S[1] = Tab[1] + Rab(1, 0) * u; |
| 640 |
3/6✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3317 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3317 times.
✗ Branch 8 not taken.
|
3317 | S[2] = Tab[2] + Rab(2, 0) * u; |
| 641 | |||
| 642 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3317 | if (P && Q) { |
| 643 | ✗ | *P << t, 0, 0; | |
| 644 | ✗ | *Q = S + (*P); | |
| 645 | } | ||
| 646 | |||
| 647 |
1/2✓ Branch 1 taken 3317 times.
✗ Branch 2 not taken.
|
3317 | 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 64203 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 33704 times.
✓ Branch 4 taken 30499 times.
|
64203 | if (Tab[2] > 0.0) { |
| 656 |
1/2✓ Branch 1 taken 33704 times.
✗ Branch 2 not taken.
|
33704 | sep1 = Tab[2]; |
| 657 |
4/6✓ Branch 1 taken 33704 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 20057 times.
✓ Branch 4 taken 13647 times.
✓ Branch 6 taken 20057 times.
✗ Branch 7 not taken.
|
33704 | if (Rab(2, 0) < 0.0) sep1 += b[0] * Rab(2, 0); |
| 658 |
4/6✓ Branch 1 taken 33704 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18519 times.
✓ Branch 4 taken 15185 times.
✓ Branch 6 taken 18519 times.
✗ Branch 7 not taken.
|
33704 | if (Rab(2, 1) < 0.0) sep1 += b[1] * Rab(2, 1); |
| 659 | } else { | ||
| 660 |
1/2✓ Branch 1 taken 30499 times.
✗ Branch 2 not taken.
|
30499 | sep1 = -Tab[2]; |
| 661 |
4/6✓ Branch 1 taken 30499 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18243 times.
✓ Branch 4 taken 12256 times.
✓ Branch 6 taken 18243 times.
✗ Branch 7 not taken.
|
30499 | if (Rab(2, 0) > 0.0) sep1 -= b[0] * Rab(2, 0); |
| 662 |
4/6✓ Branch 1 taken 30499 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17180 times.
✓ Branch 4 taken 13319 times.
✓ Branch 6 taken 17180 times.
✗ Branch 7 not taken.
|
30499 | if (Rab(2, 1) > 0.0) sep1 -= b[1] * Rab(2, 1); |
| 663 | } | ||
| 664 | |||
| 665 |
3/4✓ Branch 1 taken 64203 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 33416 times.
✓ Branch 4 taken 30787 times.
|
64203 | if (Tba[2] < 0) { |
| 666 |
1/2✓ Branch 1 taken 33416 times.
✗ Branch 2 not taken.
|
33416 | sep2 = -Tba[2]; |
| 667 |
4/6✓ Branch 1 taken 33416 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23287 times.
✓ Branch 4 taken 10129 times.
✓ Branch 6 taken 23287 times.
✗ Branch 7 not taken.
|
33416 | if (Rab(0, 2) < 0.0) sep2 += a[0] * Rab(0, 2); |
| 668 |
4/6✓ Branch 1 taken 33416 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 19981 times.
✓ Branch 4 taken 13435 times.
✓ Branch 6 taken 19981 times.
✗ Branch 7 not taken.
|
33416 | if (Rab(1, 2) < 0.0) sep2 += a[1] * Rab(1, 2); |
| 669 | } else { | ||
| 670 |
1/2✓ Branch 1 taken 30787 times.
✗ Branch 2 not taken.
|
30787 | sep2 = Tba[2]; |
| 671 |
4/6✓ Branch 1 taken 30787 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23151 times.
✓ Branch 4 taken 7636 times.
✓ Branch 6 taken 23151 times.
✗ Branch 7 not taken.
|
30787 | if (Rab(0, 2) > 0.0) sep2 -= a[0] * Rab(0, 2); |
| 672 |
4/6✓ Branch 1 taken 30787 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 18706 times.
✓ Branch 4 taken 12081 times.
✓ Branch 6 taken 18706 times.
✗ Branch 7 not taken.
|
30787 | if (Rab(1, 2) > 0.0) sep2 -= a[1] * Rab(1, 2); |
| 673 | } | ||
| 674 | |||
| 675 |
4/4✓ Branch 0 taken 44126 times.
✓ Branch 1 taken 20077 times.
✓ Branch 2 taken 34040 times.
✓ Branch 3 taken 10086 times.
|
64203 | if (sep1 >= sep2 && sep1 >= 0) { |
| 676 |
3/4✓ Branch 1 taken 34040 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 17438 times.
✓ Branch 4 taken 16602 times.
|
34040 | if (Tab[2] > 0) |
| 677 |
3/6✓ Branch 1 taken 17438 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17438 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 17438 times.
✗ Branch 8 not taken.
|
17438 | S << 0, 0, sep1; |
| 678 | else | ||
| 679 |
3/6✓ Branch 1 taken 16602 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 16602 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 16602 times.
✗ Branch 8 not taken.
|
16602 | S << 0, 0, -sep1; |
| 680 | |||
| 681 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 34040 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34040 | if (P && Q) { |
| 682 | ✗ | *Q = S; | |
| 683 | ✗ | P->setZero(); | |
| 684 | } | ||
| 685 | } | ||
| 686 | |||
| 687 |
4/4✓ Branch 0 taken 20242 times.
✓ Branch 1 taken 43961 times.
✓ Branch 2 taken 15156 times.
✓ Branch 3 taken 5086 times.
|
64203 | if (sep2 >= sep1 && sep2 >= 0) { |
| 688 |
4/8✓ Branch 1 taken 15156 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15156 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15156 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 15156 times.
✗ Branch 11 not taken.
|
15156 | Vec3s Q_(Tab[0], Tab[1], Tab[2]); |
| 689 |
1/2✓ Branch 1 taken 15156 times.
✗ Branch 2 not taken.
|
15156 | Vec3s P_; |
| 690 |
3/4✓ Branch 1 taken 15156 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8579 times.
✓ Branch 4 taken 6577 times.
|
15156 | if (Tba[2] < 0) { |
| 691 |
3/6✓ Branch 1 taken 8579 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8579 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8579 times.
✗ Branch 8 not taken.
|
8579 | P_[0] = Rab(0, 2) * sep2 + Tab[0]; |
| 692 |
3/6✓ Branch 1 taken 8579 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8579 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8579 times.
✗ Branch 8 not taken.
|
8579 | P_[1] = Rab(1, 2) * sep2 + Tab[1]; |
| 693 |
3/6✓ Branch 1 taken 8579 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8579 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8579 times.
✗ Branch 8 not taken.
|
8579 | P_[2] = Rab(2, 2) * sep2 + Tab[2]; |
| 694 | } else { | ||
| 695 |
3/6✓ Branch 1 taken 6577 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6577 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6577 times.
✗ Branch 8 not taken.
|
6577 | P_[0] = -Rab(0, 2) * sep2 + Tab[0]; |
| 696 |
3/6✓ Branch 1 taken 6577 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6577 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6577 times.
✗ Branch 8 not taken.
|
6577 | P_[1] = -Rab(1, 2) * sep2 + Tab[1]; |
| 697 |
3/6✓ Branch 1 taken 6577 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6577 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6577 times.
✗ Branch 8 not taken.
|
6577 | P_[2] = -Rab(2, 2) * sep2 + Tab[2]; |
| 698 | } | ||
| 699 | |||
| 700 |
2/4✓ Branch 1 taken 15156 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 15156 times.
✗ Branch 5 not taken.
|
15156 | S = Q_ - P_; |
| 701 | |||
| 702 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 15156 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15156 | if (P && Q) { |
| 703 | ✗ | *P = P_; | |
| 704 | ✗ | *Q = Q_; | |
| 705 | } | ||
| 706 | } | ||
| 707 | |||
| 708 |
2/2✓ Branch 0 taken 43961 times.
✓ Branch 1 taken 20242 times.
|
64203 | Scalar sep = (sep1 > sep2 ? sep1 : sep2); |
| 709 |
2/2✓ Branch 0 taken 49029 times.
✓ Branch 1 taken 15174 times.
|
64203 | 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.
|
1928 | return (dist < (Scalar)0.0) ? (Scalar)0.0 : dist; |
| 993 | } | ||
| 994 | |||
| 995 | 1589986 | 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 1589986 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1589986 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1589986 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1589986 times.
✗ Branch 11 not taken.
|
1589986 | Matrix3s R(b1.axes.transpose() * R0 * b2.axes); |
| 998 |
4/8✓ Branch 1 taken 1589986 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1589986 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1589986 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1589986 times.
✗ Branch 11 not taken.
|
1589986 | Vec3s Ttemp(R0 * b2.Tr + T0 - b1.Tr); |
| 999 | |||
| 1000 |
3/6✓ Branch 1 taken 1589986 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1589986 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1589986 times.
✗ Branch 8 not taken.
|
1589986 | Vec3s T(b1.axes.transpose() * Ttemp); |
| 1001 | |||
| 1002 |
1/2✓ Branch 1 taken 1589986 times.
✗ Branch 2 not taken.
|
1589986 | Scalar dist = rectDistance(R, T, b1.length, b2.length, P, Q); |
| 1003 | 1589986 | dist -= (b1.radius + b2.radius); | |
| 1004 |
2/2✓ Branch 0 taken 17786 times.
✓ Branch 1 taken 1572200 times.
|
3179972 | 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 |