Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/extern
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2016-04-30 09:27:43 +0300
committerCampbell Barton <ideasman42@gmail.com>2016-04-30 09:27:43 +0300
commitb1f6cd5a6a2747f8ecac7ef844efffd7bbec6736 (patch)
treeccd8c2d99801cfab05d0ecfc00504fb3980607b0 /extern
parent6ab22064c2c40af4ae83a87882078d293c9ce928 (diff)
Slight adjustment to curve fitting tangents
Don't let the point spacing give bias to a side.
Diffstat (limited to 'extern')
-rw-r--r--extern/curve_fit_nd/intern/curve_fit_cubic.c18
-rw-r--r--extern/curve_fit_nd/intern/curve_fit_inline.h2
2 files changed, 17 insertions, 3 deletions
diff --git a/extern/curve_fit_nd/intern/curve_fit_cubic.c b/extern/curve_fit_nd/intern/curve_fit_cubic.c
index 810cf92760d..6aee04f20b1 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 17aa02be3e5..1b47cbd5eb5 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(