APP下载

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

2019-09-10李博吴丽娟韩松焦兴强吉登清

河南科技 2019年2期

李博 吴丽娟 韩松 焦兴强 吉登清

摘 要:本文重点介绍了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.