41#define EPSILON 2 * FLT_MIN
54float (*
spline_val[])(int,
float[], float,
float[],
float[])
116 for(
int i = 0;
i <
n;
i++)
118 if(
a[1 +
i * 3] == 0.0E+00)
123 float *
x = (
float *)calloc(
n,
sizeof(
float));
126 for(
int i = 0;
i <
n;
i++)
131 for(
int i = 1;
i <
n;
i++)
133 const float xmult =
a[2 + (
i - 1) * 3] /
a[1 + (
i - 1) * 3];
134 a[1 +
i * 3] =
a[1 +
i * 3] - xmult *
a[0 +
i * 3];
135 x[
i] =
x[
i] - xmult *
x[
i - 1];
138 x[
n - 1] =
x[
n - 1] /
a[1 + (
n - 1) * 3];
139 for(
int i =
n - 2; 0 <=
i;
i--)
141 x[
i] = (
x[
i] -
a[0 + (
i + 1) * 3] *
x[
i + 1]) /
a[1 +
i * 3];
271 for(
int i = 0;
i <
n - 1;
i++)
281 float *
a = (
float *)calloc(3 *
n,
sizeof(
float));
283 float *
b = (
float *)calloc(
n,
sizeof(
float));
291 a[1 + 0 * 3] = 1.0E+00;
292 a[0 + 1 * 3] = -1.0E+00;
296 b[0] = (y[1] - y[0]) / (
t[1] -
t[0]) - ybcbeg;
297 a[1 + 0 * 3] = (
t[1] -
t[0]) / 3.0E+00;
298 a[0 + 1 * 3] = (
t[1] -
t[0]) / 6.0E+00;
303 a[1 + 0 * 3] = 1.0E+00;
304 a[0 + 1 * 3] = 0.0E+00;
317 for(
int i = 1;
i <
n - 1;
i++)
319 b[
i] = (y[
i + 1] - y[
i]) / (
t[
i + 1] -
t[
i]) - (y[
i] - y[
i - 1]) / (
t[
i] -
t[
i - 1]);
320 a[2 + (
i - 1) * 3] = (
t[
i] -
t[
i - 1]) / 6.0E+00;
321 a[1 +
i * 3] = (
t[
i + 1] -
t[
i - 1]) / 3.0E+00;
322 a[0 + (
i + 1) * 3] = (
t[
i + 1] -
t[
i]) / 6.0E+00;
330 a[2 + (
n - 2) * 3] = -1.0E+00;
331 a[1 + (
n - 1) * 3] = 1.0E+00;
335 b[
n - 1] = ybcend - (y[
n - 1] - y[
n - 2]) / (
t[
n - 1] -
t[
n - 2]);
336 a[2 + (
n - 2) * 3] = (
t[
n - 1] -
t[
n - 2]) / 6.0E+00;
337 a[1 + (
n - 1) * 3] = (
t[
n - 1] -
t[
n - 2]) / 3.0E+00;
342 a[2 + (
n - 2) * 3] = 0.0E+00;
343 a[1 + (
n - 1) * 3] = 1.0E+00;
358 if(
n == 2 && ibcbeg == 0 && ibcend == 0)
360 ypp = (
float *)calloc(2,
sizeof(
float));
415 for(
int i = 0;
i <
n - 1;
i++)
426 float *
delta = (
float *)calloc(
n,
sizeof(
float));
428 float *
m = (
float *)calloc(
n + 1,
sizeof(
float));
431 for(
int i = 0;
i <
n - 1;
i++)
440 for(
int i = 1;
i <
n - 1;
i++)
444 for(
int i = 0;
i <
n;
i++)
453 const float alpha =
m[
i] /
delta[
i];
454 const float beta =
m[
i + 1] /
delta[
i];
455 const float tau = alpha * alpha + beta * beta;
458 m[
i] = 3.0f * alpha *
delta[
i] / sqrtf(tau);
459 m[
i + 1] = 3.0f * beta *
delta[
i] / sqrtf(tau);
489 for(
int i = 0;
i <
n - 1;
i++)
500 float *
m = (
float *)calloc(
n,
sizeof(
float));
504 m[0] = (y[1] - y[0]) / (
x[1] -
x[0]);
505 for(
int i = 1;
i <
n - 1;
i++)
507 m[
i] = (y[
i + 1] - y[
i - 1]) / (
x[
i + 1] -
x[
i - 1]);
509 m[
n - 1] = (y[
n - 1] - y[
n - 2]) / (
x[
n - 1] -
x[
n - 2]);
545 for(
int i = 0;
i <
n - 2;
i++)
554 const float m0 = tangents[ival];
555 const float m1 = tangents[ival + 1];
560 const float h =
x[ival + 1] -
x[ival];
561 const float dx = (xval -
x[ival]) /
h;
562 const float dx2 = dx * dx;
563 const float dx3 = dx * dx2;
565 const float h00 = (2.0 * dx3) - (3.0 * dx2) + 1.0;
566 const float h10 = (1.0 * dx3) - (2.0 * dx2) + dx;
567 const float h01 = (-2.0 * dx3) + (3.0 * dx2);
568 const float h11 = (1.0 * dx3) - (1.0 * dx2);
570 return (h00 * y[ival]) + (h10 *
h * m0) + (h01 * y[ival + 1]) + (h11 *
h * m1);
638 for(
int i = 0;
i <
n - 1;
i++)
650 const float dt = tval -
t[ival];
651 const float h =
t[ival + 1] -
t[ival];
653 const float yval = y[ival]
654 + dt * ((y[ival + 1] - y[ival]) /
h - (ypp[ival + 1] / 6.0E+00 + ypp[ival] / 3.0E+00) *
h
655 + dt * (0.5E+00 * ypp[ival] + dt * ((ypp[ival + 1] - ypp[ival]) / (6.0E+00 *
h))));
711 const int firstPointY = y[0] * (sample->
m_outputRes - 1);
713 const int lastPointY = y[
n - 1] * (sample->
m_outputRes - 1);
734 else if(
i > lastPointX)
742 if(val > maxY) val = maxY;
743 if(val < minY) val = minY;
#define m
Definition basecurve.c:277
const float i
Definition colorspaces_inline_conversions.h:669
const float h
Definition colorspaces_inline_conversions.h:1366
const float b
Definition colorspaces_inline_conversions.h:1326
const float a
Definition colorspaces_inline_conversions.h:1292
const float n
Definition colorspaces_inline_conversions.h:929
const float delta
Definition colorspaces_inline_conversions.h:722
#define dt_free(ptr)
Definition darktable.h:380
static const float x
Definition iop_profile.h:239
const int t
Definition iop_profile.h:227
float x
Definition curve_tools.h:59
float y
Definition curve_tools.h:60
Definition curve_tools.h:64
CurveAnchorPoint m_anchors[20]
Definition curve_tools.h:79
float m_min_x
Definition curve_tools.h:69
float m_max_x
Definition curve_tools.h:70
unsigned char m_numAnchors
Definition curve_tools.h:75
unsigned int m_spline_type
Definition curve_tools.h:66
float m_max_y
Definition curve_tools.h:72
float m_min_y
Definition curve_tools.h:71
Definition curve_tools.h:84
unsigned int m_outputRes
Definition curve_tools.h:87
unsigned int m_samplingRes
Definition curve_tools.h:86
unsigned short int * m_Samples
Definition curve_tools.h:90