Skip to content

Commit d079924

Browse files
committed
Handle div 0 in tolerances
1 parent 4947261 commit d079924

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

src/tight_inclusion/ccd.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,21 @@ namespace ticcd {
5959
(p4e - p4).lpNorm<Eigen::Infinity>()});
6060
}
6161

62+
/// @brief Clamp a/b to [-∞, max_val]
63+
/// @param a numerator
64+
/// @param b denominator
65+
/// @param max_val
66+
/// @return a/b if b != 0, max_val if b == 0
67+
inline Scalar
68+
clamp_div(const Scalar a, const Scalar b, const Scalar max_val)
69+
{
70+
if (b == 0) {
71+
return max_val;
72+
} else {
73+
return std::min(a / b, max_val);
74+
}
75+
}
76+
6277
Array3 compute_face_vertex_tolerances(
6378
const Vector3 &vs,
6479
const Vector3 &f0s,
@@ -87,9 +102,9 @@ namespace ticcd {
87102
3 * max_linf_4(p000, p100, p110, p010, p001, p101, p111, p011);
88103

89104
return Array3(
90-
std::min(distance_tolerance / dl, CCD_MAX_TIME_TOL),
91-
std::min(distance_tolerance / edge0_length, CCD_MAX_COORD_TOL),
92-
std::min(distance_tolerance / edge1_length, CCD_MAX_COORD_TOL));
105+
clamp_div(distance_tolerance, dl, CCD_MAX_TIME_TOL),
106+
clamp_div(distance_tolerance, edge0_length, CCD_MAX_COORD_TOL),
107+
clamp_div(distance_tolerance, edge1_length, CCD_MAX_COORD_TOL));
93108
}
94109

95110
Array3 compute_edge_edge_tolerances(
@@ -121,9 +136,9 @@ namespace ticcd {
121136
3 * max_linf_4(p000, p100, p110, p010, p001, p101, p111, p011);
122137

123138
return Array3(
124-
std::min(distance_tolerance / dl, CCD_MAX_TIME_TOL),
125-
std::min(distance_tolerance / edge0_length, CCD_MAX_COORD_TOL),
126-
std::min(distance_tolerance / edge1_length, CCD_MAX_COORD_TOL));
139+
clamp_div(distance_tolerance, dl, CCD_MAX_TIME_TOL),
140+
clamp_div(distance_tolerance, edge0_length, CCD_MAX_COORD_TOL),
141+
clamp_div(distance_tolerance, edge1_length, CCD_MAX_COORD_TOL));
127142
}
128143

129144
bool edgeEdgeCCD(

0 commit comments

Comments
 (0)