您好, 访客   登录/注册

B样条曲面构建算法设计与实现

来源:用户上传      作者:

  摘 要:本文重点介绍了B样条曲面的基本概念、性质和分类,主要研究B样条曲面的基本原理和构建算法的实现,通过对B样条基函数进行详细研究,引入两个参数后,能更加灵活地调整曲线。最后,基于OpenGL生成两片均匀B样条曲面,并给出了运行结果。
  关键词:B样条曲线;B样条曲面;曲面构建
  中图分类号:TP391.7 文献标识码:A 文章编号:1003-5168(2019)02-0014-03
  Design and Implementation of B-spline Surface Construction Algorithm
  LI Bo1 WU Lijuan1 HAN Song1 JIAO Xingqiang1 JI Dengqing2
  (1.Shenyang Normal University,Shenyang Liaoning 110034;2.Wuyi University,Jiangmen Guangdong 529030)
  Abstract: This paper focused on the basic concept, properties and classification of B-spline surface. It mainly studied the basic principle of B-spline surface and the realization of its construction algorithm. Through the detailed study of B-spline basis function, the curve could be adjusted more flexibly by introducing two parameters. Finally, two uniform B-spline surfaces were generated based on OpenGL, and the running results were given.
  Keywords: B-spline curve;B-spline surface;surface construction
  目前,人们的生产和生活越来越受到计算机图形学的影响,计算机图形学不断影响每一个使用计算机的人。计算机辅助几何设计(CAGD)是一种伴着船舶、汽车、飞机等现代制造工业而兴起的应用学科,其与计算机图形学有着密不可分的联系。计算机图形学中较常用的曲线曲面有插值曲线曲面、Bezier曲线曲面、B样条曲线曲面和非均匀有理样条曲线曲面等。B样条曲线曲面有着良好的局部性质,因此,在工程设计中得到了越来越广泛的应用[1-5]。
  1 B样条曲线曲面
  1.1 B样条曲线的优点
  Bezier曲线具有诸多优越性,但也存在不足:①特征多边形顶点数决定了其阶次数,当[n]较大时,不仅计算量增大,稳定性降低,而且控制顶点对曲线的形状控制减弱;②不具有局部性,即修改一控制点对曲线产生全局性影响。
  1972年,Gordon等用B样条基代替Bernstein基函数,从而改进上述缺点。首先,B样条曲线比Bezier曲线更贴近控制多边形,且更光滑,其基函数的多项式次数可根据需要给定。其次,B样条曲线能对曲线进行局部修改,由于B样条曲线是分段构成的,所以控制多边形的顶点对曲线的控制灵活而直观。修改某一控制点只会引起与该控制点相邻近的曲线形状发生变化,远处的曲线形状不受影响,这使得B样条广泛应用于交互式自由曲线曲面的设计[6-10]。
  1.2 B样条曲线的定义
  B样条曲线定义如下:
  [P(t)=i=0nPiNi(t),tmin≤t≤tmax,2≤k≤n+1]          (1)
  其中,[Pi]是控制多邊形的顶点集;[i]是大于0的整数,是B样条的序号;[k]表示B样条的幂次;[Pi]是B样条曲线的[n+1]个控制顶点的顶点集。将各个控制顶点顺序连线形成的折线图形称为控制多边形。[Ni,k(t)]是定义在节点矢量[T]上的[k]次B样条基函数,用[Ni,k(t)]表示第[i]个[k]次([k+1])阶B样条基函数,是由节点矢量的参数序列[T:t0≤t1≤...≤ti+k+1]所决定的[k-1]次分段多项式样条。参数[t]的取值构成一个非递减的参数序列[T],被称为节点向量。任意一个控制点最多只能影响[k]段曲线的形状。
  1.3 B样条曲面的定义
  B样条曲面由B样条曲线拼接而成,是通过两个方向的控制顶点网格、两个节点矢量和单变量的B样条基函数的乘积来定义。一块[m×n]次张量积B样条曲面片,其方程为:
  [Pu,v=i=0mj=0nPijNi,puNj,qv]            (2)
  其中,节点矢量[u]中含有[m+1]个节点,节点矢量[v]中含有[n+1]个节点,此时就构成一张控制网格,称为B样条曲面的特征网格。[Ni,pu]和[Nj,qv]是节点向量[u]和[v]按de Boor-Cox递推公式决定的B样条混合函数。
  1.4 B样条曲面的性质
  ①严格的凸包性。如果[Pt]位于控制顶点所建立的凸包内,曲线严格位于控制多边形的凸包内(见图1)。
  ②分段参数多项式。[Pt]在每个区间上都是次数不高于[k-1]次的多项式。
  ③可微性与连续性。[Pt]在每一曲线段内部是无限可微的,在定义域内重复度为[k]的节点处,则使[p-k]次可微或具有[p-k]阶参数连续性。   ④几何不变性。B样条曲线的形状和位置与坐标系的选取无关。
  ⑤局部可调性。如果改变某个控制顶点的位置,只会影响那个顶点所对应的曲线段,对其他部分曲线没有影响;同理,如果想改变某一段曲线的形状,只需要改变对应的控制顶点,与其他顶点无关。
  ⑥近似性。在控制顶点不共线的情况下,当次数越高时,这组控制顶点所对应的B样条曲线越光滑。
  1.5 曲面的分类
  B样条曲面由一系列曲线拼接而成,在分类上同样按照节点矢量分为三类:均匀B样条曲面、准均匀B样条曲面和非均匀B样条曲面。
  ①均匀B样条曲面,节点矢量[u,v]满足条件:
  [Δui=ui+1-ui=const>0,i=k,...,m+k]                  (1)
  [Δvj=vj+1-vj=const>0,j=1,...,n+l]                 (2)
  ②准均匀B样条曲线,节点矢量[u,v]满足条件:
  [u0=...=uk,um+1=...=um+k+1,Δui=ui+1-ui=const>0,i=k,...,m]         (3)
  [v0=...=v1,vn+1=vn+j+1,Δvj=vj+1-vj=const>0,j=1,...,n]          (4)
  ③非均匀B样条曲面。对于这种类型的B样条曲面,只要节点矢量满足以下条件即可:节点序列非递减;两端节点的重数小于等于次数+1,内节点的重数小于等于次数。
  2 B样条曲面的构建
  2.1 算法设计
  三次B样条曲面是由三次B样条曲线拓广而来,以两组正交的三次B样条曲线控制点构造空间网格来生成曲面。给定了36个控制点,通过给定的控制点生成一个6×6的网格,对B样条曲面基函数进行算法设计,分别从[u]向和[v]向进行赋值,让控制点与基函数相乘求和,从而生成对应的型值点,连接型值点,通过编程进行循环操作,进而生成B样条曲面。
  2.2 算法实现
  [k×l]阶B样条曲面[Pt,s]定义为:
  [Pt,s=i=0nj=0mPijNi,ktNj,ts]                        [tk-1≤t≤tn+1,st-1≤s≤st+1]                         (5)
  其中,[Pij0≤i≤n,0≤j≤m]为控制顶点,[Ni,kt]和[Nj,ts]分别为[k]阶和[l]阶B样条基函数。节点向量为[T1]和[T4],[T4]:[0,0,...,0t,st,...,sm,1,...,1t]。
  设在t方向上扩展曲面[P(t,s)]到[m+1]目标点[Pn+1,j,j=0,1,...m]。设[P(t,s)]中沿t方向的[m+1]条B样条曲线为:
  [Pjt=i=0nPijNikt,j=0,1...,m]                 (6)
  设与[Pjt]相应的第[j]条扩展曲线为[Qjt],与[Qjt]相应[a]为[aj],则与目标点[Pn+1j(j=0,1,...m)]相应的节点值为所有[a(j=0,1,...m)]的加权平均,即
  [u=1+1m+1j=0maj]                          (7)
  三次B樣条曲线的矩阵表达式:
  [Pt=t3t2t1?16?-13-313-630-30301410?P0P1P2P3=T?MB?MG]          (8)
  其中,[MB]为三次B样条曲线的系数矩阵,[MG]为几何矩阵,为四个控制点的位置矢量。三次B样条曲面时由三次B样条曲线拓广而来,以两组正交的三次B样条曲线控制点构造空间网格来生成曲面。依次用线段连接点列[Pi,ji=0,1,2,3;j=0,1,2,3]中相邻两点所形成的空间网格称为控制网格。三次B样条曲面的定义为:
  [Pu,v=i=03j=03pijNi,3uNj,3v],[u,v∈0,1×0,1]       (9)
  [Pu,v=N0,3(u)N1,3(u)N2,3(u)N3,3(u)?P0,0P0,1P0,2P0,3P1,0P1,0P1,2P1,3P2,0P2,0P2,2P2,3P3,0P3,0P3,2P3,3?N0,3(v)N1,3(v)N2,3(v)N3,3(v)]            (10)
  其中,[N0,3u],[N1,3u],[N2,3u],[N3,3u],[N0,3v],[N1,3v],[N2,3v],[N3,3v]是三次B样条基函数。
  [N0,3u=16-u3+3u2-3u+1N1,3u=163u3-6u2+4N2,3u=16-3u3+3u2+3u+1N3,3u=16u3],                    [N0,3v=16-v3+3v2-3v+1N1,3v=163v3-6v2+4N2,3v=16-3v3+3v2+3v+1N3,3v=16v3]               (11)   将式(10)代入式(11)得:
  [Pu,v=136?u3u2u1?-13-313-630-30301410?P0,0P0,1P0,2P0,3P1,0P1,1P1,2P1,3P2,0P2,1P2,2P2,3P3,0P3,1P3,2P3,3?-13-313-604-33311000?v3v2v1] (12)
  三次B样条曲面的矩阵表示为
  [Pu,v=U?Mb?P?MTb?VT]             (13)
  其中:
  [U=u3u2u1]                       (14)
  [V=v3v2v1]                        (15)
  [Mb=16?-13-313-630-30301410]                     (16)
  [P=P0,0P0,1P0,2P0,3P1,0P1,1P1,2P1,3P2,0P1,2P2,2P2,3P3,0P1,3P3,2P3,3]                  (17)
  2.3 运行结果分析
  三次B样条曲面是由三次B样条曲线交织而成。曲面生成时可以先固定[u],变化[v]得到一簇三次B样条曲线;然后固定[v],变化[u]得到另一簇三次B样条曲线。与三次B样条曲线相似,双三次B样条曲面一般情况下不通过控制网格的任何顶点。
  3 结论
  本文就B样条曲线、曲面的定义、性质、分类以及算法等相关知识进行了全面系统的介绍,基于B样条曲面方程,通过计算B样条曲线的节点矢量以及B样条基函数等,能够得到曲面上的任意一点并生成B样条曲面。
  参考文献:
  [1]郭怀天.B样条曲线及曲面研究[D].合肥:合肥工业大学,2012.
  [2]吳学毅.计算机图形学原理与实践[M].北京:印刷工业出版社,2008.
  [3]傅雅宁.计算机图形学教程[M].北京:国防工业出版社,2005.
  [4]梁锡坤.B样条曲线曲面理论及其应用研究[D].合肥:合肥工业大学,2003.
  [5]孙家广,胡事民.计算机图形学基础教程[M].北京:清华大学出版社,2005.
  [6]孔正兴,周良,郑宏源.计算机图形学基础教程[M].北京:清华大学出版社,2003.
  [7]王洪艳.B样条曲线曲面造型研究[D].哈尔滨:哈尔滨理工大学,2010.
  [8]K. Waters. A Muscle Model for Animating Three Dimensional Facial Expression[J] .Computer Graphics(SIGGRAPH’87),1987(4):17-24.
  [9]杨晓静.B样条曲面构造方法的研究与实现[D].北京:北京工业大学,2003.
  [10]何芳.移动曲面拟合法在复杂曲面造型中的研究与应用[D].武汉:武汉理工大学,2008.
转载注明来源:https://www.xzbu.com/1/view-14859523.htm