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样条基函数,其定义为:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions B样条基有如下性质:
a) 递推性;
b) 局部支承性;
c) 规范性;
d) 可微性;
二、程序 Codes
直接根据B样条基函数的Cox-deBoor递推定义,写出计算B样条基函数的程序如下:
头文件BSplineBasisFunction.h:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #ifndef _BSPLINEBASISFUNCTION_H_
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #define_BSPLINEBASISFUNCTION_H_
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions classBSplineBasisFunction
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions public:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions BSplineBasisFunction(conststd::vector&U);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions ~BSplineBasisFunction(void);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions public:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intFindSpan(doubleu);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubleEvalBasis(inti,intp,doubleu);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intGetKnotVectorSize(void)const;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubleGetKnot(inti)const;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions private:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions std::vectormKnotVector;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions };
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #endif//_BSPLINEBASISFUNCTION_H_
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions 实现文件BSplineBasisFunction.cpp:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include"BSplineBasisFunction.h"
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions BSplineBasisFunction::BSplineBasisFunction(conststd::vector&U )
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions :mKnotVector(U)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions BSplineBasisFunction::~BSplineBasisFunction(void)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intBSplineBasisFunction::GetKnotVectorSize(void)const
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returnstatic_cast(mKnotVector.size());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubleBSplineBasisFunction::GetKnot(inti )const
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returnmKnotVector[i];
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intBSplineBasisFunction::FindSpan(doubleu )
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiSize=static_cast(mKnotVector.size());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(u>=mKnotVector[iSize-1])
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returniSize;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiLow=0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiHigh=iSize;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiMiddle=(iLow+iHigh)/2;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions while(umKnotVector[iMiddle+1])
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(u
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions iHigh=iMiddle;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions else
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions iLow=iMiddle;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions iMiddle=(iLow+iHigh)/2;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returniMiddle;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubleBSplineBasisFunction::EvalBasis(inti,intp,doubleu )
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if((i+p+1)>=GetKnotVectorSize())
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions return0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(0==p)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(u>=mKnotVector[i]&&u
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions return1;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions else
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions return0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledLeftUpper=u-mKnotVector[i];
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledLeftLower=mKnotVector[i+p]-mKnotVector[i];
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledLeftValue=0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledRightUpper=mKnotVector[i+p+1]-u;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledRightLower=mKnotVector[i+p+1]-mKnotVector[i+1];
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledRightValue=0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(dLeftUpper!=0&&dLeftLower!=0)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions dLeftValue=(dLeftUpper/dLeftLower)*EvalBasis(i, p-1, u);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(dRightUpper!=0&&dRightLower!=0)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions dRightValue=(dRightUpper/dRightLower)*EvalBasis(i+1, p-1, u);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions return(dLeftValue+dRightValue);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions 主函数:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #include"BSplineBasisFunction.h"
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #pragma comment(lib,"osgd.lib")
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #pragma comment(lib,"osgDBd.lib")
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #pragma comment(lib,"osgGAd.lib")
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions #pragma comment(lib,"osgViewerd.lib")
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::Node*MakeBasisFuncLine(BSplineBasisFunction&bf,inti,intp)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //The property basis functions.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiLen=bf.GetKnotVectorSize();
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intiStep=800;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledStart=bf.GetKnot(0);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledEnd=bf.GetKnot(iLen-1);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubledDelta=(dEnd-dStart)/iStep;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doubleu=0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions doublev=0;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Create the Geode (Geometry Node) to contain all our osg::Geometry objects.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::Geode*geode=newosg::Geode;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Create Geometry object to store all the vertices and lines primitive.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::ref_ptr<:geometry>linesGeom=newosg::Geometry;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Set the vertex array to the points geometry object.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::ref_ptr<:vec3array>pointsVec=newosg::Vec3Array;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions for(ints=0; s<=iStep; s++)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions u=s*dDelta;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions v=bf.EvalBasis(i, p, u);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions if(v!=0)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions pointsVec->push_back(osg::Vec3(u,0, v));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->setVertexArray(pointsVec);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Set the colors.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::ref_ptr<:vec4array>colors=newosg::Vec4Array;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions colors->push_back(osg::Vec4(1.0f,1.0f,0.0f,0.0f));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->setColorArray(colors.get());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Set the normal in the same way of color.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::ref_ptr<:vec3array>normals=newosg::Vec3Array;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions normals->push_back(osg::Vec3(0.0f,-1.0f,0.0f));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->setNormalArray(normals.get());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->setNormalBinding(osg::Geometry::BIND_OVERALL);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Add the points geometry to the geode.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions linesGeom->addPrimitiveSet(newosg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,0, pointsVec->size()));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions geode->addDrawable(linesGeom.get());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returngeode;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::Node*CreateScene(void)
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osg::Group*root=newosg::Group;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //Knot vector: U={0,0,0,1,2,3,4,4,5,5,5}.
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions std::vectorknotVector;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(0);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(0);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(0);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(1);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(2);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(3);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(4);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(4);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(5);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(5);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions knotVector.push_back(5);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions BSplineBasisFunction basisFunc(knotVector);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions for(inti=0; i
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //root->addChild(MakeBasisFuncLine(basisFunc, i, 1));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions //
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions root->addChild(MakeBasisFuncLine(basisFunc, i,2));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returnroot;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions intmain(intargc,char*argv[])
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions {
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions osgViewer::Viewer viewer;
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions viewer.setSceneData(CreateScene());
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions viewer.addEventHandler(newosgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions viewer.addEventHandler(newosgViewer::StatsHandler);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions viewer.addEventHandler(newosgViewer::WindowSizeHandler);
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions returnviewer.run();
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions }
若想显示出所有次数的B样条基函数,只需要在CreateScene中添加就好了。
以《The NURBS Book》中的例子2.2,节点矢量U={0, 0, 0, 1, 2, 3, 4, 4, 5, 5, 5},次数p=2,分别将程序计算的一次、二次B样条基函数的结果列出,如下图所示:
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions 图1. 一次B样条基函数
matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions 图2. 二次B样条基函数
本来还想将不同的B样条基函数以不同的颜色显示,试了几次,都没有成功。若以不同的颜色显示,会更直观。若你有设置颜色的方法,欢迎告诉我,[email protected]。
三、结论 Conclusion
程序计算结果与书中吻合,效果还不错。
理解了B样条的Cox-deBoor递推定义之后,可以将程序中的递归代码转换为非递归实现,这样就可以深入理解B样条基函数了。