|
29 | 29 | #include <vector> |
30 | 30 | using std::vector; |
31 | 31 |
|
32 | | -// Flatten a 2D vector |
33 | | -vector<FP_REAL> flatten_2d_vector(vector<fpPoint> x2d) |
34 | | -{ |
35 | | - |
36 | | - // Get number of points |
37 | | - FP_SIZE npts = x2d.size(); |
38 | | - |
39 | | - // Get max vector size |
40 | | - FP_SIZE ndim = 0; |
41 | | - for (FP_SIZE i=0; i<x2d.size(); i++) |
42 | | - { |
43 | | - ndim = x2d[i].size()>ndim? x2d[i].size() : ndim; |
44 | | - } |
45 | | - |
46 | | - // Allocate flattened vector |
47 | | - FP_SIZE n = npts*ndim; |
48 | | - |
49 | | - vector<FP_REAL> x(n,0.0); |
50 | | - |
51 | | - for (FP_SIZE pt=0; pt<x2d.size(); pt++) |
52 | | - { |
53 | | - for (FP_SIZE idim=0; idim<x2d[pt].size(); idim++) |
54 | | - { |
55 | | - x[pt*ndim+idim] = x2d[pt][idim]; |
56 | | - } |
57 | | - } |
58 | | - |
59 | | - return x; |
60 | | - |
61 | | -} |
62 | | - |
63 | 32 | class fpParametricCurve |
64 | 33 | { |
65 | 34 | public: |
@@ -110,7 +79,8 @@ class fpParametricCurve |
110 | 79 | FP_FLAG fit(FP_REAL smoothing, FP_SIZE order) { return fitpack_parametric_curve_c_fit(&cptr,&smoothing,&order); } |
111 | 80 |
|
112 | 81 | // Get the interpolating fit |
113 | | - FP_FLAG interpolate() { return fitpack_parametric_curve_c_interpolating(&cptr); } |
| 82 | + FP_FLAG interpolate() { return fitpack_parametric_curve_c_interpolating(&cptr,nullptr); } |
| 83 | + FP_FLAG interpolate(FP_SIZE order) { return fitpack_parametric_curve_c_interpolating(&cptr,nullptr); } |
114 | 84 |
|
115 | 85 | // Fit properties |
116 | 86 | const FP_SIZE degree () { return fitpack_parametric_curve_c_degree(&cptr); }; |
@@ -148,6 +118,21 @@ class fpParametricCurve |
148 | 118 |
|
149 | 119 | } |
150 | 120 |
|
| 121 | + // Get values at a range of parameter values |
| 122 | + vector<fpPoint> eval(FP_REAL umin, FP_REAL umax, FP_SIZE npts = 100, FP_SIZE* ierr=nullptr) |
| 123 | + { |
| 124 | + vector<FP_REAL> uu(npts); |
| 125 | + |
| 126 | + // Generate linearly spaced u values |
| 127 | + FP_REAL du = (umax - umin) / (npts - 1); |
| 128 | + for (FP_SIZE i = 0; i < npts; ++i) { |
| 129 | + uu[i] = umin + i * du; |
| 130 | + } |
| 131 | + |
| 132 | + return eval(uu,ierr); |
| 133 | + |
| 134 | + } |
| 135 | + |
151 | 136 | // Get single derivative at u |
152 | 137 | fpPoint ddu(FP_REAL u, FP_SIZE order, FP_FLAG* ierr=nullptr) |
153 | 138 | { |
|
0 commit comments