From e5b4e6b0a3e8d40dc31dec74cfa2c297b3c49a71 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 8 May 2016 00:02:34 +1000 Subject: Clamp dot-product to avoid precision error Would only happen in degenerate cases. --- extern/curve_fit_nd/intern/curve_fit_cubic.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'extern/curve_fit_nd') diff --git a/extern/curve_fit_nd/intern/curve_fit_cubic.c b/extern/curve_fit_nd/intern/curve_fit_cubic.c index f07bb73429f..8fc7198f891 100644 --- a/extern/curve_fit_nd/intern/curve_fit_cubic.c +++ b/extern/curve_fit_nd/intern/curve_fit_cubic.c @@ -419,7 +419,8 @@ static double points_calc_circumference_factor( const double dot = dot_vnvn(tan_l, tan_r, dims); const double len_tangent = dot < 0.0 ? len_vnvn(tan_l, tan_r, dims) : len_negated_vnvn(tan_l, tan_r, dims); if (len_tangent > DBL_EPSILON) { - double angle = acos(-fabs(dot)); + /* only clamp to avoid precision error */ + double angle = acos(max(-fabs(dot), -1.0)); /* Angle may be less than the length when the tangents define >180 degrees of the circle, * (tangents that point away from each other). * We could try support this but will likely cause extreme >1 scales which could cause other issues. */ -- cgit v1.2.3