B-Spline Basis Functions
摘要Abstract:直接根据B样条的Cox-deBoor递推定义写出计算B样条基函数的程序,并将计算结果在OpenSceneGraph中显示。
关键字Key Words:B Spline Basis Functions、OpenSceneGraph
一、概述Overview
有很多方法可以用来定义B样条基函数以及证明它的一些重要性质。例如,可以采用截尾幂函数的差商定义,开花定义,以及由de Boor和Cox等人提出的递推公式等来定义。我们这里采用的是递推定义方法,因为这种方法在计算机实现中是最有效的。
令U={u0,u1,…,um}是一个单调不减的实数序列,即ui<=ui+1,i=0,1,…,m-1。其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次B样条基函数,其定义为:
B样条基有如下性质:
a) 递推性;
b) 局部支承性;
c) 规范性;
d) 可微性;
二、程序 Codes
直接根据B样条基函数的Cox-deBoor递推定义,写出计算B样条基函数的程序如下:
头文件BSplineBasisFunction.h:
/**//*
* Copyright (c) 2013 eryar All Rights Reserved.
*
* File : BSplineBasisFunction.h
* Author : eryar@163.com
* Date : 2013-03-23 22:13
* Version : V1.0
*
* Description : Use Cox-deBoor formula to implemente the
* B-Spline Basis functions.
*
*/
#ifndef _BSPLINEBASISFUNCTION_H_
#define_BSPLINEBASISFUNCTION_H_
#include
classBSplineBasisFunction
{
public:
BSplineBasisFunction(conststd::vector&U);
~BSplineBasisFunction(void);
public:
/**//*
* @brief Binary search of the knot vector.
*/
intFindSpan(doubleu);
/**//*
* @brief
* @param [in] i: span of the parameter u;
* [in] p: degree;
* [in] u: parameter;
*/
doubleEvalBasis(inti,intp,doubleu);
/**//*
* @breif Get knot vector size.
*/
intGetKnotVectorSize(void)const;
/**//*
* @breif Get the knot value of the given index.
*/
doubleGetKnot(inti)const;
private:
std::vectormKnotVector;
};
#endif//_BSPLINEBASISFUNCTION_H_
实现文件BSplineBasisFunction.cpp:
/**//*