- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
B 样条曲线曲面和 NURBS 曲线曲面
(学习笔记和上机练习)
非均匀有理 B 样条,通常简称为 NURBS(Non-Uniform Rational B-Splines)。NURBS 是非有理 B 样条、有理以及非有理 Bézier 曲线曲面的推广。
一、要对 B 样条曲线曲面和 NURBS 曲线曲面有所了解应先了解 B 样条基函数
B 样条基函数的定义和性质
令U ? ?u
0
, u ,...,u
1 m
?是一个实数列,即u
i
≤ u
i?1
,i=0,1,…,m-1。其中,u
i
称为节点,
U 称为节点矢量,用 N (u) 表示第 i 个 p 次( p +1 阶)B 样条基函数,其定义为
i, p
?1,
N
i,0
(u) ? ?
?0,
若u ≤ u < u
i
i?1
值为 1,其他值为 0
N (u) ?
u ? u
i N
(u) ?
u ? u
i? p?1 N
(u) (2)
i, p
由(2)式可知:
u ? u
i? p i
i, p?1
u
i? p?1
u
i?1
i?1, p?1
N (u) 是一个阶梯函数,它在半开区间u ?[u , u ) 外都为零;
i,0 i i?1
当 p >0 时, N (u) 是两个 p -1 次基函数的线性组合;
i, p
计算一组基函数时需要事先指定节点矢量U 和次数 p ;
(4)(2)式中可能出现 0/0,我们规定 0/0=0;
N (u) 是定义在整个实数轴上的分段多项式函数,只在区间[u u ] 上有意义;
i, p 0, m
半开区间[u , u ) 称为第 i 个节点区间,长度可以为零,因相邻节点可以相同;
i i?1
B 样条基函数的一些重要性质:
1 如果u ?[u , u ) ,则 N (u) =0。
i i? p?1 i, p
2 对于所有的i, p 和u ,有 N (u) ≥0.
i, p
对于任意的节点区间[u
i
, u
i?1
) ,当u ?[u
i
, u
i?1
) 时, ?i
N
j , p
(u) ? 1 。
j ?i? p
在节点区间内部, Ni, p (u) 是无限次可微的。在节点处 Ni, p (u) 是 p ? k 次连续可微的,其中k 是节点的重复度。
除 p ? 0 的情况外, Ni, p (u) 严格的达到一次最大值。
B 样条基函数的导数
基函数的求导公式为
N ? ? p
N (u) ?
p N (u) (4)
i, p
u ? u
i? p i
i, p?1
u
i? p?1
u
i?1
i?1, p?1
根据求导法则( fg )? ? f ?g ? fg ? ,对基函数
u ? u u ? u
N (u) ?
i N (u) ???i? p?1 N
(u)
i, p
u ? u
i? p i
i, p?1
u
i? p?1
u
i?1
i?1, p?1
求导得到一般的求导公式:
N ( k ?1) N ( k ?1)
N ( k ) ? p( i, p?1 ? i?1, p?1 )
(5)
i, p u
u
i? p i
u
i? p?1
u
i?1
另一个计算B 样条基函数各阶导数的公式(参考[Butt76]):
N (k ) ?
p ( u ? ui
N (k )
ui? p?1 ? u
N (k )
) , k ? 0,1, …, p ? 1 (6)
i, p
p ? k
u ? u
i? p i
i, p?1
u
i? p?1
u
i?1
i?1, p?1
B 样条基函数的一些重要计算
a – 确定节点( u )在节点矢量(U )的区间下标(据u ?[u , u ) 区间)
i i?1
//确定参数u 所在的节点区间下标
//n=m-p-1
//m 为节点矢量U[]的最大下标
//p 为 B 样条函数次数
int Buspan(int n,int p,float u,float U[])
{
int low,high,mid;
if(u==U[n+1])//特殊情况return n;
//进行二分搜索low=p; high=n+1;
mid=(int)(low+high)/2; while(uU[mid]||uU[mid])
{
if(uU[mid])
high=mid; else
low=mid; mid=(int)(low+high)/2;
if(u=U[mid]uU[mid+1])//找到u 所在的节点区间的下标
break; //退出二分搜索
}
return mid; //返回区间下标
}
b – 计算节点参数u 的所有非零B 样条基函数值(据定义(2)式)
文档评论(0)