matlab b样条的 coefs,B样条基函数——B-Spline Basis Functions

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样条基函数,其定义为:

efc6cba03b9035ddad8d53d1537844b0.png

B样条基有如下性质:

a) 递推性;

b) 局部支承性;

c) 规范性;

d) 可微性;

二、程序 Codes

直接根据B样条基函数的Cox-deBoor递推定义,写出计算B样条基函数的程序如下:

头文件BSplineBasisFunction.h:

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png/**//*df37983f39daa189b8c814e01a6a9011.png*    Copyright (c) 2013 eryar All Rights Reserved.

df37983f39daa189b8c814e01a6a9011.png*

df37983f39daa189b8c814e01a6a9011.png*        File    : BSplineBasisFunction.h

df37983f39daa189b8c814e01a6a9011.png*        Author  : eryar@163.com

df37983f39daa189b8c814e01a6a9011.png*        Date    : 2013-03-23 22:13

df37983f39daa189b8c814e01a6a9011.png*        Version : V1.0

df37983f39daa189b8c814e01a6a9011.png*

df37983f39daa189b8c814e01a6a9011.png*    Description : Use Cox-deBoor formula to implemente the 

df37983f39daa189b8c814e01a6a9011.png*                  B-Spline Basis functions.

df37983f39daa189b8c814e01a6a9011.png*

0ac3a2d53663ec01c7f7225264eeefae.png*/cbef093dcc044b2793832001e2365e43.png#ifndef _BSPLINEBASISFUNCTION_H_

cbef093dcc044b2793832001e2365e43.png#define_BSPLINEBASISFUNCTION_H_cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png#includecbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.pngclassBSplineBasisFunction

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png918e8df969f9f8c8d002f25cda86cade.png{

df37983f39daa189b8c814e01a6a9011.pngpublic:

df37983f39daa189b8c814e01a6a9011.png    BSplineBasisFunction(conststd::vector&U);

df37983f39daa189b8c814e01a6a9011.png~BSplineBasisFunction(void);

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.pngpublic:

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png/**//*df37983f39daa189b8c814e01a6a9011.png    * @brief Binary search of the knot vector.

4a5daaec04350a363f186a4d2c5ed6ce.png*/df37983f39daa189b8c814e01a6a9011.pngintFindSpan(doubleu);

df37983f39daa189b8c814e01a6a9011.png

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png/**//*df37983f39daa189b8c814e01a6a9011.png    * @brief 

df37983f39daa189b8c814e01a6a9011.png    * @param [in] i: span of the parameter u;

df37983f39daa189b8c814e01a6a9011.png    *        [in] p: degree;

df37983f39daa189b8c814e01a6a9011.png    *        [in] u: parameter;

4a5daaec04350a363f186a4d2c5ed6ce.png*/df37983f39daa189b8c814e01a6a9011.pngdoubleEvalBasis(inti,intp,doubleu);

df37983f39daa189b8c814e01a6a9011.png

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png/**//*df37983f39daa189b8c814e01a6a9011.png    * @breif Get knot vector size.

4a5daaec04350a363f186a4d2c5ed6ce.png*/df37983f39daa189b8c814e01a6a9011.pngintGetKnotVectorSize(void)const;

df37983f39daa189b8c814e01a6a9011.png

f70a0fde2b51b7dd92a70e712e540cf6.png

edb48e6f68462ea23d9a824f01de40c5.png/**//*df37983f39daa189b8c814e01a6a9011.png    * @breif Get the knot value of the given index.

4a5daaec04350a363f186a4d2c5ed6ce.png*/df37983f39daa189b8c814e01a6a9011.pngdoubleGetKnot(inti)const;

df37983f39daa189b8c814e01a6a9011.png

df37983f39daa189b8c814e01a6a9011.pngprivate:

df37983f39daa189b8c814e01a6a9011.png    std::vectormKnotVector;

0ac3a2d53663ec01c7f7225264eeefae.png};

cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png#endif//_BSPLINEBASISFUNCTION_H_cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

cbef093dcc044b2793832001e2365e43.png

实现文件BSplineBasisFunction.cpp:

2f88ce130b654eb5dc6788e02dbcfc90.png

dbf989d57862681739b642d8621fe1f0.png/**//*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值