summaryrefslogtreecommitdiff
path: root/rspl/rspl1.h
diff options
context:
space:
mode:
Diffstat (limited to 'rspl/rspl1.h')
-rw-r--r--rspl/rspl1.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/rspl/rspl1.h b/rspl/rspl1.h
new file mode 100644
index 0000000..d5ea0b9
--- /dev/null
+++ b/rspl/rspl1.h
@@ -0,0 +1,115 @@
+
+#ifndef _RSPL1_H_
+
+ /* Single dimension regularized spline data structure */
+
+/*
+ * Argyll Color Correction System
+ * Author: Graeme W. Gill
+ * Date: 2000/10/29
+ *
+ * Copyright 1996 - 2010 Graeme W. Gill
+ * All rights reserved.
+ *
+ * This material is licenced under the GNU GENERAL PUBLIC LICENSE Version 2 or later :-
+ * see the License2.txt file for licencing details.
+ *
+ * This is a simple 1D version of rspl, useful for standalone purposes.
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* General data point position/value structure */
+typedef double datai[1];
+typedef double datao[1];
+typedef double ratai[1];
+typedef double ratao[1];
+
+/* Interface coordinate value */
+typedef struct {
+ double p[1]; /* coordinate position */
+ double v[1]; /* function values */
+} co;
+
+/* Interface coordinate value */
+typedef struct {
+ double p[1]; /* coordinate position */
+ double v[1]; /* function values */
+ double w; /* Weight to give this point, nominally 1.0 */
+} cow;
+
+#define RSPL_NOFLAGS 0
+
+struct _rspl {
+
+ /* Private: */
+ int nig; /* number in interpolation grid */
+ double gl,gh,gw;/* Interpolation grid scale low, high, grid cell width */
+ double vl,vw; /* low & range */
+ double xl,xh; /* Actual X data exremes low, high */
+ double dl,dh; /* Actual Y Data scale low, high */
+ double *x; /* Array of nig grid point scaled y values */
+
+ /* Public: */
+
+ /* destructor */
+ void (*del)(struct _rspl *t);
+
+ /* Initialise from scattered data. */
+ /* Returns nz on error */
+ int
+ (*fit_rspl)(
+ struct _rspl *s, /* this */
+ int flags, /* (Not used) */
+ co *d, /* Array holding position and function values of data points */
+ int ndp, /* Number of data points */
+ datai glow, /* Grid low scale - will expand to enclose data, NULL = default 0.0 */
+ datai ghigh, /* Grid high scale - will expand to enclose data, NULL = default 1.0 */
+ int *gres, /* Spline grid resolution, ncells = gres-1 */
+ datao vlow, /* Data value low normalize, NULL = default 0.0 */
+ datao vhigh, /* Data value high normalize - NULL = default 1.0 */
+ double smooth, /* Smoothing factor, 0.0 = default 1.0 */
+ double *avgdev, /* (Not used) */
+ double **ipos /* (not used) */
+ );
+
+ /* Initialise from scattered data with weighting. */
+ /* Returns nz on error */
+ int
+ (*fit_rspl_w)(
+ struct _rspl *s, /* this */
+ int flags, /* (Not used) */
+ cow *d, /* Array holding position and function values of data points */
+ int ndp, /* Number of data points */
+ datai glow, /* Grid low scale - will expand to enclose data, NULL = default 0.0 */
+ datai ghigh, /* Grid high scale - will expand to enclose data, NULL = default 1.0 */
+ int *gres, /* Spline grid resolution, ncells = gres-1 */
+ datao vlow, /* Data value low normalize, NULL = default 0.0 */
+ datao vhigh, /* Data value high normalize - NULL = default 1.0 */
+ double smooth, /* Smoothing factor, 0.0 = default 1.0 */
+ double *avgdev, /* (Not used) */
+ double **ipos /* (not used) */
+ );
+
+ /* Do forward interpolation */
+ /* Return 0 if OK, 1 if input was clipped to grid */
+ int (*interp)(
+ struct _rspl *s, /* this */
+ co *p); /* Input and output values */
+
+}; typedef struct _rspl rspl;
+
+/* Create a new, empty rspl object */
+rspl *new_rspl(int flags, int di, int fdi);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _RSPL1_H_
+#endif /* _RSPL1_H_ */
+
+