forked from bartvdbraak/blender
Fix error copying cubic data
This commit is contained in:
parent
65dd1d7d08
commit
d2296cd5ec
11
extern/curve_fit_nd/intern/curve_fit_cubic.c
vendored
11
extern/curve_fit_nd/intern/curve_fit_cubic.c
vendored
@ -119,6 +119,11 @@ static Cubic *cubic_alloc(const uint dims)
|
|||||||
return malloc(cubic_alloc_size(dims));
|
return malloc(cubic_alloc_size(dims));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cubic_copy(Cubic *cubic_dst, const Cubic *cubic_src, const uint dims)
|
||||||
|
{
|
||||||
|
memcpy(cubic_dst, cubic_src, cubic_alloc_size(dims));
|
||||||
|
}
|
||||||
|
|
||||||
static void cubic_init(
|
static void cubic_init(
|
||||||
Cubic *cubic,
|
Cubic *cubic,
|
||||||
const double p0[], const double p1[], const double p2[], const double p3[],
|
const double p0[], const double p1[], const double p2[], const double p3[],
|
||||||
@ -766,7 +771,7 @@ static bool fit_cubic_to_points(
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Cubic *cubic_test = alloca(cubic_alloc_size(dims));
|
Cubic *cubic_test = alloca(cubic_alloc_size(dims));
|
||||||
*cubic_test = *r_cubic;
|
cubic_copy(cubic_test, r_cubic, dims);
|
||||||
|
|
||||||
/* If error not too large, try some reparameterization and iteration */
|
/* If error not too large, try some reparameterization and iteration */
|
||||||
double *u_prime = malloc(sizeof(double) * points_offset_len);
|
double *u_prime = malloc(sizeof(double) * points_offset_len);
|
||||||
@ -788,13 +793,13 @@ static bool fit_cubic_to_points(
|
|||||||
free(u_prime);
|
free(u_prime);
|
||||||
free(u);
|
free(u);
|
||||||
|
|
||||||
*r_cubic = *cubic_test;
|
cubic_copy(r_cubic, cubic_test, dims);
|
||||||
*r_error_max_sq = error_max_sq;
|
*r_error_max_sq = error_max_sq;
|
||||||
*r_split_index = split_index;
|
*r_split_index = split_index;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (error_max_sq < *r_error_max_sq) {
|
else if (error_max_sq < *r_error_max_sq) {
|
||||||
*r_cubic = *cubic_test;
|
cubic_copy(r_cubic, cubic_test, dims);
|
||||||
*r_error_max_sq = error_max_sq;
|
*r_error_max_sq = error_max_sq;
|
||||||
*r_split_index = split_index;
|
*r_split_index = split_index;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user