首页 -> 2008年第6期

非均匀B样条曲面算法研究

作者:岳志强 柴炜嘉




  [摘 要]B样条曲面在保留了Bézier曲面的优点的同时克服了由于整体表示带来的不具有局部性质的特点,是目前应用最多的一种曲面,有人甚至称之为“统一当代的B样条曲面”。本文对非均匀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浏览器  原版全文