Skip to content

Commit c3a5c8c

Browse files
committed
fix: CubicPoly:approximate_linear was sampling too high for quadratic case
1 parent 74c93d2 commit c3a5c8c

1 file changed

Lines changed: 5 additions & 8 deletions

File tree

src/Geometries/CubicSpline.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,20 +59,17 @@ std::set<double> CubicPoly::approximate_linear(const double eps, const double s_
5959
if (s_start == s_end)
6060
return {};
6161

62-
if (d == 0 && c == 0)
62+
if (d == 0 && c == 0) // linear case: /
6363
return {s_start, s_end};
6464

6565
std::vector<double> s_vals;
66-
if (d == 0 && c != 0)
66+
if (d == 0 && c != 0) // quadratic case: U
6767
{
68-
double s = s_start;
69-
while (s < s_end)
70-
{
68+
const double step = 2.0 * std::sqrt(std::abs(eps / c));
69+
for (double s = s_start; s < s_end; s += step)
7170
s_vals.push_back(s);
72-
s = (c != 0) ? s + std::sqrt(std::abs(eps / c)) : s + eps;
73-
}
7471
}
75-
else
72+
else // cubic case
7673
{
7774
// transform to parametric form
7875
const double& s_0 = s_start;

0 commit comments

Comments
 (0)