[Bf-blender-cvs] [e5b4e6b] master: Clamp dot-product to avoid precision error

Campbell Barton noreply at git.blender.org
Sat May 7 15:58:32 CEST 2016


Commit: e5b4e6b0a3e8d40dc31dec74cfa2c297b3c49a71
Author: Campbell Barton
Date:   Sun May 8 00:02:34 2016 +1000
Branches: master
https://developer.blender.org/rBe5b4e6b0a3e8d40dc31dec74cfa2c297b3c49a71

Clamp dot-product to avoid precision error

Would only happen in degenerate cases.

===================================================================

M	extern/curve_fit_nd/intern/curve_fit_cubic.c

===================================================================

diff --git a/extern/curve_fit_nd/intern/curve_fit_cubic.c b/extern/curve_fit_nd/intern/curve_fit_cubic.c
index f07bb73..8fc7198 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. */




More information about the Bf-blender-cvs mailing list