[Bf-blender-cvs] [b1f6cd5] master: Slight adjustment to curve fitting tangents

Campbell Barton noreply at git.blender.org
Sat Apr 30 08:27:04 CEST 2016


Commit: b1f6cd5a6a2747f8ecac7ef844efffd7bbec6736
Author: Campbell Barton
Date:   Sat Apr 30 16:27:43 2016 +1000
Branches: master
https://developer.blender.org/rBb1f6cd5a6a2747f8ecac7ef844efffd7bbec6736

Slight adjustment to curve fitting tangents

Don't let the point spacing give bias to a side.

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

M	extern/curve_fit_nd/intern/curve_fit_cubic.c
M	extern/curve_fit_nd/intern/curve_fit_inline.h

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

diff --git a/extern/curve_fit_nd/intern/curve_fit_cubic.c b/extern/curve_fit_nd/intern/curve_fit_cubic.c
index 810cf92..6aee04f 100644
--- a/extern/curve_fit_nd/intern/curve_fit_cubic.c
+++ b/extern/curve_fit_nd/intern/curve_fit_cubic.c
@@ -814,8 +814,22 @@ static void fit_cubic_to_points(
 		pt_a += dims;
 	}
 
-	/* tan_center = (pt_a - pt_b).normalized() */
-	normalize_vn_vnvn(tan_center, pt_a, pt_b, dims);
+	{
+#ifdef USE_VLA
+		double tan_center_a[dims];
+		double tan_center_b[dims];
+#else
+		double *tan_center_a = alloca(sizeof(double) * dims);
+		double *tan_center_b = alloca(sizeof(double) * dims);
+#endif
+		const double *pt   = &points_offset[split_index * dims];
+
+		/* tan_center = ((pt_a - pt).normalized() + (pt - pt_b).normalized()).normalized() */
+		normalize_vn_vnvn(tan_center_a, pt_a, pt, dims);
+		normalize_vn_vnvn(tan_center_b, pt, pt_b, dims);
+		add_vn_vnvn(tan_center, tan_center_a, tan_center_b, dims);
+		normalize_vn(tan_center, dims);
+	}
 
 	fit_cubic_to_points(
 	        points_offset, split_index + 1,
diff --git a/extern/curve_fit_nd/intern/curve_fit_inline.h b/extern/curve_fit_nd/intern/curve_fit_inline.h
index 17aa02b..1b47cbd 100644
--- a/extern/curve_fit_nd/intern/curve_fit_inline.h
+++ b/extern/curve_fit_nd/intern/curve_fit_inline.h
@@ -209,6 +209,7 @@ static double len_vn(
 {
 	return sqrt(len_squared_vn(v0, dims));
 }
+#endif
 
 MINLINE double normalize_vn(
         double v0[], const uint dims)
@@ -219,7 +220,6 @@ MINLINE double normalize_vn(
 	}
 	return d;
 }
-#endif
 
 /* v_out = (v0 - v1).normalized() */
 MINLINE double normalize_vn_vnvn(




More information about the Bf-blender-cvs mailing list