我正在尝试使用 GNU 科学库 (GSL) 绘制从 A 到 B 的平滑路径。我使用的 API 返回少量(在本例中为 8 个)不规则间隔的点(红色),即您可以在下图中看到:
紫色点代表我希望从 GSL 返回的点。
首先,这种 2D B-Spline 形状是否可以通过使用 GSL 获得?我对 B-Splines 了解不多,更不用说 2D B-Splines。我能够让此处显示的 B-Splines 示例运行并毫无问题地创建平滑的 .ps 文件,但该示例使用统一断点和以下代码:
/* use uniform breakpoints on [0, 15] */
gsl_bspline_knots_uniform(0.0, 15.0, bw);
就我而言,鉴于我提供的数据不稳定且间隔不均匀,我是否必须使用非均匀结?我尝试使用gsl_bspline_knots()
, 以便在以下测试代码中使用非统一断点,但我真的不确定这是否是正确的方向。
#define NCOEFFS 8 // not sure what this number should be - number of data points?
#define NBREAK (NCOEFFS - 2)
const size_t nbreak = NBREAK;
int main (void) {
// (example code)...
gsl_vector *non_uniform = gsl_vector_alloc(nbreak);
// create some random breakpoint values
for (i=0; i<nbreak; i++) {
double val = gsl_ran_gaussian(r, 2.0);
printf("val: %f\n", val);
gsl_vector_set(non_uniform, i, val);
}
gsl_bspline_knots(non_uniform, bw);
// (more example code)...
}
此外,我将如何翻译上述示例以在 2D x/y 坐标空间中绘制 B 样条线?如果 GNU Scientific Library 不适合这个,有人可以推荐一个更合适的 C/C++ 库吗?
任何有关方向的帮助或指示将不胜感激。