[Bf-blender-cvs] [8fc5c24] compositor-2016: Cleanup: simplify checks calculating tangents

Campbell Barton noreply at git.blender.org
Wed Jun 8 21:47:18 CEST 2016


Commit: 8fc5c247eca303656581028a771e4113478d1185
Author: Campbell Barton
Date:   Tue May 17 01:58:07 2016 +1000
Branches: compositor-2016
https://developer.blender.org/rB8fc5c247eca303656581028a771e4113478d1185

Cleanup: simplify checks calculating tangents

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

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 473e4ca..1f42dd5 100644
--- a/extern/curve_fit_nd/intern/curve_fit_cubic.c
+++ b/extern/curve_fit_nd/intern/curve_fit_cubic.c
@@ -450,22 +450,24 @@ static double points_calc_circle_tangent_factor(
         const double  tan_r[],
         const uint dims)
 {
-	const double angle_sin = len_vnvn(tan_l, tan_r, dims) / 2.0;
-	if (angle_sin != 0.0) {
-		const double tan_dot = dot_vnvn(tan_l, tan_r, dims);
-		double scale;
-		if (tan_dot > -1.0) {
-			const double angle = acos(tan_dot) / 2.0;
-			const double angle_cos = cos(angle);
-			scale = (1.0 - angle_cos) / (angle_sin * 2.0);
-		}
-		else {
-			scale = 1.0 / 2.0;
-		}
-		return (scale / angle_sin);
+	const double eps = 1e-8;
+	const double tan_dot = dot_vnvn(tan_l, tan_r, dims);
+	if (tan_dot > 1.0 - eps) {
+		/* no angle difference (use fallback, length wont make any difference) */
+		return (1.0 / 3.0) * 0.75;
+	}
+	else if (tan_dot < -1.0 + eps) {
+		/* parallele tangents (half-circle) */
+		return (1.0 / 2.0);
 	}
 	else {
-		return (1.0 / 3.0) * 0.75;
+		/* non-aligned tangents, calculate handle length */
+		const double angle = acos(tan_dot) / 2.0;
+
+		/* could also use 'angle_sin = len_vnvn(tan_l, tan_r, dims) / 2.0' */
+		const double angle_sin = sin(angle);
+		const double angle_cos = cos(angle);
+		return ((1.0 - angle_cos) / (angle_sin * 2.0)) / angle_sin;
 	}
 }




More information about the Bf-blender-cvs mailing list