首页 -> 2008年第6期
非均匀B样条曲面算法研究
作者:岳志强 柴炜嘉
[关键词]非均匀B样条 B样条曲面 B样条基函数
(一)B样条曲面
给定(m+1)*(n+1)个控制顶点di,j(i=0,1...,m;j=0,1...,n)的阵列,构成一张控制网格。分别给定参数u与v的次数k与l,加上两个节点矢量U =[u0,u1,…,um+k+1]和V=[v0,v1,…vn+l+1],就可得一张k×l次张量积B样条曲面:
p(u,v)=di,jNi,k(u)Nj,l(v),uk≤u≤um+1,vl≤v≤vn+1 (1)
1.B样条基Ni,k(u)(i=0,1..., m )和Nj,l(v)(j=0,1…,n)的计算法
Ni,k(u)的双下标中第二下标k表示次数,第一下标i表示符号。从该递推公式中可以看出,若确定第i个Ni,k(u),需用到ui,ui+1,……,ui+k+1共k+2个节点。区间[ui,ui+k+1]为Ni,k(u)的支承区间。Ni,k(u)的第一下标等于其支撑区间左端节点的下标,即表示该B样条在参数u轴上的位置。方程(1)中要用到m+1个k次B样条基函数Ni,k(u) (i=0,1…,m),每一个Ni,k(u)都是一个k次B样条。它们的支撑区间所含节点的并集就是定义这组B样条基的节点矢量U=[u0,u1,…,um+k+1]。
2.曲面的定义域。曲面可以认为是在u方向上看就是由一条条B样条曲线和v方向的一条条B样条曲线组成,所以考虑曲面的定义域可以分别考虑在u和v方向曲线的定义域。
假设v方向为一固定值,则方程(1)相当一个B样条曲线方程
P(u)= djNj,k(u) u ∈[ui,ui+1] (其中j为一固定值)
该式表明了B样条曲线的局部性的一个方面,即k次B样条曲线上定义域参数为u∈[ui,ui+1]的一点p(u)至多域k+1个顶点dj(j=i-k,i-k+1,…i)有关。
给定m+1个顶点控制顶点di(i=0,1,…m),相应要m+1个B样条基函数Ni,k(u)(i=0,1,…m),以定义一条k次B样条曲线。这个m+1个k次B样条有节点矢量U[uo,u1,…um+k+1]所决定。然而并不是这节点矢量包含的m+k+1个区间都在该曲线的定义域内。这是因为m+1个顶点中最前的k+1个顶点di(i=0,1,…,k)定义了样条曲线的首段曲线,其定义区间为u∈[uk,uk+1];往后错一个顶点,di(i=1,2,…,k+1)那k+1个顶点定义了u∈[uk+1,uk+2]……最后k+1个顶点di(i=m-k,m-k-1,…,m)定义了末端曲线,其定义区间为u∈[um,um+1].得到了k次B样条曲线的定义域为u∈[uk,um+1]。
同理,在v方向上曲线的定义域为v∈[vk,vn+1],整个曲面的定义域为:uk≤u≤um+1 , vl≤v≤vn+1
3.节点矢量的计算。用方程(1)计算曲面时,仅给出控制顶点阵和选定次数还是不构的,还要确定两个节点矢量。如果沿任一参数方向(u方向,v方向),选择了均匀、准均匀、分片贝齐尔这三种划分类型,可以说沿该参数方向的节点矢量也就确定下来。但最适合实际的非均匀B样条曲面类型,若尚未确定节点矢量,就需要计算节点矢量。由控制多边形决定矢量节点的方法如下:
令n+1个控制的点控制多边形的各边长依次为li=|di-di-l|(i=1,2,…,n)。总的边长为L=。节点矢量分别确定如下:
(1)偶次B样条曲线的节点矢量。里森费尔德假定偶次B样条曲线的所有m-k各分段接点对应于控制多边形上除两端各k/2条边外其余m-k条边的中点。将其展直,规范化可得:
二次B样条曲线的节点矢量:
U=[0,0,0,,,…,
,1,1,1]
四次B样条曲线的节点矢量为:
U=[0,0,0,0,0,, ,…, ,1,1,1,1,1]
类似地可推知高偶(k次)B样条曲线的节点矢量:
U=[ 0,0,…0, , ,…,
1,1,..,1]
其中0有k+1个,1有k+1个。可见每提高两次,第一与最后两个分段连接点都向内移动一条边。
(2)奇次B样条曲线的节点矢量。假定样条曲线的n-k个分段连接点对应于控制多边形上除两端个(k+1)/2个顶点外其余的n-k个控制顶点。将其展直,规范化可得三次B样条曲线的节点矢量:
U[0,0,0,0, ,,,1,1,1,1]
类似可得高奇次(k次)B样条曲线的节点矢量:
U=[0,0,0,…,0,, ,…, ,1,1,1,…,1]其中有k+1个0,k+1个1。
B样条曲面沿u方向上有多个控制多边形,可以选出沿u方向的诸多控制多边形中带有代表性的,然后由控制多边形生成节点矢量。同理可得v方向的节点矢量。
4.B样条曲面上点的计算。设给定曲面定义域内一对参数值(u,v),欲求该B样条曲面收纳对应的p(u,v),可以先沿任一参数方向譬如先沿v参数方向,按如下步骤进行:以v参数值对沿v参数方向的m+1个控制多边形执行用于计算B样条曲线上点的德布尔算法,求得m+1个点作为中间顶点,构成中间多边形。然后,以u参数值对这中间多边形执行B样条曲线的德布尔算法,所得一点即所求该B样条曲面上的一点p(u,v)。
计算节点区间u∈[ui,ui+1]上的一组k次B样条基:Ni-k(u),Ni-k+1,k(u),……,N
i,k(u)。它们由以下节点序列完全确定ui-k, ui-k+1,…,ui,ui+1,…,ui+k+1。于是由节点序列及区间[ui,ui+1]上的零次B样条。
若ui≤u≤ui+1
Ni,0(u)=0,
其他由公式(2)递推出该区间上的一组k次B样条基础。其中,每列首末基函数在[ui,ui+1]上都是零,去掉后是一个三角阵列,最后一列非零基函数即为所求[ui,ui+1]上的一组k次B样条基。
(二)结论
通过上文,我们明确了B样条曲面的局部性等优点。基于B样条曲面方程,通过求非均匀B样条曲线的节点矢量,计算基函数等我们可以得到B样条曲面上的任意一点从而生成B样条曲面。
参考文献:
[1]施中法.计算机辅助几何设计与非均匀有理B样条[M].北京:高等教育出版社,2001.
[2]Donald Hearn.计算机图像学[M].北京:电子工业出版社,2002.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”
本文为全文原貌 请先安装PDF浏览器
原版全文