basisfun.c
来自「非均匀有理B样条的matlab程序」· C语言 代码 · 共 45 行
C
45 行
// Basis Function.
//
// INPUT:
//
// i - knot span ( from FindSpan() )
// u - parametric point
// p - spline degree
// U - knot sequence
//
// OUTPUT:
//
// N - Basis functions vector[p+1]
//
// Algorithm A2.2 from 'The NURBS BOOK' pg70.
void basisfun(int i, double u, int p, double *U, double *N)
{
int j,r;
double saved, temp;
// work space
double *left = (double*) mxMalloc((p+1)*sizeof(double));
double *right = (double*) mxMalloc((p+1)*sizeof(double));
N[0] = 1.0;
for (j = 1; j <= p; j++)
{
left[j] = u - U[i+1-j];
right[j] = U[i+j] - u;
saved = 0.0;
for (r = 0; r < j; r++)
{
temp = N[r] / (right[r+1] + left[j-r]);
N[r] = saved + right[r+1] * temp;
saved = left[j-r] * temp;
}
N[j] = saved;
}
mxFree(left);
mxFree(right);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?